tree e08bd4d2dbd292b44a75786b57d4c3843d49c0b4
parent 2e5531ccee8872ddfb6595798416512f0fe6dec7
author Edwin Kempin <ekempin@google.com> 1576768711 +0100
committer Edwin Kempin <ekempin@google.com> 1576769305 +0100

Submit: if change to be submitted is missing in index result check if it is merged

Sometimes submit fails with IllegalStateException "change ... missing
from ChangeSet[][]" [1]. One possibility how this can happen is that the
change was merged by a concurrent request in the meantime:

1. [request 1] Change is ready to submit
2. [request 1] The Submit REST endpoint is invoked for it.
3. [request 1] The Submit REST endpoint checks that the change is open.
4. [request 2] A concurrent request submits the change.
5. [request 1] MergeSuperSet is used to find the changes that need to be
   submitted together.
6. [request 1] The index query in
   LocalMergeSuperSetComputation.byCommitsOnBranchNotMerged queries for
   non-merged changes ("-status:merged") and has no result (since the
   change was merged in the meantime by request 2).
7. MergeOp fails because the change is missing in the set of changes
   that should be submitted.

Instead of failing reload the change and check if it is merged now. If
yes return 409 Conflict to the client as we do when the Submit REST
endpoint is invoked for a merged change. If not, throw the same
IllegalStateException as before.

[1]
java.lang.IllegalStateException: change 9926335 missing from ChangeSet[][]
        at com.google.common.base.Preconditions.checkState(Preconditions.java:824)
        at com.google.gerrit.server.submit.MergeOp.merge(MergeOp.java:463)
        at com.google.gerrit.server.restapi.change.Submit.mergeChange(Submit.java:210)
        at com.google.gerrit.server.restapi.change.Submit.apply(Submit.java:186)
        at com.google.gerrit.server.restapi.change.Submit.apply(Submit.java:81)
        at com.google.gerrit.httpd.restapi.RestApiServlet.lambda$invokeRestModifyViewWithRetry$4(RestApiServlet.java:757)
        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:419)
        at com.google.gerrit.server.update.RetryHelper.executeWithAttemptAndTimeoutCount(RetryHelper.java:368)
        at com.google.gerrit.server.update.RetryHelper.execute(RetryHelper.java:273)
        at com.google.gerrit.httpd.restapi.RestApiServlet.invokeRestEndpointWithRetry(RestApiServlet.java:836)
        at com.google.gerrit.httpd.restapi.RestApiServlet.invokeRestModifyViewWithRetry(RestApiServlet.java:752)
        at com.google.gerrit.httpd.restapi.RestApiServlet.service(RestApiServlet.java:516)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        ...

Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: I8061b7a18d83f8c8e743a7a9eb575963d37ae4f4
