bitbake: runqueue: Batch scenequeue updates

Batch all updates to scenequeue data together in a single invocation
instead of checking each task serially. This allows the checks for
sstate object to happen in parallel, and also makes sure the log
statement only happens once (per set of rehashes).

(Bitbake rev: db033a8f8a276d864bdb2e1eef159ab5794a0658)

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Joshua Watt
2019-12-11 16:16:29 -06:00
committed by Richard Purdie
parent c59afbae72
commit b3771bded2

View File

@@ -2320,6 +2320,7 @@ class RunQueueExecute:
if tid not in self.pending_migrations:
self.pending_migrations.add(tid)
update_tasks = []
for tid in self.pending_migrations.copy():
if tid in self.runq_running or tid in self.sq_live:
# Too late, task already running, not much we can do now
@@ -2379,11 +2380,13 @@ class RunQueueExecute:
if tid in self.build_stamps:
del self.build_stamps[tid]
origvalid = False
if tid in self.sqdata.valid:
origvalid = True
update_tasks.append((tid, harddepfail, tid in self.sqdata.valid))
if update_tasks:
self.sqdone = False
update_scenequeue_data([tid], self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self, summary=False)
update_scenequeue_data([t[0] for t in update_tasks], self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self, summary=False)
for (tid, harddepfail, origvalid) in update_tasks:
if tid in self.sqdata.valid and not origvalid:
logger.info("Setscene task %s became valid" % tid)
if harddepfail: