Refactor scheduller interface, make more properties instead of methods
This commit is contained in:
@@ -65,13 +65,13 @@ class TestEachScheduling:
|
||||
assert sched.node2collection[node1] == collection
|
||||
assert sched.node2collection[node2] == collection
|
||||
sched.schedule()
|
||||
assert sched.tests_finished()
|
||||
assert sched.tests_finished
|
||||
assert node1.sent == ['ALL']
|
||||
assert node2.sent == ['ALL']
|
||||
sched.remove_item(node1, 0)
|
||||
assert sched.tests_finished()
|
||||
assert sched.tests_finished
|
||||
sched.remove_item(node2, 0)
|
||||
assert sched.tests_finished()
|
||||
assert sched.tests_finished
|
||||
|
||||
def test_schedule_remove_node(self, testdir):
|
||||
node1 = MockNode()
|
||||
@@ -84,11 +84,11 @@ class TestEachScheduling:
|
||||
assert sched.collection_is_completed
|
||||
assert sched.node2collection[node1] == collection
|
||||
sched.schedule()
|
||||
assert sched.tests_finished()
|
||||
assert sched.tests_finished
|
||||
crashitem = sched.remove_node(node1)
|
||||
assert crashitem
|
||||
assert sched.tests_finished()
|
||||
assert not sched.has_nodes()
|
||||
assert sched.tests_finished
|
||||
assert not sched.nodes
|
||||
|
||||
|
||||
class TestLoadScheduling:
|
||||
@@ -108,13 +108,13 @@ class TestLoadScheduling:
|
||||
assert sched.node2collection[node2] == collection
|
||||
sched.schedule()
|
||||
assert not sched.pending
|
||||
assert sched.tests_finished()
|
||||
assert sched.tests_finished
|
||||
assert len(node1.sent) == 1
|
||||
assert len(node2.sent) == 1
|
||||
assert node1.sent == [0]
|
||||
assert node2.sent == [1]
|
||||
sched.remove_item(node1, node1.sent[0])
|
||||
assert sched.tests_finished()
|
||||
assert sched.tests_finished
|
||||
|
||||
def test_schedule_batch_size(self, testdir):
|
||||
config = testdir.parseconfig("--tx=2*popen")
|
||||
@@ -126,7 +126,7 @@ class TestLoadScheduling:
|
||||
sched.add_node_collection(node1, col)
|
||||
sched.add_node_collection(node2, col)
|
||||
sched.schedule()
|
||||
# assert not sched.tests_finished()
|
||||
# assert not sched.tests_finished
|
||||
sent1 = node1.sent
|
||||
sent2 = node2.sent
|
||||
assert sent1 == [0, 2]
|
||||
@@ -154,7 +154,7 @@ class TestLoadScheduling:
|
||||
sched.add_node_collection(node1, col)
|
||||
sched.add_node_collection(node2, col)
|
||||
sched.schedule()
|
||||
# assert not sched.tests_finished()
|
||||
# assert not sched.tests_finished
|
||||
sent1 = node1.sent
|
||||
sent2 = node2.sent
|
||||
sent3 = node3.sent
|
||||
@@ -174,7 +174,7 @@ class TestLoadScheduling:
|
||||
sched.add_node_collection(node1, col)
|
||||
sched.add_node_collection(node2, col)
|
||||
sched.schedule()
|
||||
# assert not sched.tests_finished()
|
||||
# assert not sched.tests_finished
|
||||
sent1 = node1.sent
|
||||
sent2 = node2.sent
|
||||
sent3 = node3.sent
|
||||
|
||||
@@ -42,9 +42,18 @@ class EachScheduling:
|
||||
"""A list of all nodes in the scheduler."""
|
||||
return list(self.node2pending.keys())
|
||||
|
||||
def has_nodes(self):
|
||||
return bool(self.node2pending)
|
||||
@property
|
||||
def tests_finished(self):
|
||||
if not self.collection_is_completed:
|
||||
return False
|
||||
if self._removed2pending:
|
||||
return False
|
||||
for pending in self.node2pending.values():
|
||||
if len(pending) >= 2:
|
||||
return False
|
||||
return True
|
||||
|
||||
@property
|
||||
def has_pending(self):
|
||||
"""Return True if there are pending test items
|
||||
|
||||
@@ -61,16 +70,6 @@ class EachScheduling:
|
||||
assert node not in self.node2pending
|
||||
self.node2pending[node] = []
|
||||
|
||||
def tests_finished(self):
|
||||
if not self.collection_is_completed:
|
||||
return False
|
||||
if self._removed2pending:
|
||||
return False
|
||||
for pending in self.node2pending.values():
|
||||
if len(pending) >= 2:
|
||||
return False
|
||||
return True
|
||||
|
||||
def add_node_collection(self, node, collection):
|
||||
"""Add the collected test items from a node
|
||||
|
||||
@@ -209,6 +208,19 @@ class LoadScheduling:
|
||||
"""
|
||||
return len(self.node2collection) >= self.numnodes
|
||||
|
||||
@property
|
||||
def tests_finished(self):
|
||||
"""Return True if all tests have been executed by the nodes."""
|
||||
if not self.collection_is_completed:
|
||||
return False
|
||||
if self.pending:
|
||||
return False
|
||||
for pending in self.node2pending.values():
|
||||
if len(pending) >= 2:
|
||||
return False
|
||||
return True
|
||||
|
||||
@property
|
||||
def has_pending(self):
|
||||
"""Return True if there are pending test items
|
||||
|
||||
@@ -223,10 +235,6 @@ class LoadScheduling:
|
||||
return True
|
||||
return False
|
||||
|
||||
def has_nodes(self):
|
||||
"""Return True if nodes exist in the scheduler."""
|
||||
return bool(self.node2pending)
|
||||
|
||||
def add_node(self, node):
|
||||
"""Add a new node to the scheduler.
|
||||
|
||||
@@ -239,17 +247,6 @@ class LoadScheduling:
|
||||
assert node not in self.node2pending
|
||||
self.node2pending[node] = []
|
||||
|
||||
def tests_finished(self):
|
||||
"""Return True if all tests have been executed by the nodes."""
|
||||
if not self.collection_is_completed:
|
||||
return False
|
||||
if self.pending:
|
||||
return False
|
||||
for pending in self.node2pending.values():
|
||||
if len(pending) >= 2:
|
||||
return False
|
||||
return True
|
||||
|
||||
def add_node_collection(self, node, collection):
|
||||
"""Add the collected test items from a node
|
||||
|
||||
@@ -559,7 +556,7 @@ class DSession:
|
||||
call = getattr(self, method)
|
||||
self.log("calling method", method, kwargs)
|
||||
call(**kwargs)
|
||||
if self.sched.tests_finished():
|
||||
if self.sched.tests_finished:
|
||||
self.triggershutdown()
|
||||
|
||||
#
|
||||
@@ -645,7 +642,7 @@ class DSession:
|
||||
if self.terminal:
|
||||
self.trdist.setstatus(node.gateway.spec, "[%d]" % (len(ids)))
|
||||
if self.sched.collection_is_completed:
|
||||
if self.terminal and not self.sched.has_pending():
|
||||
if self.terminal and not self.sched.has_pending:
|
||||
self.trdist.ensure_show_status()
|
||||
self.terminal.write_line("")
|
||||
self.terminal.write_line("scheduling tests via %s" % (
|
||||
|
||||
Reference in New Issue
Block a user