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

Deadlock adding Docker node

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Major Major
    • docker-plugin
    • Jenkins 1.598-SNAPSHOT, Docker plugin 0.8
      Red Hat 6.6, Java 1.7.0_72

      If the Docker plugin adds a node at the same time as CloudRetentionStrategy.check() is done, a deadlock can occur. Here's a thread dump of the thread that's adding a Docker node:

      Thread 14552: (state = BLOCKED)
       - hudson.model.Queue._withLock(java.lang.Runnable) @bci=0, line=1036 (Interpreted frame)
       - hudson.model.Queue.withLock(java.lang.Runnable) @bci=32, line=984 (Interpreted frame)
       - hudson.slaves.CloudRetentionStrategy.check(hudson.slaves.AbstractCloudComputer) @bci=67, line=68 (Interpreted frame)
       - hudson.slaves.CloudRetentionStrategy.check(hudson.model.Computer) @bci=5, line=46 (Interpreted frame)
       - hudson.slaves.SlaveComputer.setNode(hudson.model.Node) @bci=36, line=661 (Interpreted frame)
       - hudson.model.AbstractCIBase.updateComputer(hudson.model.Node, java.util.Map, java.util.Set, boolean) @bci=29, line=120 (Interpreted frame)
       - hudson.model.AbstractCIBase.updateComputerList(boolean) @bci=169, line=180 (Interpreted frame)
       - jenkins.model.Jenkins.updateComputerList() @bci=4, line=1218 (Interpreted frame)
       - jenkins.model.Jenkins.setNodes(java.util.List) @bci=13, line=1714 (Interpreted frame)
       - jenkins.model.Jenkins.addNode(hudson.model.Node) @bci=40, line=1696 (Interpreted frame)
       - com.nirima.jenkins.plugins.docker.DockerCloud$1.call() @bci=24, line=166 (Interpreted frame)
       - com.nirima.jenkins.plugins.docker.DockerCloud$1.call() @bci=1, line=160 (Interpreted frame)
       - jenkins.util.ContextResettingExecutorService$2.call() @bci=18, line=46 (Compiled frame)
       - java.util.concurrent.FutureTask.run() @bci=42, line=262 (Compiled frame)
       - java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) @bci=95, line=1145 (Compiled frame)
       - java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=5, line=615 (Interpreted frame)
       - java.lang.Thread.run() @bci=11, line=745 (Interpreted frame)
      

      Based on the comments and change applied for issue JENKINS-26380, I believe the Queue should be locked prior to Jenkins.addNode() being called.

            Unassigned Unassigned
            bernie Bernie Schelberg
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: