Merge "Sort waiting static nodes by creation time"
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
# under the License.
|
||||
|
||||
import logging
|
||||
from operator import attrgetter
|
||||
|
||||
from collections import Counter
|
||||
from collections import namedtuple
|
||||
@@ -104,7 +105,9 @@ class StaticNodeProvider(Provider):
|
||||
):
|
||||
continue
|
||||
nodes.append(node)
|
||||
return nodes
|
||||
return list(
|
||||
sorted(nodes, key=attrgetter("created_time"), reverse=True)
|
||||
)
|
||||
|
||||
def checkNodeLiveness(self, node):
|
||||
static_node = self.poolNodes().get(node.hostname)
|
||||
|
||||
@@ -298,6 +298,48 @@ class TestDriverStatic(tests.DBTestCase):
|
||||
node = self.zk.getNode(req.nodes[0])
|
||||
self.assertIsNotNone(node)
|
||||
|
||||
def test_static_waiting_handler_order(self):
|
||||
configfile = self.setup_config('static-basic.yaml')
|
||||
pool = self.useNodepool(configfile, watermark_sleep=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)
|
||||
node = self.zk.getNode(req.nodes[0])
|
||||
self.zk.lockNode(node)
|
||||
node.state = zk.USED
|
||||
self.zk.storeNode(node)
|
||||
|
||||
req_waiting1 = zk.NodeRequest()
|
||||
req_waiting1.state = zk.REQUESTED
|
||||
req_waiting1.node_types.append('fake-label')
|
||||
self.zk.storeNodeRequest(req_waiting1)
|
||||
req_waiting1 = self.waitForNodeRequest(req_waiting1, zk.PENDING)
|
||||
|
||||
req_waiting2 = zk.NodeRequest()
|
||||
req_waiting2.state = zk.REQUESTED
|
||||
req_waiting2.node_types.append('fake-label')
|
||||
self.zk.storeNodeRequest(req_waiting2)
|
||||
req_waiting2 = self.waitForNodeRequest(req_waiting2, zk.PENDING)
|
||||
|
||||
self.zk.unlockNode(node)
|
||||
self.waitForNodeDeletion(node)
|
||||
|
||||
req_waiting1 = self.waitForNodeRequest(req_waiting1, zk.FULFILLED)
|
||||
req_waiting2 = self.zk.getNodeRequest(req_waiting2.id)
|
||||
self.assertEqual(req_waiting2.state, zk.PENDING)
|
||||
|
||||
node_waiting1 = self.zk.getNode(req_waiting1.nodes[0])
|
||||
self.zk.lockNode(node_waiting1)
|
||||
node_waiting1.state = zk.USED
|
||||
self.zk.storeNode(node_waiting1)
|
||||
self.zk.unlockNode(node_waiting1)
|
||||
|
||||
self.waitForNodeRequest(req_waiting2, zk.FULFILLED)
|
||||
|
||||
def test_static_handler_race_cleanup(self):
|
||||
configfile = self.setup_config('static-basic.yaml')
|
||||
pool = self.useNodepool(configfile, watermark_sleep=1)
|
||||
|
||||
Reference in New Issue
Block a user