Optimize collection performance
Only send failed collection reports, as master is only interested in failed reports. Fix #330
This commit is contained in:
1
changelog/330.feature.rst
Normal file
1
changelog/330.feature.rst
Normal file
@@ -0,0 +1 @@
|
||||
Improve collection performance by reducing the number of events sent to ``master`` node.
|
||||
@@ -321,8 +321,6 @@ class TestWorkerInteractor:
|
||||
assert not ev.kwargs
|
||||
ev = worker.popevent()
|
||||
assert ev.name == "collectreport"
|
||||
ev = worker.popevent()
|
||||
assert ev.name == "collectreport"
|
||||
rep = unserialize_report(ev.name, ev.kwargs["data"])
|
||||
assert rep.failed
|
||||
ev = worker.popevent("collectionfinish")
|
||||
|
||||
@@ -257,8 +257,12 @@ class DSession(object):
|
||||
self.sched.mark_test_complete(node, item_index, duration)
|
||||
|
||||
def worker_collectreport(self, node, rep):
|
||||
"""Emitted when a node calls the pytest_collectreport hook."""
|
||||
if rep.failed:
|
||||
"""Emitted when a node calls the pytest_collectreport hook.
|
||||
|
||||
Because we only need the report when there's a failure, as optimization
|
||||
we only expect to receive failed reports from workers (#330).
|
||||
"""
|
||||
assert rep.failed
|
||||
self._failed_worker_collectreport(node, rep)
|
||||
|
||||
def worker_logwarning(self, message, code, nodeid, fslocation):
|
||||
|
||||
@@ -109,6 +109,8 @@ class WorkerInteractor(object):
|
||||
self.sendevent("testreport", data=data)
|
||||
|
||||
def pytest_collectreport(self, report):
|
||||
# master only needs reports that failed, as optimization send only them instead (#330)
|
||||
if report.failed:
|
||||
data = serialize_report(report)
|
||||
self.sendevent("collectreport", data=data)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user