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

Pipelines failing when no Cause of Blockage found

    XMLWordPrintable

Details

    • Blue Ocean 1.4 - beta 5

    Description

      Hi,

      We have a number of Blue Ocean Pipelines that hang intermittently. Usually they work after a restart with no change. We have discovered a familiar NPE and Stack trace on the Jenkins master that corresponds with this hang condition. See the Stack trace below.

      It appears that PipeLineNodeUtils.getCauseOfBlockage makes a call to Queue.Item.getCauseOfBlockage(). As below.

      Queue.Item item = QueueItemAction.getQueueItem(nodeBlock);
      if (item != null) {
         String cause = item.getCauseOfBlockage().getShortDescription();
      

       If Queue.Item.getCauseOfBlockage() returns an object then all is well. However this method does not always return a valid object and may return a null.

       

      The obvious fix is to null protect the call to getShortDescription(). I will create a PR with a version of this fix for approval. 

      PipeLineNodeUtils does not appear to have its own unit tests so I've been unable to create a specific test case that forces the error. The PR would benefit with a test case. Unless you are happy with a fix that just resolved an obvious null protection added.

      java.lang.reflect.InvocationTargetException
      
      at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:347)
      
      at org.kohsuke.stapler.MetaClass$3.doDispatch(MetaClass.java:209)
      
      at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$3.doDispatch(MetaClass.java:209)
      
      at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$3.doDispatch(MetaClass.java:209)
      
      at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$3.doDispatch(MetaClass.java:209)
      
      at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$3.doDispatch(MetaClass.java:209)
      
      at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:686)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      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:790)
      
      at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:841)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1650)
      
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:135)
      
      at org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:225)
      
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132)
      
      at io.jenkins.blueocean.ResourceCacheControl.doFilter(ResourceCacheControl.java:134)
      
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132)
      
      at io.jenkins.blueocean.auth.jwt.impl.JwtAuthenticationFilter.doFilter(JwtAuthenticationFilter.java:51)
      
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132)
      
      at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:138)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      
      at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:49)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      
      at org.jenkinsci.plugins.reverse_proxy_auth.ReverseProxySecurityRealm$1.doFilter(ReverseProxySecurityRealm.java:514)
      
      at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      
      at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      
      at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      
      at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      
      at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
      
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
      
      at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
      
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
      
      at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190)
      
      at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
      
      at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
      
      at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
      
      at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
      
      at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
      
      at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
      
      at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
      
      at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
      
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
      
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
      
      at org.eclipse.jetty.server.Server.handle(Server.java:564)
      
      at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317)
      
      at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
      
      at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
      
      at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
      
      at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
      
      at org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128)
      
      at org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222)
      
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294)
      
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199)
      
      at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
      
      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)
      
      Caused by: java.lang.NullPointerException
      
      at io.jenkins.blueocean.rest.impl.pipeline.PipelineNodeUtil.getCauseOfBlockage(PipelineNodeUtil.java:154)
      
      at io.jenkins.blueocean.rest.impl.pipeline.PipelineNodeGraphVisitor.handleChunkDone(PipelineNodeGraphVisitor.java:209)
      
      at org.jenkinsci.plugins.workflow.graphanalysis.StandardChunkVisitor.chunkStart(StandardChunkVisitor.java:40)
      
      at io.jenkins.blueocean.rest.impl.pipeline.PipelineNodeGraphVisitor.chunkStart(PipelineNodeGraphVisitor.java:95)
      
      at org.jenkinsci.plugins.workflow.graphanalysis.ForkScanner.fireVisitChunkCallbacks(ForkScanner.java:742)
      
      at org.jenkinsci.plugins.workflow.graphanalysis.ForkScanner.visitSimpleChunks(ForkScanner.java:769)
      
      at org.jenkinsci.plugins.workflow.graphanalysis.ForkScanner.visitSimpleChunks(ForkScanner.java:633)
      
      at io.jenkins.blueocean.rest.impl.pipeline.PipelineNodeGraphVisitor.<init>(PipelineNodeGraphVisitor.java:89)
      
      at io.jenkins.blueocean.rest.impl.pipeline.NodeGraphBuilder$NodeGraphBuilderFactory.getInstance(NodeGraphBuilder.java:39)
      
      at io.jenkins.blueocean.rest.impl.pipeline.PipelineNodeContainerImpl.<init>(PipelineNodeContainerImpl.java:32)
      
      at io.jenkins.blueocean.rest.impl.pipeline.PipelineRunImpl.getNodes(PipelineRunImpl.java:187)
      
      at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
      
      at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:343)
      
      ... 100 more
      

      Attachments

        Activity

          People

            imeredith Ivan Meredith
            fdearle Fergal Dearle
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: