Merge "Sort waiting static nodes by creation time"

This commit is contained in:
Zuul
2019-10-10 19:38:24 +00:00
committed by Gerrit Code Review
2 changed files with 46 additions and 1 deletions

View File

@@ -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)

View File

@@ -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)