Slaves NodeProperties are owned by Jenkins not Nodes.

This issue is archived. You can view it, but you can't modify it. Learn more

XMLWordPrintable

      A Slaves nodeProperties are owned by Jenkins.

      So whenever a NodeProperty is changed this causes persistance of the entire jenkins configuration rather than just Nodes which is what actually persists the NodeProperties.

      Whilst this is just inefficient - if anyone wants to add a node property to new nodes created (e.g. by implementing a cloud listener) then is it possible to get a deadlock if someone also saves the Jenkins configuration at the same time. (as Jenkins.save() will lock Jenkins and then the queue, but callback for Nodes can happen with the queue locked).

      "jenkins.util.Timer [#3]" id=34 (0x22) state=BLOCKED cpu=91%
          - waiting to lock <0x107c53da> (a hudson.model.Hudson)
           owned by Handling POST /configSubmit : http-8080-5 id=42
          at jenkins.model.Jenkins.save(Jenkins.java:2734)
          at hudson.util.PersistedList.onModified(PersistedList.java:173)
          at hudson.util.PersistedList._onModified(PersistedList.java:181)
          at hudson.util.PersistedList.add(PersistedList.java:72)
          at com.cloudbees.librato.CloudListener.onComplete(CloudListener.java:83)
          at hudson.slaves.NodeProvisioner$2.run(NodeProvisioner.java:223)
          at hudson.model.Queue._withLock(Queue.java:1235)
          at hudson.model.Queue.withLock(Queue.java:1171)
          at hudson.slaves.NodeProvisioner.update(NodeProvisioner.java:208)
          at hudson.slaves.NodeProvisioner.access$000(NodeProvisioner.java:57)
          at hudson.slaves.NodeProvisioner$NodeProvisionerInvoker.doRun(NodeProvisioner.java:777)
          at hudson.triggers.SafeTimerTask.run(SafeTimerTask.java:51)
          at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
          at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
          at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
          at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
          at java.lang.Thread.run(Thread.java:745)
      
          Locked synchronizers: count = 3
            - java.util.concurrent.locks.ReentrantLock$NonfairSync@2e7d6057
            - java.util.concurrent.ThreadPoolExecutor$Worker@6d40c3f9
            - java.util.concurrent.locks.ReentrantLock$NonfairSync@640c882b
      
      
      
      "Handling POST /configSubmit : http-8080-5" id=42 (0x2a) state=WAITING cpu=96%
          - waiting on <0x2e7d6057> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
          - locked <0x2e7d6057> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
           owned by jenkins.util.Timer [#3] id=34
          at sun.misc.Unsafe.park(Native Method)
          at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
          at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834)
          at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867)
          at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197)
          at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:214)
          at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:290)
          at hudson.model.Queue._withLock(Queue.java:1233)
          at hudson.model.Queue.withLock(Queue.java:1171)
          at hudson.model.AbstractCIBase.updateComputerList(AbstractCIBase.java:168)
          at jenkins.model.Jenkins.updateComputerList(Jenkins.java:1219)
          at jenkins.model.Jenkins.doConfigSubmit(Jenkins.java:2858)
      ...
      

            Assignee:
            Unassigned
            Reporter:
            James Nord
            Archiver:
            Jenkins Service Account

              Created:
              Updated:
              Resolved:
              Archived: