Files
gerrit/java/com
Edwin Kempin 03a77c48be Fix retrying of index queries
Since change I9b577a827 we provide an InternalQuery instance to the
retryable action that executes an index query. Unfortunately for all
retries we always provide the same InternalQuery instance to the action,
but InternalQuery instances can be used only once. Fix this by creating
a new InternalQuery instance for each retry.

Example stacktrace:
java.lang.IllegalStateException: AccountQueryProcessor has already been used
        at com.google.common.base.Preconditions.checkState(Preconditions.java:589)
        at com.google.gerrit.index.query.QueryProcessor.query(QueryProcessor.java:206)
        at com.google.gerrit.index.query.QueryProcessor.query(QueryProcessor.java:194)
        at com.google.gerrit.index.query.QueryProcessor.query(QueryProcessor.java:178)
        at com.google.gerrit.index.query.InternalQuery.queryResults(InternalQuery.java:97)
        at com.google.gerrit.index.query.InternalQuery.query(InternalQuery.java:92)
        at com.google.gerrit.server.query.account.InternalAccountQuery.byPreferredEmail(InternalAccountQuery.java:97)
        at com.google.gerrit.server.account.Emails.lambda$getAccountFor$0(Emails.java:78)
        at com.google.gerrit.server.update.RetryableIndexQueryAction.lambda$new$0(RetryableIndexQueryAction.java:48)
        at com.github.rholder.retry.AttemptTimeLimiters$NoAttemptTimeLimit.call(AttemptTimeLimiters.java:78)
        at com.github.rholder.retry.Retryer.call(Retryer.java:160)
        at com.google.gerrit.server.update.RetryHelper.executeWithTimeoutCount(RetryHelper.java:555)
        at com.google.gerrit.server.update.RetryHelper.execute(RetryHelper.java:504)
        at com.google.gerrit.server.update.RetryableAction.call(RetryableAction.java:171)
        at com.google.gerrit.server.update.RetryableIndexQueryAction.call(RetryableIndexQueryAction.java:84)
        at com.google.gerrit.server.account.Emails.getAccountFor(Emails.java:78)
        at com.google.gerrit.server.account.AccountResolver$ByEmail.search(AccountResolver.java:371)
        at com.google.gerrit.server.account.AccountResolver$ByEmail.search(AccountResolver.java:363)
        at com.google.gerrit.server.account.AccountResolver$Searcher.trySearch(AccountResolver.java:227)
        at com.google.gerrit.server.account.AccountResolver.searchImpl(AccountResolver.java:595)
        at com.google.gerrit.server.account.AccountResolver.resolve(AccountResolver.java:519)
        at com.google.gerrit.server.restapi.account.AccountsCollection.parse(AccountsCollection.java:53)
        at com.google.gerrit.server.restapi.account.AccountsCollection.parse(AccountsCollection.java:33)
        at com.google.gerrit.httpd.restapi.RestApiServlet.lambda$parseResourceWithRetry$2(RestApiServlet.java:727)
        at com.github.rholder.retry.AttemptTimeLimiters$NoAttemptTimeLimit.call(AttemptTimeLimiters.java:78)
        at com.github.rholder.retry.Retryer.call(Retryer.java:160)
        at com.google.gerrit.server.update.RetryHelper.executeWithTimeoutCount(RetryHelper.java:555)
        at com.google.gerrit.server.update.RetryHelper.execute(RetryHelper.java:504)
        at com.google.gerrit.server.update.RetryableAction.call(RetryableAction.java:171)
        at com.google.gerrit.httpd.restapi.RestApiServlet.invokeRestEndpointWithRetry(RestApiServlet.java:833)
        at com.google.gerrit.httpd.restapi.RestApiServlet.parseResourceWithRetry(RestApiServlet.java:722)
        at com.google.gerrit.httpd.restapi.RestApiServlet.service(RestApiServlet.java:387)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        ...

Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: Ib9e07e7c097115ea2cedbbf0c012ee20cfe0a5eb
2019-12-18 09:47:49 +01:00
..