diff options
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 99 |
1 files changed, 43 insertions, 56 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index c6f45a345f..517684c3ff 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py @@ -1407,7 +1407,6 @@ class RunQueue: retval = True if self.state is runQueuePrepare: - self.rqexe = RunQueueExecuteDummy(self) # NOTE: if you add, remove or significantly refactor the stages of this # process then you should recalculate the weightings here. This is quite # easy to do - just change the next line temporarily to pass debug=True as @@ -1449,7 +1448,9 @@ class RunQueue: self.rqdata.init_progress_reporter.next_stage() self.start_worker() self.rqdata.init_progress_reporter.next_stage() - self.rqexe = RunQueueExecuteScenequeue(self) + if not self.rqexe: + self.rqexe = RunQueueExecute(self) + start_scenequeue_tasks(self.rqexe) if self.state is runQueueSceneRun: retval = self.rqexe.sq_execute() @@ -1461,7 +1462,9 @@ class RunQueue: # Just in case we didn't setscene self.rqdata.init_progress_reporter.finish() logger.info("Executing RunQueue Tasks") - self.rqexe = RunQueueExecuteTasks(self) + if not self.rqexe: + self.rqexe = RunQueueExecute(self) + start_runqueue_tasks(self.rqexe) self.state = runQueueRunning if self.state is runQueueRunning: @@ -1478,11 +1481,12 @@ class RunQueue: if build_done and self.rqexe: self.teardown_workers() - if self.rqexe.stats.failed: - logger.info("Tasks Summary: Attempted %d tasks of which %d didn't need to be rerun and %d failed.", self.rqexe.stats.completed + self.rqexe.stats.failed, self.rqexe.stats.skipped, self.rqexe.stats.failed) - else: - # Let's avoid the word "failed" if nothing actually did - logger.info("Tasks Summary: Attempted %d tasks of which %d didn't need to be rerun and all succeeded.", self.rqexe.stats.completed, self.rqexe.stats.skipped) + if self.rqexe: + if self.rqexe.stats.failed: + logger.info("Tasks Summary: Attempted %d tasks of which %d didn't need to be rerun and %d failed.", self.rqexe.stats.completed + self.rqexe.stats.failed, self.rqexe.stats.skipped, self.rqexe.stats.failed) + else: + # Let's avoid the word "failed" if nothing actually did + logger.info("Tasks Summary: Attempted %d tasks of which %d didn't need to be rerun and all succeeded.", self.rqexe.stats.completed, self.rqexe.stats.skipped) if self.state is runQueueFailed: raise bb.runqueue.TaskFailure(self.rqexe.failed_tids) @@ -2483,88 +2487,71 @@ def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq): logger.debug(2, 'No package found, so skipping setscene task %s', tid) sqdata.outrightfail.append(tid) - -class RunQueueExecuteDummy(RunQueueExecute): - def __init__(self, rq): - self.rq = rq - self.stats = RunQueueStats(0) - - def finish(self): - self.rq.state = runQueueComplete - return - -class RunQueueExecuteTasks(RunQueueExecute): - def __init__(self, rq): - RunQueueExecute.__init__(self, rq) - - self.stampcache = {} +def start_runqueue_tasks(rqexec): # Mark initial buildable tasks - for tid in self.rqdata.runtaskentries: - if len(self.rqdata.runtaskentries[tid].depends) == 0: - self.runq_buildable.add(tid) - if len(self.rqdata.runtaskentries[tid].revdeps) > 0 and self.rqdata.runtaskentries[tid].revdeps.issubset(self.rq.scenequeue_covered): - self.rq.scenequeue_covered.add(tid) + for tid in rqexec.rqdata.runtaskentries: + if len(rqexec.rqdata.runtaskentries[tid].depends) == 0: + rqexec.runq_buildable.add(tid) + if len(rqexec.rqdata.runtaskentries[tid].revdeps) > 0 and rqexec.rqdata.runtaskentries[tid].revdeps.issubset(rqexec.rq.scenequeue_covered): + rqexec.rq.scenequeue_covered.add(tid) found = True while found: found = False - for tid in self.rqdata.runtaskentries: - if tid in self.rq.scenequeue_covered: + for tid in rqexec.rqdata.runtaskentries: + if tid in rqexec.rq.scenequeue_covered: continue - logger.debug(1, 'Considering %s: %s' % (tid, str(self.rqdata.runtaskentries[tid].revdeps))) + logger.debug(1, 'Considering %s: %s' % (tid, str(rqexec.rqdata.runtaskentries[tid].revdeps))) - if len(self.rqdata.runtaskentries[tid].revdeps) > 0 and self.rqdata.runtaskentries[tid].revdeps.issubset(self.rq.scenequeue_covered): - if tid in self.rq.scenequeue_notcovered: + if len(rqexec.rqdata.runtaskentries[tid].revdeps) > 0 and rqexec.rqdata.runtaskentries[tid].revdeps.issubset(rqexec.rq.scenequeue_covered): + if tid in rqexec.rq.scenequeue_notcovered: continue found = True - self.rq.scenequeue_covered.add(tid) + rqexec.rq.scenequeue_covered.add(tid) - logger.debug(1, 'Skip list %s', sorted(self.rq.scenequeue_covered)) + logger.debug(1, 'Skip list %s', sorted(rqexec.rq.scenequeue_covered)) for task in self.rq.scenequeue_notcovered: logger.debug(1, 'Not skipping task %s', task) - for mc in self.rqdata.dataCaches: + for mc in rqexec.rqdata.dataCaches: target_pairs = [] - for tid in self.rqdata.target_tids: + for tid in rqexec.rqdata.target_tids: (tidmc, fn, taskname, _) = split_tid_mcfn(tid) if tidmc == mc: target_pairs.append((fn, taskname)) - event.fire(bb.event.StampUpdate(target_pairs, self.rqdata.dataCaches[mc].stamp), self.cfgData) + event.fire(bb.event.StampUpdate(target_pairs, rqexec.rqdata.dataCaches[mc].stamp), rqexec.cfgData) - schedulers = self.get_schedulers() + schedulers = rqexec.get_schedulers() for scheduler in schedulers: - if self.scheduler == scheduler.name: - self.sched = scheduler(self, self.rqdata) + if rqexec.scheduler == scheduler.name: + rqexec.sched = scheduler(rqexec, rqexec.rqdata) logger.debug(1, "Using runqueue scheduler '%s'", scheduler.name) break else: bb.fatal("Invalid scheduler '%s'. Available schedulers: %s" % - (self.scheduler, ", ".join(obj.name for obj in schedulers))) - -class RunQueueExecuteScenequeue(RunQueueExecute): - def __init__(self, rq): - RunQueueExecute.__init__(self, rq) + (rqexec.scheduler, ", ".join(obj.name for obj in schedulers))) - self.scenequeue_covered = set() - self.scenequeue_notcovered = set() - self.scenequeue_notneeded = set() +def start_scenequeue_tasks(rqexec): + rqexec.scenequeue_covered = set() + rqexec.scenequeue_notcovered = set() + rqexec.scenequeue_notneeded = set() # If we don't have any setscene functions, skip this step - if len(self.rqdata.runq_setscene_tids) == 0: - rq.scenequeue_covered = set() - rq.scenequeue_notcovered = set() - rq.state = runQueueRunInit + if len(rqexec.rqdata.runq_setscene_tids) == 0: + rqexec.rq.scenequeue_covered = set() + rqexec.rq.scenequeue_notcovered = set() + rqexec.rq.state = runQueueRunInit return - self.sqdata = SQData() - build_scenequeue_data(self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self) + rqexec.sqdata = SQData() + build_scenequeue_data(rqexec.sqdata, rqexec.rqdata, rqexec.rq, rqexec.cooker, rqexec.stampcache, rqexec) logger.info('Executing SetScene Tasks') - self.rq.state = runQueueSceneRun + rqexec.rq.state = runQueueSceneRun class TaskFailure(Exception): """ |