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

java.lang.UnsupportedOperationException in RecordIssuesStep

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Major Major
    • None
    • workflow-api 2.41

      While recording ideaInspection, we get the following exception:

      java.lang.UnsupportedOperationException
      	at java.util.concurrent.CopyOnWriteArrayList$COWIterator.remove(CopyOnWriteArrayList.java:1182)
      	at java.util.AbstractCollection.removeAll(AbstractCollection.java:376)
      	at hudson.model.Actionable.addOrReplaceAction(Actionable.java:209)
      	at io.jenkins.plugins.analysis.core.util.PipelineResultHandler.setResult(PipelineResultHandler.java:34)
      	at io.jenkins.plugins.analysis.core.steps.IssuesPublisher.attachAction(IssuesPublisher.java:120)
      	at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.publishResult(IssuesRecorder.java:721)
      	at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.record(IssuesRecorder.java:651)
      	at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.perform(IssuesRecorder.java:617)
      	at io.jenkins.plugins.analysis.core.steps.RecordIssuesStep$Execution.run(RecordIssuesStep.java:1024)
      	at io.jenkins.plugins.analysis.core.steps.RecordIssuesStep$Execution.run(RecordIssuesStep.java:985)
      	at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
      	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)
      

      The pipeline code:

      recordIssues(
      	failOnError: true,
      	enabledForFailure: true,
      	ignoreFailedBuilds: false,
      	qualityGates: [[threshold: 1, type: 'TOTAL', unstable: true]],
      	tools: [
      		ideaInspection(pattern: 'idea-inspection-output/**'),
      	],
      )
      

      This is identical in all projects. It is not related to the specific inspection result itself, as long as a failing inspection is reported. Projects without inspection errors will be a success.

      Please find attached a minimal example. Disabling failOnError will make the sample running. The only errors I see in my logs are:

      [IntelliJ IDEA Inspections] [-ERROR-] Can't create fingerprints for some files:
      [IntelliJ IDEA Inspections] [-ERROR-] - '$PROJECT_DIR$/testsrc/com/example/ExampleTest.java', IO exception has been thrown: java.nio.file.NoSuchFileException: $PROJECT_DIR$/testsrc/com/example/ExampleTest.java
      

      I'm not sure if this is related to the exception, but even if this is handled as an error in the sense of failOnError, there should be no exception.

          [JENKINS-64438] java.lang.UnsupportedOperationException in RecordIssuesStep

          Martin Heinzerling created issue -
          Martin Heinzerling made changes -
          Description Original: While recording ideaInspection, we get the following exception:
          {code:java}
          java.lang.UnsupportedOperationException
          at java.util.concurrent.CopyOnWriteArrayList$COWIterator.remove(CopyOnWriteArrayList.java:1182)
          at java.util.AbstractCollection.removeAll(AbstractCollection.java:376)
          at hudson.model.Actionable.addOrReplaceAction(Actionable.java:209)
          at io.jenkins.plugins.analysis.core.util.PipelineResultHandler.setResult(PipelineResultHandler.java:34)
          at io.jenkins.plugins.analysis.core.steps.IssuesPublisher.attachAction(IssuesPublisher.java:120)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.publishResult(IssuesRecorder.java:721)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.record(IssuesRecorder.java:651)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.perform(IssuesRecorder.java:617)
          at io.jenkins.plugins.analysis.core.steps.RecordIssuesStep$Execution.run(RecordIssuesStep.java:1024)
          at io.jenkins.plugins.analysis.core.steps.RecordIssuesStep$Execution.run(RecordIssuesStep.java:985)
          at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
          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)
          {code}

          The pipeline code:

          {code}
          recordIssues(
          failOnError: true,
          enabledForFailure: true,
          ignoreFailedBuilds: false,
          qualityGates: [[threshold: 1, type: 'TOTAL', unstable: true]],
          tools: [
          ideaInspection(pattern: 'idea-inspection-output/**'),
          ],
          )
          {code}

          This is identical in all projects. It is not related to the specific inspection result itself, as long as a failing exception is reported. Projects without inspection errors will be a success.
          New: While recording ideaInspection, we get the following exception:
          {code:java}
          java.lang.UnsupportedOperationException
          at java.util.concurrent.CopyOnWriteArrayList$COWIterator.remove(CopyOnWriteArrayList.java:1182)
          at java.util.AbstractCollection.removeAll(AbstractCollection.java:376)
          at hudson.model.Actionable.addOrReplaceAction(Actionable.java:209)
          at io.jenkins.plugins.analysis.core.util.PipelineResultHandler.setResult(PipelineResultHandler.java:34)
          at io.jenkins.plugins.analysis.core.steps.IssuesPublisher.attachAction(IssuesPublisher.java:120)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.publishResult(IssuesRecorder.java:721)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.record(IssuesRecorder.java:651)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.perform(IssuesRecorder.java:617)
          at io.jenkins.plugins.analysis.core.steps.RecordIssuesStep$Execution.run(RecordIssuesStep.java:1024)
          at io.jenkins.plugins.analysis.core.steps.RecordIssuesStep$Execution.run(RecordIssuesStep.java:985)
          at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
          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)
          {code}

          The pipeline code:

          {code}
          recordIssues(
          failOnError: true,
          enabledForFailure: true,
          ignoreFailedBuilds: false,
          qualityGates: [[threshold: 1, type: 'TOTAL', unstable: true]],
          tools: [
          ideaInspection(pattern: 'idea-inspection-output/**'),
          ],
          )
          {code}

          This is identical in all projects. It is not related to the specific inspection result itself, as long as a failing inspection is reported. Projects without inspection errors will be a success.
          Martin Heinzerling made changes -
          Environment Original: Jenkins 2.249.3
          warnings-ng-plugin 8.4.4
          New: Jenkins 2.249.3
          warnings-ng-plugin 8.4.4
          idea 2020.1
          ideaSHA256 fa301279ec1591ecad8758113ff22a64e82b11a583e7eae6fac0eb60ddc9f8e5

          Martin Heinzerling made changes -
          Attachment New: minimal.zip [ 53595 ]
          Martin Heinzerling made changes -
          Description Original: While recording ideaInspection, we get the following exception:
          {code:java}
          java.lang.UnsupportedOperationException
          at java.util.concurrent.CopyOnWriteArrayList$COWIterator.remove(CopyOnWriteArrayList.java:1182)
          at java.util.AbstractCollection.removeAll(AbstractCollection.java:376)
          at hudson.model.Actionable.addOrReplaceAction(Actionable.java:209)
          at io.jenkins.plugins.analysis.core.util.PipelineResultHandler.setResult(PipelineResultHandler.java:34)
          at io.jenkins.plugins.analysis.core.steps.IssuesPublisher.attachAction(IssuesPublisher.java:120)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.publishResult(IssuesRecorder.java:721)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.record(IssuesRecorder.java:651)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.perform(IssuesRecorder.java:617)
          at io.jenkins.plugins.analysis.core.steps.RecordIssuesStep$Execution.run(RecordIssuesStep.java:1024)
          at io.jenkins.plugins.analysis.core.steps.RecordIssuesStep$Execution.run(RecordIssuesStep.java:985)
          at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
          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)
          {code}

          The pipeline code:

          {code}
          recordIssues(
          failOnError: true,
          enabledForFailure: true,
          ignoreFailedBuilds: false,
          qualityGates: [[threshold: 1, type: 'TOTAL', unstable: true]],
          tools: [
          ideaInspection(pattern: 'idea-inspection-output/**'),
          ],
          )
          {code}

          This is identical in all projects. It is not related to the specific inspection result itself, as long as a failing inspection is reported. Projects without inspection errors will be a success.
          New: While recording ideaInspection, we get the following exception:

          {code:java}
          java.lang.UnsupportedOperationException
          at java.util.concurrent.CopyOnWriteArrayList$COWIterator.remove(CopyOnWriteArrayList.java:1182)
          at java.util.AbstractCollection.removeAll(AbstractCollection.java:376)
          at hudson.model.Actionable.addOrReplaceAction(Actionable.java:209)
          at io.jenkins.plugins.analysis.core.util.PipelineResultHandler.setResult(PipelineResultHandler.java:34)
          at io.jenkins.plugins.analysis.core.steps.IssuesPublisher.attachAction(IssuesPublisher.java:120)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.publishResult(IssuesRecorder.java:721)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.record(IssuesRecorder.java:651)
          at io.jenkins.plugins.analysis.core.steps.IssuesRecorder.perform(IssuesRecorder.java:617)
          at io.jenkins.plugins.analysis.core.steps.RecordIssuesStep$Execution.run(RecordIssuesStep.java:1024)
          at io.jenkins.plugins.analysis.core.steps.RecordIssuesStep$Execution.run(RecordIssuesStep.java:985)
          at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
          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)
          {code}

          The pipeline code:

          {code}
          recordIssues(
          failOnError: true,
          enabledForFailure: true,
          ignoreFailedBuilds: false,
          qualityGates: [[threshold: 1, type: 'TOTAL', unstable: true]],
          tools: [
          ideaInspection(pattern: 'idea-inspection-output/**'),
          ],
          )
          {code}

          This is identical in all projects. It is not related to the specific inspection result itself, as long as a failing inspection is reported. Projects without inspection errors will be a success.

          Please find attached a minimal example. Disabling failOnError will make the sample running. The only errors I see in my logs are:
          {code}
          [IntelliJ IDEA Inspections] [-ERROR-] Can't create fingerprints for some files:
          [IntelliJ IDEA Inspections] [-ERROR-] - '$PROJECT_DIR$/testsrc/com/example/ExampleTest.java', IO exception has been thrown: java.nio.file.NoSuchFileException: $PROJECT_DIR$/testsrc/com/example/ExampleTest.java
          {code}

          I'm not sure if this is related to the exception, but even if this is handled as an error in the sense of failOnError, there should be no exception.

          Ulli Hafner added a comment -

          Has anyone an idea what happens here in Actionable? The actions are of type CopyOnWriteArrayList but this list does implement remove.

          Ulli Hafner added a comment - Has anyone an idea what happens here in Actionable ? The actions are of type CopyOnWriteArrayList but this list does implement remove .
          Ulli Hafner made changes -
          Component/s New: core [ 15593 ]
          Assignee Original: Ulli Hafner [ drulli ]

          Raihaan Shouhell added a comment - - edited

          Might be because its unmodifiable https://github.com/jenkinsci/jenkins/blob/f7884d3513c6e436baef432a486197a3bb4d846c/core/src/main/java/hudson/model/AbstractProject.java#L985

          EDIT: Closer inspection seems to show that FlowNode the function being called from a FlowNode, perhaps a FlowNode's getActions() returns an unmodifiable list like above

          Raihaan Shouhell added a comment - - edited Might be because its unmodifiable https://github.com/jenkinsci/jenkins/blob/f7884d3513c6e436baef432a486197a3bb4d846c/core/src/main/java/hudson/model/AbstractProject.java#L985 EDIT: Closer inspection seems to show that FlowNode the function being called from a FlowNode, perhaps a FlowNode's getActions() returns an unmodifiable list like above

          Ulli Hafner added a comment -

          I don't think that this is the problem, the getActions() method is implemented in Actionable and not in AbstractProject. This is the method that has been called: https://github.com/jenkinsci/jenkins/blob/f7884d3513c6e436baef432a486197a3bb4d846c/core/src/main/java/hudson/model/Actionable.java#L76

          Ulli Hafner added a comment - I don't think that this is the problem, the getActions() method is implemented in Actionable and not in AbstractProject . This is the method that has been called: https://github.com/jenkinsci/jenkins/blob/f7884d3513c6e436baef432a486197a3bb4d846c/core/src/main/java/hudson/model/Actionable.java#L76

          Ulli Hafner added a comment -

          mheinzerling Which JRE are you using to run Jenkins?

          Ulli Hafner added a comment - mheinzerling Which JRE are you using to run Jenkins?

            mrginglymus Bill Collins
            mheinzerling Martin Heinzerling
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: