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:
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user