Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-52043

manager.removeBadge(index) throws UnsupportedOperationException

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Minor
    • Resolution: Fixed
    • Labels:
    • Environment:
      Jenkins 2.124, Groovy Postbuild Plugin 2.4.1
      Jenkins 2.121.2 Groovy Postbuild Plugin 2.4.1 Badge 1.5
    • Similar Issues:
    • Released As:
      groovy-postbuild-2.4.2

      Description

      Pipeline script that reproduces the issue:

      manager.addBadge("info.gif", "hello")
      manager.removeBadge(0)
      

      In the following versions this was working fine:

      Jenkins: 2.101
      Groovy Postbuild Plugin: 2.3.1

      Stacktrace:

      java.lang.UnsupportedOperationException
       at java.util.Collections$UnmodifiableCollection.remove(Collections.java:1058)
       at org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder$BadgeManager.removeBadge(GroovyPostbuildRecorder.java:191)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
       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:1213)
       at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
       at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:47)
       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 com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
       at WorkflowScript.run(WorkflowScript:2)
       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.GeneratedMethodAccessor209.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$101(SandboxContinuable.java:34)
       at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.lambda$run0$0(SandboxContinuable.java:59)
       at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
       at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:58)
       at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)
       at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:332)
       at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$200(CpsThreadGroup.java:83)
       at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:244)
       at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:232)
       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:131)
       at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
       at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
       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)

        Attachments

          Issue Links

            Activity

            Show
            mooncrosser Grigor Lechev added a comment - If I'm reading the code correctly this is caused by this commit: https://github.com/jenkinsci/groovy-postbuild-plugin/commit/0bd9e4b11e613f170fbf92c1dd8173dac4bb37e3 build.getActions() returns a modifiable instance of the list where build.getAllActions() - unmodifiable. See: getActions https://github.com/jenkinsci/jenkins/blame/578d6bacb33a5e99f149de504c80275796f0b231/core/src/main/java/hudson/model/Actionable.java#L76 getAllActions https://github.com/jenkinsci/jenkins/blame/578d6bacb33a5e99f149de504c80275796f0b231/core/src/main/java/hudson/model/Actionable.java#L96  
            Hide
            skhushalani Sagar Khushalani added a comment - - edited

            Also happens on manager.removeBadges()

            at java.util.Collections$UnmodifiableCollection.removeAll(Collections.java:1068)
            at org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder$BadgeManager.removeBadges(GroovyPostbuildRecorder.java:181)
            at org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder$BadgeManager$removeBadges$2.call(Unknown Source)
            at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
            at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
            at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)

             

            There is no exception in version 2.3.1.

            Show
            skhushalani Sagar Khushalani added a comment - - edited Also happens on manager.removeBadges() at java.util.Collections$UnmodifiableCollection.removeAll(Collections.java:1068) at org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder$BadgeManager.removeBadges(GroovyPostbuildRecorder.java:181) at org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder$BadgeManager$removeBadges$2.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)   There is no exception in version 2.3.1.
            Hide
            skhushalani Sagar Khushalani added a comment -
            Show
            skhushalani Sagar Khushalani added a comment - Created a potential fix: https://github.com/jenkinsci/groovy-postbuild-plugin/pull/36
            Hide
            ikedam ikedam added a comment -

            Thanks for the fix!
            Please let me have some more time to make a new release.

            Show
            ikedam ikedam added a comment - Thanks for the fix! Please let me have some more time to make a new release.
            Hide
            ikedam ikedam added a comment -

            Released groovy-postbuild-2.4.2 with this fix.
            It will be available in the update center in a day.
            Please try that.

            Show
            ikedam ikedam added a comment - Released groovy-postbuild-2.4.2 with this fix. It will be available in the update center in a day. Please try that.

              People

              Assignee:
              mooncrosser Grigor Lechev
              Reporter:
              mooncrosser Grigor Lechev
              Votes:
              3 Vote for this issue
              Watchers:
              6 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: