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

WorkflowJob.getSCMs throws NullPointerException from notifyCommit hooks after Jenkins Restart

    • Icon: Bug Bug
    • Resolution: Cannot Reproduce
    • Icon: Critical Critical
    • pipeline
    • Jenkins 1.598
      Workflow Plugins 1.2

      Steps to Reproduce:
      1) Create a new workflow job that pulls from git and is set to poll scm infrequently (as appropriate for using scm hooks).
      2) Run the job once manually.
      3) Trigger an scm poll by invoking jenkins-url/git/notifyCommit with appropriate query string.

      Result: Status 200 & Body of response states that polling of the test job was scheduled.

      4) Restart Jenkins (sudo service jenkins restart or similar)
      5) After Jenkins returns to normal running status repeat step 3.

      Result: Status 500 and the stack trace appended to the end of this report.

      6) Run the job again manually (step 2).
      7) Repeat Step 3.

      Result: Status 200 & Body of response states that polling of the test job was scheduled.

      In summary, scm triggers fail post-jenkins restart for workflow jobs until each such job is run once. I did not thuroughly test with multiple jobs but I believe it is the case that every workflow job must be run manually before any job (even non-workflow) can be triggered.

      Stack trace
      
      javax.servlet.ServletException: java.lang.NullPointerException
          at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:796)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
          at org.kohsuke.stapler.MetaClass$12.dispatch(MetaClass.java:391)
          at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
          at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
          at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494)
          at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:123)
          at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:114)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
          at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:135)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
          at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
          at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474)
          at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
          at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
          at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
          at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
          at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
          at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
          at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
          at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
          at org.eclipse.jetty.server.Server.handle(Server.java:370)
          at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
          at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949)
          at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011)
          at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
          at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
          at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
          at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
          at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
          at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
          at java.lang.Thread.run(Thread.java:745)
      Caused by: java.lang.NullPointerException
          at org.jenkinsci.plugins.workflow.job.WorkflowJob.getSCMs(WorkflowJob.java:419)
          at hudson.plugins.git.GitStatus$JenkinsAbstractProjectListener.onNotifyCommit(GitStatus.java:207)
          at hudson.plugins.git.GitStatus.doNotifyCommit(GitStatus.java:80)
          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:483)
          at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:298)
          at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:161)
          at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:96)
          at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:121)
          at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
          at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
          ... 62 more
      

      Page generated: Feb 3, 2015 6:47:45 PMREST APIJenkins ver. 1.598

          [JENKINS-26761] WorkflowJob.getSCMs throws NullPointerException from notifyCommit hooks after Jenkins Restart

          Code changed in jenkins
          User: Jesse Glick
          Path:
          aggregator/src/test/java/org/jenkinsci/plugins/workflow/steps/scm/GitStepRestartTest.java
          job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowJob.java
          job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowRun.java
          http://jenkins-ci.org/commit/workflow-plugin/11b2bb5d98ce023864ce9e09c957a0eb5b140721
          Log:
          JENKINS-26761 Merging #160.

          (cherry picked from commit f6f21ae0f0bf0d7970b3ae2372b1501717938ec4)

          Conflicts:
          CHANGES.md
          aggregator/src/test/java/org/jenkinsci/plugins/workflow/steps/scm/GitStepRestartTest.java
          job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowRun.java

          Compare: https://github.com/jenkinsci/workflow-plugin/compare/22c0ce651ef5^...11b2bb5d98ce

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: aggregator/src/test/java/org/jenkinsci/plugins/workflow/steps/scm/GitStepRestartTest.java job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowJob.java job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowRun.java http://jenkins-ci.org/commit/workflow-plugin/11b2bb5d98ce023864ce9e09c957a0eb5b140721 Log: JENKINS-26761 Merging #160. (cherry picked from commit f6f21ae0f0bf0d7970b3ae2372b1501717938ec4) Conflicts: CHANGES.md aggregator/src/test/java/org/jenkinsci/plugins/workflow/steps/scm/GitStepRestartTest.java job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowRun.java Compare: https://github.com/jenkinsci/workflow-plugin/compare/22c0ce651ef5 ^...11b2bb5d98ce

          Code changed in jenkins
          User: Jesse Glick
          Path:
          CHANGES.md
          http://jenkins-ci.org/commit/workflow-plugin/fe932961dc7bae5f3aad2930fdf61642ef317ec5
          Log:
          JENKINS-26761 Noting backport to 1.4.1.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: CHANGES.md http://jenkins-ci.org/commit/workflow-plugin/fe932961dc7bae5f3aad2930fdf61642ef317ec5 Log: JENKINS-26761 Noting backport to 1.4.1.

          Andrew Bayer added a comment -

          Should this still be open?

          Andrew Bayer added a comment - Should this still be open?

          Jesse Glick added a comment -

          Yes, because the underlying problem was never resolved. The NPE is gone, but there is still something seriously wrong during deserialization of which the NPE was just a symptom.

          Jesse Glick added a comment - Yes, because the underlying problem was never resolved. The NPE is gone, but there is still something seriously wrong during deserialization of which the NPE was just a symptom.

          Kenneth Baltrinic added a comment - - edited

          For what its worth we just got bit by this again on a machine w/an older version for workflow. As we now have Cloudbees support I opened an internal ticket (ironically failing to recognize the problem as being this one ), and that ticket has an attached support bundle in case it helps run down the problem. See Cloudbees ZenDesk ticket #32944.

          Kenneth Baltrinic added a comment - - edited For what its worth we just got bit by this again on a machine w/an older version for workflow. As we now have Cloudbees support I opened an internal ticket (ironically failing to recognize the problem as being this one ), and that ticket has an attached support bundle in case it helps run down the problem. See Cloudbees ZenDesk ticket #32944.

          Jesse Glick added a comment -

          I suspect this is actually just one of many symptoms of JENKINS-22767. If so, it should quietly disappear in 1.646+.

          Jesse Glick added a comment - I suspect this is actually just one of many symptoms of JENKINS-22767 . If so, it should quietly disappear in 1.646+.

          Jesse Glick added a comment -

          Closing therefore.

          Jesse Glick added a comment - Closing therefore.

          Code changed in jenkins
          User: Jesse Glick
          Path:
          aggregator/src/test/java/org/jenkinsci/plugins/workflow/steps/scm/GitStepRestartTest.java
          http://jenkins-ci.org/commit/workflow-scm-step-plugin/9c10531b3956312f7463a7d66ce45ad2b3f5c3fd
          Log:
          JENKINS-26761 Verifying that polling still works after a restart.
          Originally-Committed-As: 646b3d58647012025e1f94081a7ce5be7ded65b3

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: aggregator/src/test/java/org/jenkinsci/plugins/workflow/steps/scm/GitStepRestartTest.java http://jenkins-ci.org/commit/workflow-scm-step-plugin/9c10531b3956312f7463a7d66ce45ad2b3f5c3fd Log: JENKINS-26761 Verifying that polling still works after a restart. Originally-Committed-As: 646b3d58647012025e1f94081a7ce5be7ded65b3

          Code changed in jenkins
          User: Jesse Glick
          Path:
          job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowJob.java
          job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowRun.java
          http://jenkins-ci.org/commit/workflow-job-plugin/34802c5bfbccdf481794dce9409deeb2dfcfa9b1
          Log:
          JENKINS-26761 Recover gracefully from null WorkflowRun.checkouts, printing some diagnostics.
          Originally-Committed-As: 7d21f2d187a9f8973df403b47b5efd66e6b00bd2

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowJob.java job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowRun.java http://jenkins-ci.org/commit/workflow-job-plugin/34802c5bfbccdf481794dce9409deeb2dfcfa9b1 Log: JENKINS-26761 Recover gracefully from null WorkflowRun.checkouts, printing some diagnostics. Originally-Committed-As: 7d21f2d187a9f8973df403b47b5efd66e6b00bd2

          Code changed in jenkins
          User: Jesse Glick
          Path:
          job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowRun.java
          http://jenkins-ci.org/commit/workflow-job-plugin/c1eb2e285c8264bf05dfc9b64ba1750c339818fe
          Log:
          JENKINS-26761 Try using a PersistedList rather than a LinkedList for new WorkflowRun.checkouts.
          (Existing build records will continue to use LinkedList.) Possible advantages:
          · If the bug was caused by an unreported failure to serialize/deserialize an SCM instance,
          this would create a polite “old data” record instead.
          (CopyOnWriteArrayList would also work, via RobustCollectionConverter.)
          · The backing store is CopyOnWriteList, solving a hypothetical ConcurrentModificationException.
          · Additions from onCheckout should be saved to disk immediately, rather than waiting for some other save trigger.
          Originally-Committed-As: ad9b6caf0428b9c85601ef9d349ca2691b7055be

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowRun.java http://jenkins-ci.org/commit/workflow-job-plugin/c1eb2e285c8264bf05dfc9b64ba1750c339818fe Log: JENKINS-26761 Try using a PersistedList rather than a LinkedList for new WorkflowRun.checkouts. (Existing build records will continue to use LinkedList.) Possible advantages: · If the bug was caused by an unreported failure to serialize/deserialize an SCM instance, this would create a polite “old data” record instead. (CopyOnWriteArrayList would also work, via RobustCollectionConverter.) · The backing store is CopyOnWriteList, solving a hypothetical ConcurrentModificationException. · Additions from onCheckout should be saved to disk immediately, rather than waiting for some other save trigger. Originally-Committed-As: ad9b6caf0428b9c85601ef9d349ca2691b7055be

            jglick Jesse Glick
            kbaltrinic Kenneth Baltrinic
            Votes:
            5 Vote for this issue
            Watchers:
            9 Start watching this issue

              Created:
              Updated:
              Resolved: