Don't touch static nodes that are allocated
The method for retrieving registered ready nodes from Zookeeper was not checking if a node was allocated. This could lead to reconfiguration, deletion or reassignment of allocated READY nodes. Change-Id: I53202a03ea7bf8449a2404b927899eb3e868a19f
This commit is contained in:
parent
1ebfdea232
commit
f5c509ae1d
|
@ -88,6 +88,7 @@ class StaticNodeProvider(Provider):
|
|||
for node in self.zk.nodeIterator():
|
||||
if (node.provider != self.provider.name or
|
||||
node.state != zk.READY or
|
||||
node.allocated_to is not None or
|
||||
nodeTuple(node) != node_tuple
|
||||
):
|
||||
continue
|
||||
|
|
|
@ -274,6 +274,30 @@ class TestDriverStatic(tests.DBTestCase):
|
|||
self.waitForNodeDeletion(node)
|
||||
self.waitForNodeRequest(req_waiting, zk.FULFILLED)
|
||||
|
||||
def test_static_ignore_assigned_ready_nodes(self):
|
||||
"""Regression test to not touch assigned READY nodes"""
|
||||
configfile = self.setup_config('static-basic.yaml')
|
||||
pool = self.useNodepool(configfile, watermark_sleep=1)
|
||||
# Make sure the cleanup worker is called that reallocated the node
|
||||
pool.cleanup_interval = .1
|
||||
pool.start()
|
||||
|
||||
req = zk.NodeRequest()
|
||||
req.state = zk.REQUESTED
|
||||
req.node_types.append('fake-label')
|
||||
self.zk.storeNodeRequest(req)
|
||||
req = self.waitForNodeRequest(req, zk.FULFILLED)
|
||||
|
||||
req_waiting = zk.NodeRequest()
|
||||
req_waiting.state = zk.REQUESTED
|
||||
req_waiting.node_types.append('fake-label')
|
||||
self.zk.storeNodeRequest(req_waiting)
|
||||
req_waiting = self.waitForNodeRequest(req_waiting, zk.PENDING)
|
||||
|
||||
# Make sure the node is not reallocated
|
||||
node = self.zk.getNode(req.nodes[0])
|
||||
self.assertIsNotNone(node)
|
||||
|
||||
def test_static_handler_race_cleanup(self):
|
||||
configfile = self.setup_config('static-basic.yaml')
|
||||
pool = self.useNodepool(configfile, watermark_sleep=1)
|
||||
|
|
Loading…
Reference in New Issue