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

Stack overflow in WorkflowRun.reload after run ID migration

      Observed with post-1.597 cores, after run ID migration.

      hudson.model.Run.<init>(Run.java:320)
      org.jenkinsci.plugins.workflow.job.WorkflowRun.<init>(WorkflowRun.java:133)
      sun.reflect.GeneratedConstructorAccessor65.newInstance(Unknown Source)
      sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      java.lang.reflect.Constructor.newInstance(Constructor.java:408)
      jenkins.model.lazy.LazyBuildMixIn.loadBuild(LazyBuildMixIn.java:158)
      jenkins.model.lazy.LazyBuildMixIn$1.create(LazyBuildMixIn.java:135)
      hudson.model.RunMap.retrieve(RunMap.java:222)
      hudson.model.RunMap.retrieve(RunMap.java:57)
      jenkins.model.lazy.AbstractLazyLoadRunMap.load(AbstractLazyLoadRunMap.java:465)
      jenkins.model.lazy.AbstractLazyLoadRunMap.load(AbstractLazyLoadRunMap.java:448)
      jenkins.model.lazy.AbstractLazyLoadRunMap.getByNumber(AbstractLazyLoadRunMap.java:356)
      hudson.model.RunMap.getById(RunMap.java:203)
      org.jenkinsci.plugins.workflow.job.WorkflowRun$Owner.run(WorkflowRun.java:559)
      org.jenkinsci.plugins.workflow.job.WorkflowRun$Owner.getRootDir(WorkflowRun.java:588)
      org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.getStorageDir(CpsFlowExecution.java:315)
      org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.createStorage(CpsFlowExecution.java:308)
      org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.access$800(CpsFlowExecution.java:188)
      org.jenkinsci.plugins.workflow.cps.CpsFlowExecution$ConverterImpl.unmarshal(CpsFlowExecution.java:817)
      hudson.util.XStream2$AssociatedConverterImpl.unmarshal(XStream2.java:362)
      com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      hudson.util.RobustReflectionConverter.unmarshalField(RobustReflectionConverter.java:349)
      hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:289)
      hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:228)
      com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
      com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
      com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
      com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1189)
      hudson.util.XStream2.unmarshal(XStream2.java:113)
      com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)
      hudson.XmlFile.unmarshal(XmlFile.java:163)
      org.jenkinsci.plugins.workflow.job.WorkflowRun.reload(WorkflowRun.java:360)
      hudson.model.Run.<init>(Run.java:320)
      

      While it is awkward that CpsFlowExecution deserialization in turn forces the WorkflowRun candidate to be returned from Owner.run, this is normally harmless. The problem here seems to be that after RunIdMigrator has run, the WorkflowRun.id is read (via key) by reload, yet it is still null at that point because unmarshal has yet to be called, so LOADING_RUNS is inaccurate.

          [JENKINS-27531] Stack overflow in WorkflowRun.reload after run ID migration

          Jesse Glick created issue -
          Jesse Glick made changes -
          Status Original: Open [ 1 ] New: In Progress [ 3 ]
          Jesse Glick made changes -
          Description Original: Observed with newer cores, after run ID migration.

          {code:none}
          hudson.model.Run.<init>(Run.java:320)
          org.jenkinsci.plugins.workflow.job.WorkflowRun.<init>(WorkflowRun.java:133)
          sun.reflect.GeneratedConstructorAccessor65.newInstance(Unknown Source)
          sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
          java.lang.reflect.Constructor.newInstance(Constructor.java:408)
          jenkins.model.lazy.LazyBuildMixIn.loadBuild(LazyBuildMixIn.java:158)
          jenkins.model.lazy.LazyBuildMixIn$1.create(LazyBuildMixIn.java:135)
          hudson.model.RunMap.retrieve(RunMap.java:222)
          hudson.model.RunMap.retrieve(RunMap.java:57)
          jenkins.model.lazy.AbstractLazyLoadRunMap.load(AbstractLazyLoadRunMap.java:465)
          jenkins.model.lazy.AbstractLazyLoadRunMap.load(AbstractLazyLoadRunMap.java:448)
          jenkins.model.lazy.AbstractLazyLoadRunMap.getByNumber(AbstractLazyLoadRunMap.java:356)
          hudson.model.RunMap.getById(RunMap.java:203)
          org.jenkinsci.plugins.workflow.job.WorkflowRun$Owner.run(WorkflowRun.java:559)
          org.jenkinsci.plugins.workflow.job.WorkflowRun$Owner.getRootDir(WorkflowRun.java:588)
          org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.getStorageDir(CpsFlowExecution.java:315)
          org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.createStorage(CpsFlowExecution.java:308)
          org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.access$800(CpsFlowExecution.java:188)
          org.jenkinsci.plugins.workflow.cps.CpsFlowExecution$ConverterImpl.unmarshal(CpsFlowExecution.java:817)
          hudson.util.XStream2$AssociatedConverterImpl.unmarshal(XStream2.java:362)
          com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
          com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
          com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
          hudson.util.RobustReflectionConverter.unmarshalField(RobustReflectionConverter.java:349)
          hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:289)
          hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:228)
          com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
          com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
          com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
          com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
          com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
          com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
          com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1189)
          hudson.util.XStream2.unmarshal(XStream2.java:113)
          com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)
          hudson.XmlFile.unmarshal(XmlFile.java:163)
          org.jenkinsci.plugins.workflow.job.WorkflowRun.reload(WorkflowRun.java:360)
          hudson.model.Run.<init>(Run.java:320)
          {code}
          New: Observed with post-1.597 cores, after run ID migration.

          {code:none}
          hudson.model.Run.<init>(Run.java:320)
          org.jenkinsci.plugins.workflow.job.WorkflowRun.<init>(WorkflowRun.java:133)
          sun.reflect.GeneratedConstructorAccessor65.newInstance(Unknown Source)
          sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
          java.lang.reflect.Constructor.newInstance(Constructor.java:408)
          jenkins.model.lazy.LazyBuildMixIn.loadBuild(LazyBuildMixIn.java:158)
          jenkins.model.lazy.LazyBuildMixIn$1.create(LazyBuildMixIn.java:135)
          hudson.model.RunMap.retrieve(RunMap.java:222)
          hudson.model.RunMap.retrieve(RunMap.java:57)
          jenkins.model.lazy.AbstractLazyLoadRunMap.load(AbstractLazyLoadRunMap.java:465)
          jenkins.model.lazy.AbstractLazyLoadRunMap.load(AbstractLazyLoadRunMap.java:448)
          jenkins.model.lazy.AbstractLazyLoadRunMap.getByNumber(AbstractLazyLoadRunMap.java:356)
          hudson.model.RunMap.getById(RunMap.java:203)
          org.jenkinsci.plugins.workflow.job.WorkflowRun$Owner.run(WorkflowRun.java:559)
          org.jenkinsci.plugins.workflow.job.WorkflowRun$Owner.getRootDir(WorkflowRun.java:588)
          org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.getStorageDir(CpsFlowExecution.java:315)
          org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.createStorage(CpsFlowExecution.java:308)
          org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.access$800(CpsFlowExecution.java:188)
          org.jenkinsci.plugins.workflow.cps.CpsFlowExecution$ConverterImpl.unmarshal(CpsFlowExecution.java:817)
          hudson.util.XStream2$AssociatedConverterImpl.unmarshal(XStream2.java:362)
          com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
          com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
          com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
          hudson.util.RobustReflectionConverter.unmarshalField(RobustReflectionConverter.java:349)
          hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:289)
          hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:228)
          com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
          com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
          com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
          com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
          com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
          com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
          com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1189)
          hudson.util.XStream2.unmarshal(XStream2.java:113)
          com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)
          hudson.XmlFile.unmarshal(XmlFile.java:163)
          org.jenkinsci.plugins.workflow.job.WorkflowRun.reload(WorkflowRun.java:360)
          hudson.model.Run.<init>(Run.java:320)
          {code}

          While it is awkward that {{CpsFlowExecution}} deserialization in turn forces the {{WorkflowRun}} candidate to be returned from {{Owner.run}}, this is normally harmless. The problem here seems to be that after {{RunIdMigrator}} has run, the {{WorkflowRun.id}} is read (via {{key}}) by {{reload}}, yet it is still null at that point because {{unmarshal}} has yet to be called, so {{LOADING_RUNS}} is inaccurate.
          Summary Original: Stack overflow in WorkflowRun.reload New: Stack overflow in WorkflowRun.reload after run ID migration
          Jesse Glick made changes -
          Link New: This issue is blocking JENKINS-24380 [ JENKINS-24380 ]
          Jesse Glick made changes -
          Remote Link New: This issue links to "PR 97 (Web Link)" [ 12171 ]

          Code changed in jenkins
          User: Jesse Glick
          Path:
          CHANGES.md
          aggregator/src/test/java/org/jenkinsci/plugins/workflow/WorkflowRunTest.java
          aggregator/src/test/resources/org/jenkinsci/plugins/workflow/WorkflowRunTest/loadMigratedBuildRecord.zip
          job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowRun.java
          http://jenkins-ci.org/commit/workflow-plugin/bdf1260dcafaf43bac23ec5d76f01916bc432e64
          Log:
          [FIXED JENKINS-27531] In 1.597+ Run.getId() is not reliable while it is still being loaded.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: CHANGES.md aggregator/src/test/java/org/jenkinsci/plugins/workflow/WorkflowRunTest.java aggregator/src/test/resources/org/jenkinsci/plugins/workflow/WorkflowRunTest/loadMigratedBuildRecord.zip job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowRun.java http://jenkins-ci.org/commit/workflow-plugin/bdf1260dcafaf43bac23ec5d76f01916bc432e64 Log: [FIXED JENKINS-27531] In 1.597+ Run.getId() is not reliable while it is still being loaded.
          SCM/JIRA link daemon made changes -
          Resolution New: Fixed [ 1 ]
          Status Original: In Progress [ 3 ] New: Resolved [ 5 ]

          Code changed in jenkins
          User: Jesse Glick
          Path:
          CHANGES.md
          aggregator/src/test/java/org/jenkinsci/plugins/workflow/WorkflowRunTest.java
          aggregator/src/test/resources/org/jenkinsci/plugins/workflow/WorkflowRunTest/loadMigratedBuildRecord.zip
          job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowRun.java
          http://jenkins-ci.org/commit/workflow-plugin/b5617c56c3a03553cebffadcb188b788d0299869
          Log:
          Merge pull request #97 from jglick/StackOverflowError-JENKINS-27531

          JENKINS-27531 Run.id-related error in 1.597+

          Compare: https://github.com/jenkinsci/workflow-plugin/compare/f9c921341006...b5617c56c3a0

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: CHANGES.md aggregator/src/test/java/org/jenkinsci/plugins/workflow/WorkflowRunTest.java aggregator/src/test/resources/org/jenkinsci/plugins/workflow/WorkflowRunTest/loadMigratedBuildRecord.zip job/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowRun.java http://jenkins-ci.org/commit/workflow-plugin/b5617c56c3a03553cebffadcb188b788d0299869 Log: Merge pull request #97 from jglick/StackOverflowError- JENKINS-27531 JENKINS-27531 Run.id-related error in 1.597+ Compare: https://github.com/jenkinsci/workflow-plugin/compare/f9c921341006...b5617c56c3a0
          Jesse Glick made changes -
          Link New: This issue is related to JENKINS-26761 [ JENKINS-26761 ]

          Jesse Glick added a comment -

          First change in JENKINS-27704 may have made it possible to simplify this fix.

          Jesse Glick added a comment - First change in JENKINS-27704 may have made it possible to simplify this fix.
          Jesse Glick made changes -
          Link New: This issue is related to JENKINS-27704 [ JENKINS-27704 ]

            jglick Jesse Glick
            jglick Jesse Glick
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: