Refactor scheduller interface, make more properties instead of methods

This commit is contained in:
Michael Elovskikh
2017-02-15 11:43:56 +05:00
parent a99e6e7ca8
commit c809406ef6
2 changed files with 37 additions and 40 deletions

View File

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

View File

@@ -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" % (