Files
gerrit/java
Edwin Kempin dadc193eba Handle duplicate label values on project load and push of config updates
If a project had a label definition where a value was defined twice
getting the project info via REST failed [1].

With this change we now generate a validation error on load of the
project.config file, but let the loading succeed (the duplicate value is
filtered out). Hence getting the project info of such a project no
longer fails.

The new validation error also ensures that it is no longer possible to
push updates of project.config files that introduce duplicate label
values.

[1]
java.lang.IllegalStateException: Duplicate key 1 (attempted merging values Looks Good and Looks Good)
        at java.util.stream.Collectors.duplicateKeyException(Collectors.java:131)
        at java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:178)
        at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1383)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
        at com.google.gerrit.server.project.ProjectJson.format(ProjectJson.java:52)
        at com.google.gerrit.server.restapi.project.GetProject.apply(GetProject.java:37)
        at com.google.gerrit.server.restapi.project.GetProject.apply(GetProject.java:25)
        at com.google.gerrit.httpd.restapi.RestApiServlet.lambda$invokeRestReadViewWithRetry$3(RestApiServlet.java:723)
        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:417)
        at com.google.gerrit.server.update.RetryHelper.executeWithAttemptAndTimeoutCount(RetryHelper.java:368)
        at com.google.gerrit.server.update.RetryHelper.execute(RetryHelper.java:271)
        at com.google.gerrit.httpd.restapi.RestApiServlet.invokeRestEndpointWithRetry(RestApiServlet.java:820)
        at com.google.gerrit.httpd.restapi.RestApiServlet.invokeRestReadViewWithRetry(RestApiServlet.java:718)
        at com.google.gerrit.httpd.restapi.RestApiServlet.service(RestApiServlet.java:501)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        ...

Bug: Issue 12952
Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: I90e5439a00ae613b1b46e04cf7152508c1a0fecc
2020-06-22 04:16:00 +00:00
..