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