[JIRA] (JENKINS-60126) Getting environment variables fails, if query for change info returns more than one result

11 views
Skip to first unread message

thomas.draebing@gmail.com (JIRA)

unread,
Nov 11, 2019, 4:58:02 AM11/11/19
to jenkinsc...@googlegroups.com
Thomas Draebing created an issue
 
Jenkins / Bug JENKINS-60126
Getting environment variables fails, if query for change info returns more than one result
Issue Type: Bug Bug
Assignee: lucamilanesio
Components: gerrit-code-review-plugin
Created: 2019-11-11 09:57
Priority: Major Major
Reporter: Thomas Draebing

If having a multibranch pipeline running a job building a change whose change number is also part of the revision sha1, the job fails with the following stacktrace:
java.lang.IllegalArgumentException: expected one element but was: <com.google.gerrit.extensions.common.ChangeInfo@2f39c0bf, com.google.gerrit.extensions.common.ChangeInfo@f10b960>
at com.google.common.collect.Iterators.getOnlyElement(Iterators.java:312)
at com.google.common.collect.Iterables.getOnlyElement(Iterables.java:268)
at com.urswolfer.gerrit.client.rest.http.changes.ChangeApiRestClient.get(ChangeApiRestClient.java:259)
at com.urswolfer.gerrit.client.rest.http.changes.ChangeApiRestClient.get(ChangeApiRestClient.java:264)
at jenkins.plugins.gerrit.ProjectOpenChanges$1.load(ProjectOpenChanges.java:45)
at jenkins.plugins.gerrit.ProjectOpenChanges$1.load(ProjectOpenChanges.java:43)
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3568)
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2350)
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2313)
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2228)
at com.google.common.cache.LocalCache.get(LocalCache.java:3965)
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3969)
at com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4829)
at jenkins.plugins.gerrit.ProjectOpenChanges.get(ProjectOpenChanges.java:56)
at jenkins.plugins.gerrit.AbstractGerritSCMSource.getChangeInfo(AbstractGerritSCMSource.java:87)
at jenkins.plugins.gerrit.GerritEnvironmentContributor.buildEnvironmentFor(GerritEnvironmentContributor.java:82)
at hudson.model.Job.getEnvironment(Job.java:397)
at hudson.model.Run.getEnvironment(Run.java:2273)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.getEnvironment(WorkflowRun.java:425)
at org.jenkinsci.plugins.workflow.support.DefaultStepContext.get(DefaultStepContext.java:65)
at org.jenkinsci.plugins.workflow.steps.StepDescriptor.checkContextAvailability(StepDescriptor.java:259)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:206)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:153)
at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)
at sun.reflect.GeneratedMethodAccessor458.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1218)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:157)
at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:133)
at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:159)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:129)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:129)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
Caused: com.google.common.util.concurrent.UncheckedExecutionException
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2234)
at com.google.common.cache.LocalCache.get(LocalCache.java:3965)
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3969)
at com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4829)
at jenkins.plugins.gerrit.ProjectOpenChanges.get(ProjectOpenChanges.java:56)
at jenkins.plugins.gerrit.AbstractGerritSCMSource.getChangeInfo(AbstractGerritSCMSource.java:87)
at jenkins.plugins.gerrit.GerritEnvironmentContributor.buildEnvironmentFor(GerritEnvironmentContributor.java:82)
at hudson.model.Job.getEnvironment(Job.java:397)
at hudson.model.Run.getEnvironment(Run.java:2273)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.getEnvironment(WorkflowRun.java:425)
at org.jenkinsci.plugins.workflow.support.DefaultStepContext.get(DefaultStepContext.java:65)
at org.jenkinsci.plugins.workflow.steps.StepDescriptor.checkContextAvailability(StepDescriptor.java:259)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:206)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:153)
at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)
at sun.reflect.GeneratedMethodAccessor458.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1218)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1027)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:157)
at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:133)
at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:159)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:129)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:129)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
at WorkflowScript.run(WorkflowScript:245)
at __cps.transform__(Native Method)
at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
at sun.reflect.GeneratedMethodAccessor72.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
at com.cloudbees.groovy.cps.impl.CollectionLiteralBlock$ContinuationImpl.dispatch(CollectionLiteralBlock.java:55)
at com.cloudbees.groovy.cps.impl.CollectionLiteralBlock$ContinuationImpl.item(CollectionLiteralBlock.java:45)
at sun.reflect.GeneratedMethodAccessor76.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
at com.cloudbees.groovy.cps.Next.step(Next.java:83)
at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122)
at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261)
at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:19)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:35)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:32)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:32)
at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:331)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$200(CpsThreadGroup.java:82)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:243)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:231)
at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)
at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
This happens, because the query for the change info returns multiple results, which isn't expected by the plugin.

This might be related to JENKINS-59958.

Add Comment Add Comment
 
This message was sent by Atlassian Jira (v7.13.6#713006-sha1:cc4451f)
Atlassian logo

thomas.draebing@gmail.com (JIRA)

unread,
Nov 12, 2019, 8:33:04 AM11/12/19
to jenkinsc...@googlegroups.com
Thomas Draebing commented on Bug JENKINS-60126
 
Re: Getting environment variables fails, if query for change info returns more than one result

I debugged this and found that this actually seems to be a bug in the Gerrit Rest Api Client used by the plugin. The client queries for a change using the change number instead of using GET. Thus multiple results are possible, but the client itself expects just one result and fails, if this is not the case (see com.urswolfer.gerrit.client.rest.http.changes.ChangeApiRestClient line 259).

.

thomas.draebing@gmail.com (JIRA)

unread,
Nov 12, 2019, 10:07:04 AM11/12/19
to jenkinsc...@googlegroups.com
Thomas Draebing started work on Bug JENKINS-60126
 
Change By: Thomas Draebing
Status: Open In Progress

thomas.draebing@gmail.com (JIRA)

unread,
Nov 12, 2019, 10:07:04 AM11/12/19
to jenkinsc...@googlegroups.com

thomas.draebing@gmail.com (JIRA)

unread,
Nov 12, 2019, 10:07:05 AM11/12/19
to jenkinsc...@googlegroups.com

luca.milanesio@gmail.com (JIRA)

unread,
Nov 24, 2019, 4:06:03 PM11/24/19
to jenkinsc...@googlegroups.com

luca.milanesio@gmail.com (JIRA)

unread,
Dec 2, 2019, 9:24:04 AM12/2/19
to jenkinsc...@googlegroups.com

luca.milanesio@gmail.com (JIRA)

unread,
Dec 2, 2019, 9:24:04 AM12/2/19
to jenkinsc...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages