timja / jenkins-gh-issues-poc-06-18

0 stars 0 forks source link

[JENKINS-23305] NPE in Slave.createLauncher() for Matrix and Pipeline jobs #5200

Closed timja closed 5 years ago

timja commented 10 years ago

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.


Originally reported by trejkaz, imported from: NPE in Slave.createLauncher() for Matrix and Pipeline jobs
  • assignee: oleg_nenashev
  • status: Fixed but Unreleased
  • priority: Major
  • resolution: Duplicate
  • resolved: 2019-01-02T10:13:59+00:00
  • imported: 2022/01/10
timja commented 10 years ago

oleg_nenashev:

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:    }
timja commented 10 years ago

trejkaz:

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.

timja commented 10 years ago

trejkaz:

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;
    }
timja commented 10 years ago

danielbeck:

… and the constructor takes only a boolean.

timja commented 10 years ago

oleg_nenashev:

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

timja commented 10 years ago

danielbeck:

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

timja commented 10 years ago

trejkaz:

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.

timja commented 7 years ago

oleg_nenashev:

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)
timja commented 7 years ago

jglick:

Duplicated by JENKINS-38527 perhaps?

timja commented 5 years ago

oleg_nenashev:

Likely

timja commented 2 years ago

[Duplicates: JENKINS-38527]