[RFC][PATCH v2 2/4] sstate: store the tasklist in a LockedSet
Jose Quaresma
With this aproach the progress bar will be independent
of the ThreadedPool. Fixes [YOCTO #14775] -- https://bugzilla.yoctoproject.org/show_bug.cgi?id=14775 Signed-off-by: Jose Quaresma <quaresma.jose@...> --- meta/classes/sstate.bbclass | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass index a3ba748a1e..b9e9ef8e26 100644 --- a/meta/classes/sstate.bbclass +++ b/meta/classes/sstate.bbclass @@ -1026,29 +1026,31 @@ def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True, bb.error("SState: cannot test %s: %s\n%s" % (srcuri, repr(e), traceback.format_exc())) if progress: - bb.event.fire(bb.event.ProcessProgress(msg, len(tasklist) - thread_worker.tasks.qsize()), d) + tasks.remove(arg) + bb.event.fire(bb.event.ProcessProgress(msg, total_tasks - len(tasks)), d) - tasklist = [] + tasks = LockedSet() for tid in missed: sstatefile = d.expand(getsstatefile(tid, siginfo, d)) - tasklist.append((tid, sstatefile)) + tasks.add((tid, sstatefile)) - if tasklist: - nproc = min(int(d.getVar("BB_NUMBER_THREADS")), len(tasklist)) + total_tasks = len(tasks) + if total_tasks: + nproc = min(int(d.getVar("BB_NUMBER_THREADS")), total_tasks) - progress = len(tasklist) >= 100 + progress = total_tasks >= 100 if progress: msg = "Checking sstate mirror object availability" - bb.event.fire(bb.event.ProcessStarted(msg, len(tasklist)), d) + bb.event.fire(bb.event.ProcessStarted(msg, total_tasks), d) # Have to setup the fetcher environment here rather than in each thread as it would race fetcherenv = bb.fetch2.get_fetcher_environment(d) with bb.utils.environment(**fetcherenv): bb.event.enable_threadlock() - pool = oe.utils.ThreadedPool(nproc, len(tasklist), + pool = oe.utils.ThreadedPool(nproc, total_tasks, worker_init=checkstatus_init, worker_end=checkstatus_end, name="sstate_checkhashes-") - for t in tasklist: + for t in tasks: pool.add_task(checkstatus, t) pool.start() pool.wait_completion() -- 2.35.3
|
|