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

NPE in Slave.createLauncher() for Matrix and Pipeline jobs

    XMLWordPrintable

Details

    • Bug
    • Status: Fixed but Unreleased (View Workflow)
    • Major
    • Resolution: Duplicate
    • core
    • Jenkins ver. 1.566m Java 7u25, Windows Server 2008 master, Debian & Ubuntu slaves
    • Jenkins 2.60.3

    Description

      Jenkins failed some test on 2 configurations out of a 5-configuration matrix build, with the other 3 builds completing normally. Both failed slaves leave no additional information for diagnosing the root cause:

      13:49:24 Started by upstream project "fast-tests" build number 920
      13:49:24 originally caused by:
      13:49:24  Started by user User
      13:49:24 FATAL: null
      13:49:24 java.lang.NullPointerException
      13:49:24 	at hudson.model.Slave.createLauncher(Slave.java:359)
      13:49:24 	at hudson.model.AbstractBuild$AbstractBuildExecution.createLauncher(AbstractBuild.java:559)
      13:49:24 	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:476)
      13:49:24 	at hudson.model.Run.execute(Run.java:1710)
      13:49:24 	at hudson.matrix.MatrixRun.run(MatrixRun.java:146)
      13:49:24 	at hudson.model.ResourceController.execute(ResourceController.java:88)
      13:49:24 	at hudson.model.Executor.run(Executor.java:231)
      

      JENKINS-21999 seemed to be a similar issue but the line numbers have changed and that issue was fixed, whereas this issue still occurs.

      Attachments

        Issue Links

          Activity

            trejkaz trejkaz created issue -
            oleg_nenashev Oleg Nenashev added a comment -

            Are you sure that you use 1.566?
            I don't see any NPE chance in https://github.com/jenkinsci/jenkins/blob/jenkins-1.566/core/src/main/java/hudson/model/Slave.java

             
            353:   public Launcher createLauncher(TaskListener listener) {
            354:        SlaveComputer c = getComputer();
            355:        if (c == null) {
            356:            listener.error("Issue with creating launcher for slave " + name + ".");
            357:            return new Launcher.DummyLauncher(listener);
            358:        } else {
            359:            return new RemoteLauncher(listener, c.getChannel(), c.isUnix()).decorateFor(this);
            360:        }
            361:    }
            
            oleg_nenashev Oleg Nenashev added a comment - Are you sure that you use 1.566? I don't see any NPE chance in https://github.com/jenkinsci/jenkins/blob/jenkins-1.566/core/src/main/java/hudson/model/Slave.java 353: public Launcher createLauncher(TaskListener listener) { 354: SlaveComputer c = getComputer(); 355: if (c == null) { 356: listener.error("Issue with creating launcher for slave " + name + "."); 357: return new Launcher.DummyLauncher(listener); 358: } else { 359: return new RemoteLauncher(listener, c.getChannel(), c.isUnix()).decorateFor(this); 360: } 361: }
            trejkaz trejkaz added a comment - - edited

            Definitely using 1.566 (assuming the version shown at the bottom of the page is accurate!), but I agree, if that's the code running in 1.566, I don't see where there can be an NPE, unless there is some unboxing going on which is not evident by seeing just that fragment.

            trejkaz trejkaz added a comment - - edited Definitely using 1.566 (assuming the version shown at the bottom of the page is accurate!), but I agree, if that's the code running in 1.566, I don't see where there can be an NPE, unless there is some unboxing going on which is not evident by seeing just that fragment.
            trejkaz trejkaz added a comment -

            Well hey, how about that.

                /**
                 * True if this computer is a Unix machine (as opposed to Windows machine).
                 *
                 * @return
                 *      null if the computer is disconnected and therefore we don't know whether it is Unix or not.
                 */
                public Boolean isUnix() {
                    return isUnix;
                }
            
            trejkaz trejkaz added a comment - Well hey, how about that. /** * True if this computer is a Unix machine (as opposed to Windows machine). * * @ return * null if the computer is disconnected and therefore we don't know whether it is Unix or not. */ public Boolean isUnix() { return isUnix; }
            danielbeck Daniel Beck added a comment -

            … and the constructor takes only a boolean.

            danielbeck Daniel Beck added a comment - … and the constructor takes only a boolean .
            oleg_nenashev Oleg Nenashev added a comment -

            Sorry, I've missed the previous message...
            trejkaz is right. The implicit unboxing of null Boolean values throws NPE according to Java specs.

            oleg_nenashev Oleg Nenashev added a comment - Sorry, I've missed the previous message... trejkaz is right. The implicit unboxing of null Boolean values throws NPE according to Java specs.
            oleg_nenashev Oleg Nenashev made changes -
            Field Original Value New Value
            Assignee Oleg Nenashev [ oleg_nenashev ]
            oleg_nenashev Oleg Nenashev made changes -
            Status Open [ 1 ] In Progress [ 3 ]
            danielbeck Daniel Beck added a comment -

            It's weird how a job can be scheduled for a node before it could be determined whether it's Unix.

            danielbeck Daniel Beck added a comment - It's weird how a job can be scheduled for a node before it could be determined whether it's Unix.
            trejkaz trejkaz added a comment - - edited

            My guess would be that despite isUnix being set in a synchronized{} block, isUnix() is not synchronised, so a second thread getting the value might be getting an out of date value.

            trejkaz trejkaz added a comment - - edited My guess would be that despite isUnix being set in a synchronized{} block, isUnix() is not synchronised, so a second thread getting the value might be getting an out of date value.
            rtyler R. Tyler Croy made changes -
            Workflow JNJira [ 155870 ] JNJira + In-Review [ 185513 ]
            oleg_nenashev Oleg Nenashev made changes -
            Status In Progress [ 3 ] Open [ 1 ]
            oleg_nenashev Oleg Nenashev added a comment -

            Another stacktrace for Jenkins Pipeline:

            java.lang.NullPointerException 
            at hudson.model.Slave.createLauncher(Slave.java:417) 
            at org.jenkinsci.plugins.workflow.support.DefaultStepContext.makeLauncher(DefaultStepContext.java:112) 
            at org.jenkinsci.plugins.workflow.support.DefaultStepContext.get(DefaultStepContext.java:68) 
            at org.jenkinsci.plugins.workflow.steps.StepDescriptor.checkContextAvailability(StepDescriptor.java:251) 
            at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:179) 
            at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:126) 
            at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108) 
            at groovy.lang.GroovyObject$invokeMethod.call(Unknown Source)
            
            oleg_nenashev Oleg Nenashev added a comment - Another stacktrace for Jenkins Pipeline: java.lang.NullPointerException at hudson.model.Slave.createLauncher(Slave.java:417) at org.jenkinsci.plugins.workflow.support.DefaultStepContext.makeLauncher(DefaultStepContext.java:112) at org.jenkinsci.plugins.workflow.support.DefaultStepContext.get(DefaultStepContext.java:68) at org.jenkinsci.plugins.workflow.steps.StepDescriptor.checkContextAvailability(StepDescriptor.java:251) at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:179) at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:126) at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108) at groovy.lang.GroovyObject$invokeMethod.call(Unknown Source)
            oleg_nenashev Oleg Nenashev made changes -
            Labels pipeline
            oleg_nenashev Oleg Nenashev made changes -
            Summary NPE on running some slaves of a matrix build - failure with no explanation NPE in Slave.createLauncher() for Matrix and Pipeline jobs
            jglick Jesse Glick added a comment -

            Duplicated by JENKINS-38527 perhaps?

            jglick Jesse Glick added a comment - Duplicated by  JENKINS-38527 perhaps?
            jglick Jesse Glick made changes -
            Link This issue relates to JENKINS-38527 [ JENKINS-38527 ]
            jamesdumay James Dumay made changes -
            Remote Link This issue links to "CloudBees Internal OSS-2173 (Web Link)" [ 18399 ]
            jglick Jesse Glick made changes -
            Link This issue relates to JENKINS-46067 [ JENKINS-46067 ]
            oleg_nenashev Oleg Nenashev added a comment -

            Likely

            oleg_nenashev Oleg Nenashev added a comment - Likely
            oleg_nenashev Oleg Nenashev made changes -
            Link This issue duplicates JENKINS-38527 [ JENKINS-38527 ]
            oleg_nenashev Oleg Nenashev made changes -
            Released As Jenkins 2.60.3
            Resolution Duplicate [ 3 ]
            Status Open [ 1 ] Fixed but Unreleased [ 10203 ]

            People

              oleg_nenashev Oleg Nenashev
              trejkaz trejkaz
              Votes:
              2 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: