diff --git a/nodepool/launcher.py b/nodepool/launcher.py index 9c4c2c085..de4267285 100755 --- a/nodepool/launcher.py +++ b/nodepool/launcher.py @@ -553,8 +553,10 @@ class CleanupWorker(BaseCleanupWorker): continue # Double check the state now that we have a lock since it - # may have changed on us. - if node.state != zk.READY: + # may have changed on us. We keep using the original node + # since it's holding the lock. + _node = zk_conn.getNode(node.id) + if _node.state != zk.READY: zk_conn.unlockNode(node) continue @@ -605,8 +607,10 @@ class CleanupWorker(BaseCleanupWorker): continue # Double check the state now that we have a lock since it - # may have changed on us. - if node.state != zk.HOLD: + # may have changed on us. We keep using the original node + # since it's holding the lock. + _node = zk_conn.getNode(node.id) + if _node.state != zk.HOLD: zk_conn.unlockNode(node) continue @@ -716,8 +720,10 @@ class DeletedNodeWorker(BaseCleanupWorker): continue # Double check the state now that we have a lock since it - # may have changed on us. - if node.state not in cleanup_states: + # may have changed on us. We keep using the original node + # since it's holding the lock. + _node = zk_conn.getNode(node.id) + if _node.state not in cleanup_states: zk_conn.unlockNode(node) continue