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

NullPointerException on startup after update from 2.5 to 2.6

    XMLWordPrintable

Details

    Description

      After updating to 2.6 from 2.5 I'm getting the following NPE directly at startup:

      hudson.util.HudsonFailedToLoad: java.lang.NullPointerException
      	at hudson.WebAppMain$3.run(WebAppMain.java:244)
      Caused by: java.lang.NullPointerException
      	at jenkins.install.InstallState.equals(InstallState.java:179)
      	at jenkins.install.InstallUtil.proceedToNextStateFrom(InstallUtil.java:97)
      	at jenkins.model.Jenkins.<init>(Jenkins.java:888)
      	at hudson.model.Hudson.<init>(Hudson.java:85)
      	at hudson.model.Hudson.<init>(Hudson.java:81)
      	at hudson.WebAppMain$3.run(WebAppMain.java:227)
      

      The stacktrace didn't suggest a particular plugin so I chose 'core' as component. Please correct if necessary.

      jenkins.err.log

      Mai 30, 2016 7:23:10 AM org.eclipse.jetty.util.log.JavaUtilLog info
      INFO: Logging initialized @470ms
      Mai 30, 2016 7:23:10 AM winstone.Logger logInternal
      INFO: Beginning extraction from war file
      Mai 30, 2016 7:23:14 AM org.eclipse.jetty.util.log.JavaUtilLog warn
      WARNING: Empty contextPath
      Mai 30, 2016 7:23:14 AM org.eclipse.jetty.util.log.JavaUtilLog info
      INFO: jetty-9.2.z-SNAPSHOT
      Mai 30, 2016 7:23:15 AM org.eclipse.jetty.util.log.JavaUtilLog info
      INFO: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
      Mai 30, 2016 7:23:15 AM org.eclipse.jetty.util.log.JavaUtilLog info
      INFO: Started w.@1e3c1c7{/,file:/C:/Program%20Files%20(x86)/Jenkins/war/,AVAILABLE}{C:\Program Files (x86)\Jenkins\war}
      Mai 30, 2016 7:23:15 AM org.eclipse.jetty.util.log.JavaUtilLog info
      INFO: Started ServerConnector@19b0f9d{HTTP/1.1}{0.0.0.0:8080}
      Mai 30, 2016 7:23:15 AM org.eclipse.jetty.util.log.JavaUtilLog info
      INFO: Started @5203ms
      Mai 30, 2016 7:23:15 AM winstone.Logger logInternal
      INFO: Winstone Servlet Engine v2.0 running: controlPort=disabled
      Mai 30, 2016 7:23:16 AM jenkins.InitReactorRunner$1 onAttained
      INFO: Started initialization
      Mai 30, 2016 7:23:16 AM jenkins.InitReactorRunner$1 onAttained
      INFO: Listed all plugins
      Mai 30, 2016 7:23:18 AM jenkins.InitReactorRunner$1 onAttained
      INFO: Prepared all plugins
      Mai 30, 2016 7:23:18 AM hudson.ExtensionFinder$GuiceFinder$FaultTolerantScope$1 error
      INFO: Failed to instantiate optional component org.jenkinsci.plugins.workflow.steps.scm.SubversionStep$DescriptorImpl; skipping
      Mai 30, 2016 7:23:19 AM jenkins.InitReactorRunner$1 onAttained
      INFO: Started all plugins
      Mai 30, 2016 7:23:19 AM jenkins.InitReactorRunner$1 onAttained
      INFO: Augmented all extensions
      Mai 30, 2016 7:23:19 AM jenkins.InitReactorRunner$1 onAttained
      INFO: Loaded all jobs
      Mai 30, 2016 7:23:19 AM hudson.model.AsyncPeriodicWork$1 run
      INFO: Started Download metadata
      Mai 30, 2016 7:23:19 AM hudson.model.AsyncPeriodicWork$1 run
      INFO: Finished Download metadata. 8 ms
      Mai 30, 2016 7:23:19 AM org.jenkinsci.main.modules.sshd.SSHD start
      INFO: Started SSHD at port 65097
      Mai 30, 2016 7:23:19 AM jenkins.InitReactorRunner$1 onAttained
      INFO: Completed initialization
      Mai 30, 2016 7:23:19 AM hudson.util.BootFailure publish
      SEVERE: Failed to initialize Jenkins
      hudson.util.HudsonFailedToLoad: java.lang.NullPointerException
      	at hudson.WebAppMain$3.run(WebAppMain.java:244)
      Caused by: java.lang.NullPointerException
      	at jenkins.install.InstallState.equals(InstallState.java:179)
      	at jenkins.install.InstallUtil.proceedToNextStateFrom(InstallUtil.java:97)
      	at jenkins.model.Jenkins.<init>(Jenkins.java:888)
      	at hudson.model.Hudson.<init>(Hudson.java:85)
      	at hudson.model.Hudson.<init>(Hudson.java:81)
      	at hudson.WebAppMain$3.run(WebAppMain.java:227)
      

      Attachments

        Issue Links

          Activity

            axelbehrens Axel Behrens created issue -
            axelbehrens Axel Behrens made changes -
            Field Original Value New Value
            Summary NullPointerException on startup after update to 2.6 NullPointerException on startup after update from 2.5 to 2.6
            oleg_nenashev Oleg Nenashev made changes -
            Assignee Keith Zantow [ kzantow ]
            oleg_nenashev Oleg Nenashev added a comment - - edited

            It was caused by changes in the Update Wizard made by kzantow.
            Does this issue block the startup?

            oleg_nenashev Oleg Nenashev added a comment - - edited It was caused by changes in the Update Wizard made by kzantow . Does this issue block the startup?
            axelbehrens Axel Behrens added a comment -

            Yes, the NPE stacktrace is the only thing shown in the web UI.

            axelbehrens Axel Behrens added a comment - Yes, the NPE stacktrace is the only thing shown in the web UI.
            danielbeck Daniel Beck made changes -
            Priority Minor [ 4 ] Blocker [ 1 ]
            danielbeck Daniel Beck added a comment -

            axelbehrens Do you remember what you did in 2.5? Did you run the upgrade wizard (installation of Pipeline plugins)? Did you dismiss it, or ignore the banner?

            danielbeck Daniel Beck added a comment - axelbehrens Do you remember what you did in 2.5? Did you run the upgrade wizard (installation of Pipeline plugins)? Did you dismiss it, or ignore the banner?
            oleg_nenashev Oleg Nenashev made changes -
            Assignee Keith Zantow [ kzantow ] Oleg Nenashev [ oleg_nenashev ]
            oleg_nenashev Oleg Nenashev made changes -
            Status Open [ 1 ] In Progress [ 3 ]
            kzantow Keith Zantow made changes -
            Assignee Oleg Nenashev [ oleg_nenashev ] Keith Zantow [ kzantow ]
            kzantow Keith Zantow made changes -
            Remote Link This issue links to "PR 2385 (Web Link)" [ 14352 ]
            recena Manuel Recena Soto made changes -
            Remote Link This issue links to "PR (Web Link)" [ 14353 ]
            recena Manuel Recena Soto made changes -
            Remote Link This issue links to "PR (Web Link)" [ 14353 ]
            kzantow Keith Zantow added a comment -

            axelbehrens could you provide any additional information how you were able to get your Jenkins instance into this state? I was not able to reproduce it installing 2.5 and upgrading to 2.6. In any case, I've prepared a patch, which should fix this against the 2.6 codebase here.

            kzantow Keith Zantow added a comment - axelbehrens could you provide any additional information how you were able to get your Jenkins instance into this state? I was not able to reproduce it installing 2.5 and upgrading to 2.6. In any case, I've prepared a patch, which should fix this against the 2.6 codebase here .
            axelbehrens Axel Behrens added a comment -

            kzantow, this is only a test instance running on my laptop (Windows 7 x64). I've installed v2.0 from scratch, added a handful of plugins and created some jobs. I automatically updated pretty much to every new release until 2.6.

            This is my config.xml if that helps:

            <?xml version='1.0' encoding='UTF-8'?>
            <hudson>
              <disabledAdministrativeMonitors>
                <string>jenkins.diagnostics.SecurityIsOffMonitor</string>
              </disabledAdministrativeMonitors>
              <version>1.0</version>
              <installState>RESTART</installState>
              <numExecutors>2</numExecutors>
              <mode>NORMAL</mode>
              <useSecurity>true</useSecurity>
              <authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
              <securityRealm class="hudson.security.SecurityRealm$None"/>
              <disableRememberMe>false</disableRememberMe>
              <projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/>
              <workspaceDir>${ITEM_ROOTDIR}/workspace</workspaceDir>
              <buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
              <jdks/>
              <viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
              <myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/>
              <clouds/>
              <scmCheckoutRetryCount>0</scmCheckoutRetryCount>
              <views>
                <hudson.model.AllView>
                  <owner class="hudson" reference="../../.."/>
                  <name>All</name>
                  <filterExecutors>false</filterExecutors>
                  <filterQueue>false</filterQueue>
                  <properties class="hudson.model.View$PropertyList"/>
                </hudson.model.AllView>
              </views>
              <primaryView>All</primaryView>
              <slaveAgentPort>0</slaveAgentPort>
              <label></label>
              <nodeProperties/>
              <globalNodeProperties/>
            </hudson>
            

            Cheers

            axelbehrens Axel Behrens added a comment - kzantow , this is only a test instance running on my laptop (Windows 7 x64). I've installed v2.0 from scratch, added a handful of plugins and created some jobs. I automatically updated pretty much to every new release until 2.6. This is my config.xml if that helps: <?xml version='1.0' encoding='UTF-8'?> <hudson> <disabledAdministrativeMonitors> <string>jenkins.diagnostics.SecurityIsOffMonitor</string> </disabledAdministrativeMonitors> <version>1.0</version> <installState>RESTART</installState> <numExecutors>2</numExecutors> <mode>NORMAL</mode> <useSecurity>true</useSecurity> <authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/> <securityRealm class="hudson.security.SecurityRealm$None"/> <disableRememberMe>false</disableRememberMe> <projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/> <workspaceDir>${ITEM_ROOTDIR}/workspace</workspaceDir> <buildsDir>${ITEM_ROOTDIR}/builds</buildsDir> <jdks/> <viewsTabBar class="hudson.views.DefaultViewsTabBar"/> <myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/> <clouds/> <scmCheckoutRetryCount>0</scmCheckoutRetryCount> <views> <hudson.model.AllView> <owner class="hudson" reference="../../.."/> <name>All</name> <filterExecutors>false</filterExecutors> <filterQueue>false</filterQueue> <properties class="hudson.model.View$PropertyList"/> </hudson.model.AllView> </views> <primaryView>All</primaryView> <slaveAgentPort>0</slaveAgentPort> <label></label> <nodeProperties/> <globalNodeProperties/> </hudson> Cheers
            oleg_nenashev Oleg Nenashev added a comment -

            Copy-paste from Keith's PR: "IMHO the only realistic case of getting such state is a corrupted config file with the legacy non-transient installState due to the whatever reason (e.g. upgrade from the previous version). I would vote for handling it in InstallState#readResolve() or in Jenkins#readResolve()"

            Working on this alternate solution

            oleg_nenashev Oleg Nenashev added a comment - Copy-paste from Keith's PR: "IMHO the only realistic case of getting such state is a corrupted config file with the legacy non-transient installState due to the whatever reason (e.g. upgrade from the previous version). I would vote for handling it in InstallState#readResolve() or in Jenkins#readResolve()" Working on this alternate solution
            kzantow Keith Zantow added a comment -

            oleg_nenashev yeah, this <installState>RESTART</installState> is the culprit, it looks like. A shame XStream doesn't realize the field is now transient and skip it. I still think that this could potentially be set from other sources (e.g. Groovy startup scripts), which makes my solution more general purpose.

            kzantow Keith Zantow added a comment - oleg_nenashev yeah, this <installState>RESTART</installState> is the culprit, it looks like. A shame XStream doesn't realize the field is now transient and skip it. I still think that this could potentially be set from other sources (e.g. Groovy startup scripts), which makes my solution more general purpose.
            oleg_nenashev Oleg Nenashev added a comment -

            Agreed, XStream fix does not close all potential misuse cases. Created https://github.com/jenkinsci/jenkins/pull/2387 anyway

            oleg_nenashev Oleg Nenashev added a comment - Agreed, XStream fix does not close all potential misuse cases. Created https://github.com/jenkinsci/jenkins/pull/2387 anyway
            oleg_nenashev Oleg Nenashev made changes -
            Remote Link This issue links to "PR 2387 (Web Link)" [ 14355 ]

            Code changed in jenkins
            User: Oleg Nenashev
            Path:
            core/src/main/java/jenkins/install/InstallState.java
            test/src/test/java/jenkins/install/InstallStateTest.java
            http://jenkins-ci.org/commit/jenkins/1b2711c9578f5b34bc452fcc3f2dd055b1c0865c
            Log:
            JENKINS-35206 - Make the InstallState object deserialization robust against corrupted files (#2387)

            • JENKINS-35206 - Install state should be robust against messed statuses when deserializing objects
            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Oleg Nenashev Path: core/src/main/java/jenkins/install/InstallState.java test/src/test/java/jenkins/install/InstallStateTest.java http://jenkins-ci.org/commit/jenkins/1b2711c9578f5b34bc452fcc3f2dd055b1c0865c Log: JENKINS-35206 - Make the InstallState object deserialization robust against corrupted files (#2387) JENKINS-35206 - Add unit tests for the deserialization logic JENKINS-35206 - Install state should be robust against messed statuses when deserializing objects JENKINS-35206 - Fix the license header in thre test file

            Code changed in jenkins
            User: Keith Zantow
            Path:
            core/src/main/java/jenkins/install/InstallUtil.java
            core/src/main/java/jenkins/model/Jenkins.java
            http://jenkins-ci.org/commit/jenkins/541641100b4a9570d72d263a12edbc1e06c987a2
            Log:
            JENKINS-35206 - fix potential NPE due to corrupt Jenkins.InstallState (#2385)

            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Keith Zantow Path: core/src/main/java/jenkins/install/InstallUtil.java core/src/main/java/jenkins/model/Jenkins.java http://jenkins-ci.org/commit/jenkins/541641100b4a9570d72d263a12edbc1e06c987a2 Log: JENKINS-35206 - fix potential NPE due to corrupt Jenkins.InstallState (#2385)
            axelbehrens Axel Behrens added a comment -

            BTW: It's fixed now in 2.8

            axelbehrens Axel Behrens added a comment - BTW: It's fixed now in 2.8
            oleg_nenashev Oleg Nenashev made changes -
            Resolution Fixed [ 1 ]
            Status In Progress [ 3 ] Resolved [ 5 ]
            danielbeck Daniel Beck made changes -
            Labels lts-candidate
            olivergondza Oliver Gondža made changes -
            Labels lts-candidate 2.7.1-fixed
            rtyler R. Tyler Croy made changes -
            Workflow JNJira [ 171434 ] JNJira + In-Review [ 199101 ]

            Code changed in jenkins
            User: Keith Zantow
            Path:
            core/src/main/java/jenkins/install/InstallUtil.java
            core/src/main/java/jenkins/model/Jenkins.java
            http://jenkins-ci.org/commit/jenkins/3837f44a6f2621dde0bea59c522cc1e0464b67c2
            Log:
            JENKINS-35206 - fix potential NPE due to corrupt Jenkins.InstallState (#2385)
            (cherry picked from commit 541641100b4a9570d72d263a12edbc1e06c987a2)

            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Keith Zantow Path: core/src/main/java/jenkins/install/InstallUtil.java core/src/main/java/jenkins/model/Jenkins.java http://jenkins-ci.org/commit/jenkins/3837f44a6f2621dde0bea59c522cc1e0464b67c2 Log: JENKINS-35206 - fix potential NPE due to corrupt Jenkins.InstallState (#2385) (cherry picked from commit 541641100b4a9570d72d263a12edbc1e06c987a2)

            Code changed in jenkins
            User: Oleg Nenashev
            Path:
            core/src/main/java/jenkins/install/InstallState.java
            test/src/test/java/jenkins/install/InstallStateTest.java
            http://jenkins-ci.org/commit/jenkins/e8467e304ba33329c1afd0fa15a8456f52711f4b
            Log:
            JENKINS-35206 - Make the InstallState object deserialization robust against corrupted files (#2387)

            • JENKINS-35206 - Install state should be robust against messed statuses when deserializing objects

            (cherry picked from commit 1b2711c9578f5b34bc452fcc3f2dd055b1c0865c)

            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Oleg Nenashev Path: core/src/main/java/jenkins/install/InstallState.java test/src/test/java/jenkins/install/InstallStateTest.java http://jenkins-ci.org/commit/jenkins/e8467e304ba33329c1afd0fa15a8456f52711f4b Log: JENKINS-35206 - Make the InstallState object deserialization robust against corrupted files (#2387) JENKINS-35206 - Add unit tests for the deserialization logic JENKINS-35206 - Install state should be robust against messed statuses when deserializing objects JENKINS-35206 - Fix the license header in thre test file (cherry picked from commit 1b2711c9578f5b34bc452fcc3f2dd055b1c0865c)

            People

              kzantow Keith Zantow
              axelbehrens Axel Behrens
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: