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

MavenBuild$ProxyImpl.setResult illegally called after build is COMPLETED

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Major Major
    • maven-plugin
    • Jenkins 1.587

      This one seems to be rather tricky.

      After upgrade to 1.587, I saw this exception during the the run of the sonar plugin in a post step:

      20:19:33 Warte bis Jenkins die Datensammlung abgeschlossen hat
      20:19:33 [ERROR] Internal error: java.lang.IllegalStateException: cannot change build result while in COMPLETED -> [Help 1]
      20:19:33 org.apache.maven.InternalErrorException: Internal error: java.lang.IllegalStateException: cannot change build result while in COMPLETED
      20:19:33 	at org.apache.maven.lifecycle.internal.BuilderCommon.handleBuildError(BuilderCommon.java:128)
      20:19:33 	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:95)
      20:19:33 	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
      20:19:33 	at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
      20:19:33 	at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
      20:19:33 	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
      20:19:33 	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
      20:19:33 	at org.jvnet.hudson.maven3.launcher.Maven3Launcher.main(Maven3Launcher.java:117)
      20:19:33 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      20:19:33 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      20:19:33 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      20:19:33 	at java.lang.reflect.Method.invoke(Method.java:597)
      20:19:33 	at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:329)
      20:19:33 	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239)
      20:19:33 	at org.jvnet.hudson.maven3.agent.Maven3Main.launch(Maven3Main.java:178)
      20:19:33 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      20:19:33 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      20:19:33 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      20:19:33 	at java.lang.reflect.Method.invoke(Method.java:597)
      20:19:33 	at hudson.maven.Maven3Builder.call(Maven3Builder.java:136)
      20:19:33 	at hudson.maven.Maven3Builder.call(Maven3Builder.java:71)
      20:19:33 	at hudson.remoting.UserRequest.perform(UserRequest.java:121)
      20:19:33 	at hudson.remoting.UserRequest.perform(UserRequest.java:49)
      20:19:33 	at hudson.remoting.Request$2.run(Request.java:324)
      20:19:33 	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
      20:19:33 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
      20:19:33 	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
      20:19:33 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
      20:19:33 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
      20:19:33 	at java.lang.Thread.run(Thread.java:662)
      20:19:33 Caused by: java.lang.IllegalStateException: cannot change build result while in COMPLETED
      20:19:33 	at hudson.model.Run.setResult(Run.java:458)
      20:19:33 	at hudson.maven.MavenBuild$ProxyImpl.setResult(MavenBuild.java:494)
      20:19:33 	at hudson.maven.MavenBuild$ProxyImpl2.setResult(MavenBuild.java:547)
      20:19:33 	at sun.reflect.GeneratedMethodAccessor318.invoke(Unknown Source)
      20:19:33 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      20:19:33 	at java.lang.reflect.Method.invoke(Method.java:483)
      20:19:33 	at hudson.model.Executor$1.call(Executor.java:579)
      20:19:33 	at hudson.util.InterceptingProxy$1.invoke(InterceptingProxy.java:23)
      20:19:33 	at com.sun.proxy.$Proxy91.setResult(Unknown Source)
      20:19:33 	at sun.reflect.GeneratedMethodAccessor318.invoke(Unknown Source)
      20:19:33 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      20:19:33 	at java.lang.reflect.Method.invoke(Method.java:483)
      20:19:33 	at hudson.remoting.RemoteInvocationHandler$RPCRequest.perform(RemoteInvocationHandler.java:320)
      20:19:33 	at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:295)
      20:19:33 	at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:254)
      20:19:33 	at hudson.remoting.UserRequest.perform(UserRequest.java:121)
      20:19:33 	at hudson.remoting.UserRequest.perform(UserRequest.java:49)
      20:19:33 	at hudson.remoting.Request$2.run(Request.java:324)
      20:19:33 	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
      20:19:33 	at org.jenkinsci.remoting.CallableDecorator.call(CallableDecorator.java:18)
      20:19:33 	at hudson.remoting.CallableDecoratorList$1.call(CallableDecoratorList.java:21)
      20:19:33 	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
      20:19:33 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      20:19:33 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      20:19:33 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      20:19:33 	at java.lang.Thread.run(Thread.java:745)
      20:19:33 	at ......remote call to channel(Native Method)
      20:19:33 	at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1356)
      20:19:33 	at hudson.remoting.UserResponse.retrieve(UserRequest.java:221)
      20:19:33 	at hudson.remoting.Channel.call(Channel.java:752)
      20:19:33 	at hudson.remoting.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:173)
      20:19:33 	at com.sun.proxy.$Proxy7.setResult(Unknown Source)
      20:19:33 	at hudson.maven.MavenBuildProxy$Filter.setResult(MavenBuildProxy.java:235)
      20:19:33 	at hudson.maven.Maven3Builder$MavenExecutionListener.recordProjectEnded(Maven3Builder.java:554)
      20:19:33 	at hudson.maven.Maven3Builder$MavenExecutionListener.projectSucceeded(Maven3Builder.java:538)
      20:19:33 	at org.apache.maven.lifecycle.internal.DefaultExecutionEventCatapult.fire(DefaultExecutionEventCatapult.java:74)
      20:19:33 	at org.apache.maven.lifecycle.internal.DefaultExecutionEventCatapult.fire(DefaultExecutionEventCatapult.java:42)
      20:19:33 	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:91)
      20:19:33 	... 28 more
      

      A also found mentions of similar behaviour here: https://groups.google.com/forum/#!topic/jenkinsci-users/jrkAQyq6jLs

      Downgrading to 1.583 did work for me.

      Somehow, the State of the run seems to be changed to COMPLETED before the actual build is finished.

      I think the reason for this to show up only now lies here: https://github.com/jenkinsci/jenkins/commit/28dfd90d2d6ae99c57eb174871c46f4e07e303ba#diff-c4f9931d88bca347279b881007d71f0eL445

      Earlier, since asserts are disabled by default, it never presented a problem until this change.

          [JENKINS-25406] MavenBuild$ProxyImpl.setResult illegally called after build is COMPLETED

          Stephan Pauxberger created issue -
          Stephan Pauxberger made changes -
          Priority Original: Minor [ 4 ] New: Critical [ 2 ]

          Daniel Beck added a comment -

          I don't see how core is involved. Sure, it's change caused this in a way, but it appears to be plugins misbehaving.

          Adding maven plugin as it appears to be a project of that type. Unfortunately, the issue report doesn't say.

          Reducing priority. There's a reason we default to Minor, and it's not so everything is made Critical or Blocker.

          Could you explain how this issue can be reproduced, preferably when building sample code or an open source project? Faulty configuration? Only happens when using Sonar Plugin + Violations Plugin? Both? Either? Which versions of these plugins?

          Daniel Beck added a comment - I don't see how core is involved. Sure, it's change caused this in a way, but it appears to be plugins misbehaving. Adding maven plugin as it appears to be a project of that type. Unfortunately, the issue report doesn't say. Reducing priority. There's a reason we default to Minor, and it's not so everything is made Critical or Blocker. Could you explain how this issue can be reproduced, preferably when building sample code or an open source project? Faulty configuration? Only happens when using Sonar Plugin + Violations Plugin? Both? Either? Which versions of these plugins?
          Daniel Beck made changes -
          Component/s New: maven-plugin [ 16033 ]
          Component/s Original: core [ 15593 ]
          Priority Original: Critical [ 2 ] New: Major [ 3 ]

          Robert Hook added a comment -

          I've experienced the same problem - I upgraded from 1.583 to 1.590, and updated all plugins, and now all of my maven based builds are failing in this fashion. I am invoking sonar via maven

          install findbugs:check checkstyle:checkstyle javadoc:javadoc sonar:sonar
          

          note that I am not using the sonar jenkins plugin, this is coming from Maven.

          I can definitely confirm that all jobs were not failing with this prior to updating to 1.590

          Robert Hook added a comment - I've experienced the same problem - I upgraded from 1.583 to 1.590, and updated all plugins, and now all of my maven based builds are failing in this fashion. I am invoking sonar via maven install findbugs:check checkstyle:checkstyle javadoc:javadoc sonar:sonar note that I am not using the sonar jenkins plugin, this is coming from Maven. I can definitely confirm that all jobs were not failing with this prior to updating to 1.590

          Jesse Glick added a comment -

          Seems like a bug in the Maven plugin. Not sure why it was trying to set the result of a completed build. If it really needs to do so for some special reason, it should use the protected Result result field by special permission of the MavenBuild.

          Jesse Glick added a comment - Seems like a bug in the Maven plugin. Not sure why it was trying to set the result of a completed build. If it really needs to do so for some special reason, it should use the protected Result result field by special permission of the MavenBuild .
          Jesse Glick made changes -
          Component/s Original: violations-plugin [ 15497 ]
          Component/s Original: sonar [ 15523 ]
          Assignee Original: Sonar Team [ sonarteam ]
          Jesse Glick made changes -
          Summary Original: Some post step build result in IllegalStateException New: MavenBuild$ProxyImpl.setResult illegally called after build is COMPLETED

          Jesse Glick added a comment -

          Note that functional tests will run with assertions enabled, so it seems likely that this bug is only triggered under some condition that is not covered by the existing tests.

          Jesse Glick added a comment - Note that functional tests will run with assertions enabled, so it seems likely that this bug is only triggered under some condition that is not covered by the existing tests.

          Code changed in jenkins
          User: Mirko Friedenhagen
          Path:
          src/main/java/hudson/plugins/violations/ViolationsReport.java
          http://jenkins-ci.org/commit/violations-plugin/677dc8981b161f11368db8aebe4d94473ae6f757
          Log:
          Use reflection to access protected field result from the build, see JENKINS-25406 as well.

          As of https://github.com/jenkinsci/jenkins/commit/28dfd90d2d6ae99c57eb174871c46f4e07e303ba#diff-c4f9931d88bca347279b881007d71f0eL445
          the field may not be set anymore directly when the build already was completed.
          TODO: the summary still thinks the build was a SUCCESS.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Mirko Friedenhagen Path: src/main/java/hudson/plugins/violations/ViolationsReport.java http://jenkins-ci.org/commit/violations-plugin/677dc8981b161f11368db8aebe4d94473ae6f757 Log: Use reflection to access protected field result from the build, see JENKINS-25406 as well. As of https://github.com/jenkinsci/jenkins/commit/28dfd90d2d6ae99c57eb174871c46f4e07e303ba#diff-c4f9931d88bca347279b881007d71f0eL445 the field may not be set anymore directly when the build already was completed. TODO: the summary still thinks the build was a SUCCESS.

            Unassigned Unassigned
            paux Stephan Pauxberger
            Votes:
            17 Vote for this issue
            Watchers:
            27 Start watching this issue

              Created:
              Updated: