Issue node shutdown on empty workload

Remote pytest_runtestloop requires at least 2 tests, or a test
and a shutdown command. In case of inter test locking, for
example using a file lock, the tests could deadlock, since the
shutdown command would not be enqueued, and the last test of a
worker would never finish, and would not allow another worker
to make progress.
This commit is contained in:
Jan Kasiak
2018-09-30 13:59:35 -04:00
parent 86e2fb5a5a
commit fe06f27b8b
6 changed files with 57 additions and 0 deletions

View File

@@ -126,6 +126,7 @@ class EachScheduling(object):
if not pending:
pending[:] = range(len(self.node2collection[node]))
node.send_runtest_all()
node.shutdown()
else:
node.send_runtest_some(pending)
self._started.append(node)

View File

@@ -178,6 +178,9 @@ class LoadScheduling(object):
return
num_send = items_per_node_max - len(node_pending)
self._send_tests(node, num_send)
else:
node.shutdown()
self.log("num items waiting for node:", len(self.pending))
def remove_node(self, node):

View File

@@ -306,6 +306,7 @@ class LoadScopeScheduling(object):
# Check that more work is available
if not self.workqueue:
node.shutdown()
return
self.log("Number of units waiting for node:", len(self.workqueue))