• Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Minor Minor
    • core
    • More likely in Jenkins 2.107 and newer, but possible since at least Jenkins 2.0

      If an exception is thrown by persistNode in Nodes#addNode, then the node will still exist in memory, but it may not exist on disk (or the disk form may be corrupted). This could happen for various reasons, but in particular JEP-200 issues when serializing the node will throw an exception from persistNode and cause this problem.

      The issue was originally noticed by jglick while investigating JENKINS-50480. The result of the error in that case was that a test logged a severe error because of a failure to add the node in Nodes#addNode, but the test actually passed because the node could be accessed in memory. It would have been better for that test to fail so that the JEP-200 error did not go unnoticed.

      I think it makes sense to remove the node from memory if the call to persistNode throws an exception, so that the Nodes#addNode call does not fail in a half-finished state.

          [JENKINS-50599] Nodes#addNode does not fail atomically

          Code changed in jenkins
          User: Devin Nusbaum
          Path:
          core/src/main/java/jenkins/model/Nodes.java
          test/src/test/java/jenkins/model/NodesTest.java
          http://jenkins-ci.org/commit/jenkins/9557da32a3550bd98acc9d04728547fcd98b8a15
          Log:
          JENKINS-50599 Make Nodes#addNode fail atomically (#3383)

          • Make Nodes#addNode fail atomically
          • Simplify rollback logic and add some tests
          • Fix typo
          • Rename lambda parameters to clarify that they are intentionally ignored
          • Catch RuntimeException as well

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Devin Nusbaum Path: core/src/main/java/jenkins/model/Nodes.java test/src/test/java/jenkins/model/NodesTest.java http://jenkins-ci.org/commit/jenkins/9557da32a3550bd98acc9d04728547fcd98b8a15 Log: JENKINS-50599 Make Nodes#addNode fail atomically (#3383) Reproduce JENKINS-50599 Make Nodes#addNode fail atomically Simplify rollback logic and add some tests Fix typo Rename lambda parameters to clarify that they are intentionally ignored Catch RuntimeException as well

          Daniel Beck added a comment -

          Fixed in 2.117.

          Daniel Beck added a comment - Fixed in 2.117.

            Unassigned Unassigned
            dnusbaum Devin Nusbaum
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: