mirror of
https://git.yoctoproject.org/poky
synced 2026-07-17 04:07:06 +00:00
bitbake: runqueue: use enum to represent runQueue state to improve readability
(Bitbake rev: e61265570f5415d647666891d806836437330219) Signed-off-by: Chris Laplante <chris.laplante@agilent.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
f4a8ddd6c8
commit
6083700993
+46
-44
@@ -10,6 +10,7 @@ Handles preparation and execution of a queue of tasks
|
||||
#
|
||||
|
||||
import copy
|
||||
import enum
|
||||
import os
|
||||
import sys
|
||||
import stat
|
||||
@@ -125,15 +126,16 @@ class RunQueueStats:
|
||||
def updateActiveSetscene(self, active):
|
||||
self.setscene_active = active
|
||||
|
||||
# These values indicate the next step due to be run in the
|
||||
# runQueue state machine
|
||||
runQueuePrepare = 2
|
||||
runQueueSceneInit = 3
|
||||
runQueueDumpSigs = 4
|
||||
runQueueRunning = 6
|
||||
runQueueFailed = 7
|
||||
runQueueCleanUp = 8
|
||||
runQueueComplete = 9
|
||||
|
||||
# Indicates the next step due to run in the runQueue state machine
|
||||
class RunQueueState(enum.Enum):
|
||||
PREPARE = 0
|
||||
SCENE_INIT = 1
|
||||
DUMP_SIGS = 2
|
||||
RUNNING = 3
|
||||
FAILED = 4
|
||||
CLEAN_UP = 5
|
||||
COMPLETE = 6
|
||||
|
||||
class RunQueueScheduler(object):
|
||||
"""
|
||||
@@ -1337,13 +1339,13 @@ class RunQueue:
|
||||
self.hashvalidate = cfgData.getVar("BB_HASHCHECK_FUNCTION") or None
|
||||
self.depvalidate = cfgData.getVar("BB_SETSCENE_DEPVALID") or None
|
||||
|
||||
self.state = runQueuePrepare
|
||||
self.state = RunQueueState.PREPARE
|
||||
|
||||
# For disk space monitor
|
||||
# Invoked at regular time intervals via the bitbake heartbeat event
|
||||
# while the build is running. We generate a unique name for the handler
|
||||
# here, just in case that there ever is more than one RunQueue instance,
|
||||
# start the handler when reaching runQueueSceneInit, and stop it when
|
||||
# start the handler when reaching RunQueueState.SCENE_INIT, and stop it when
|
||||
# done with the build.
|
||||
self.dm = monitordisk.diskMonitor(cfgData)
|
||||
self.dm_event_handler_name = '_bb_diskmonitor_' + str(id(self))
|
||||
@@ -1557,7 +1559,7 @@ class RunQueue:
|
||||
retval = True
|
||||
bb.event.check_for_interrupts()
|
||||
|
||||
if self.state is runQueuePrepare:
|
||||
if self.state == RunQueueState.PREPARE:
|
||||
# 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
|
||||
@@ -1568,12 +1570,12 @@ class RunQueue:
|
||||
"Initialising tasks",
|
||||
[43, 967, 4, 3, 1, 5, 3, 7, 13, 1, 2, 1, 1, 246, 35, 1, 38, 1, 35, 2, 338, 204, 142, 3, 3, 37, 244])
|
||||
if self.rqdata.prepare() == 0:
|
||||
self.state = runQueueComplete
|
||||
self.state = RunQueueState.COMPLETE
|
||||
else:
|
||||
self.state = runQueueSceneInit
|
||||
self.state = RunQueueState.SCENE_INIT
|
||||
bb.parse.siggen.save_unitaskhashes()
|
||||
|
||||
if self.state is runQueueSceneInit:
|
||||
if self.state == RunQueueState.SCENE_INIT:
|
||||
self.rqdata.init_progress_reporter.next_stage()
|
||||
|
||||
# we are ready to run, emit dependency info to any UI or class which
|
||||
@@ -1584,7 +1586,7 @@ class RunQueue:
|
||||
|
||||
if not self.dm_event_handler_registered:
|
||||
res = bb.event.register(self.dm_event_handler_name,
|
||||
lambda x, y: self.dm.check(self) if self.state in [runQueueRunning, runQueueCleanUp] else False,
|
||||
lambda x, y: self.dm.check(self) if self.state in [RunQueueState.RUNNING, RunQueueState.CLEAN_UP] else False,
|
||||
('bb.event.HeartbeatEvent',), data=self.cfgData)
|
||||
self.dm_event_handler_registered = True
|
||||
|
||||
@@ -1596,17 +1598,17 @@ class RunQueue:
|
||||
self.rqdata.init_progress_reporter.finish()
|
||||
if 'printdiff' in dumpsigs:
|
||||
self.invalidtasks_dump = self.print_diffscenetasks()
|
||||
self.state = runQueueDumpSigs
|
||||
self.state = RunQueueState.DUMP_SIGS
|
||||
|
||||
if self.state is runQueueDumpSigs:
|
||||
if self.state == RunQueueState.DUMP_SIGS:
|
||||
dumpsigs = self.cooker.configuration.dump_signatures
|
||||
retval = self.dump_signatures(dumpsigs)
|
||||
if retval is False:
|
||||
if 'printdiff' in dumpsigs:
|
||||
self.write_diffscenetasks(self.invalidtasks_dump)
|
||||
self.state = runQueueComplete
|
||||
self.state = RunQueueState.COMPLETE
|
||||
|
||||
if self.state is runQueueSceneInit:
|
||||
if self.state == RunQueueState.SCENE_INIT:
|
||||
self.start_worker(self.rqexe)
|
||||
self.rqdata.init_progress_reporter.finish()
|
||||
|
||||
@@ -1619,15 +1621,15 @@ class RunQueue:
|
||||
self.rqexe.tasks_notcovered.add(tid)
|
||||
self.rqexe.sqdone = True
|
||||
logger.info('Executing Tasks')
|
||||
self.state = runQueueRunning
|
||||
self.state = RunQueueState.RUNNING
|
||||
|
||||
if self.state is runQueueRunning:
|
||||
if self.state == RunQueueState.RUNNING:
|
||||
retval = self.rqexe.execute()
|
||||
|
||||
if self.state is runQueueCleanUp:
|
||||
if self.state == RunQueueState.CLEAN_UP:
|
||||
retval = self.rqexe.finish()
|
||||
|
||||
build_done = self.state is runQueueComplete or self.state is runQueueFailed
|
||||
build_done = self.state in [RunQueueState.COMPLETE, RunQueueState.FAILED]
|
||||
|
||||
if build_done and self.dm_event_handler_registered:
|
||||
bb.event.remove(self.dm_event_handler_name, None, data=self.cfgData)
|
||||
@@ -1643,10 +1645,10 @@ class RunQueue:
|
||||
# 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:
|
||||
if self.state == RunQueueState.FAILED:
|
||||
raise bb.runqueue.TaskFailure(self.rqexe.failed_tids)
|
||||
|
||||
if self.state is runQueueComplete:
|
||||
if self.state == RunQueueState.COMPLETE:
|
||||
# All done
|
||||
return False
|
||||
|
||||
@@ -1666,7 +1668,7 @@ class RunQueue:
|
||||
self.teardown_workers()
|
||||
except:
|
||||
pass
|
||||
self.state = runQueueComplete
|
||||
self.state = RunQueueState.COMPLETE
|
||||
raise
|
||||
except Exception as err:
|
||||
logger.exception("An uncaught exception occurred in runqueue")
|
||||
@@ -1674,12 +1676,12 @@ class RunQueue:
|
||||
self.teardown_workers()
|
||||
except:
|
||||
pass
|
||||
self.state = runQueueComplete
|
||||
self.state = RunQueueState.COMPLETE
|
||||
raise
|
||||
|
||||
def finish_runqueue(self, now = False):
|
||||
if not self.rqexe:
|
||||
self.state = runQueueComplete
|
||||
self.state = RunQueueState.COMPLETE
|
||||
return
|
||||
|
||||
if now:
|
||||
@@ -2002,14 +2004,14 @@ class RunQueueExecute:
|
||||
pass
|
||||
|
||||
if self.failed_tids:
|
||||
self.rq.state = runQueueFailed
|
||||
self.rq.state = RunQueueState.FAILED
|
||||
return
|
||||
|
||||
self.rq.state = runQueueComplete
|
||||
self.rq.state = RunQueueState.COMPLETE
|
||||
return
|
||||
|
||||
def finish(self):
|
||||
self.rq.state = runQueueCleanUp
|
||||
self.rq.state = RunQueueState.CLEAN_UP
|
||||
|
||||
active = self.stats.active + len(self.sq_live)
|
||||
if active > 0:
|
||||
@@ -2018,10 +2020,10 @@ class RunQueueExecute:
|
||||
return self.rq.active_fds()
|
||||
|
||||
if self.failed_tids:
|
||||
self.rq.state = runQueueFailed
|
||||
self.rq.state = RunQueueState.FAILED
|
||||
return True
|
||||
|
||||
self.rq.state = runQueueComplete
|
||||
self.rq.state = RunQueueState.COMPLETE
|
||||
return True
|
||||
|
||||
# Used by setscene only
|
||||
@@ -2140,7 +2142,7 @@ class RunQueueExecute:
|
||||
bb.event.fire(runQueueTaskFailed(task, self.stats, exitcode, self.rq, fakeroot_log=("".join(fakeroot_log) or None)), self.cfgData)
|
||||
|
||||
if self.rqdata.taskData[''].halt:
|
||||
self.rq.state = runQueueCleanUp
|
||||
self.rq.state = RunQueueState.CLEAN_UP
|
||||
|
||||
def task_skip(self, task, reason):
|
||||
self.runq_running.add(task)
|
||||
@@ -2334,17 +2336,17 @@ class RunQueueExecute:
|
||||
|
||||
err = self.summarise_scenequeue_errors()
|
||||
if err:
|
||||
self.rq.state = runQueueFailed
|
||||
self.rq.state = RunQueueState.FAILED
|
||||
return True
|
||||
|
||||
if self.cooker.configuration.setsceneonly:
|
||||
self.rq.state = runQueueComplete
|
||||
self.rq.state = RunQueueState.COMPLETE
|
||||
return True
|
||||
self.sqdone = True
|
||||
|
||||
if self.stats.total == 0:
|
||||
# nothing to do
|
||||
self.rq.state = runQueueComplete
|
||||
self.rq.state = RunQueueState.COMPLETE
|
||||
return True
|
||||
|
||||
if self.cooker.configuration.setsceneonly:
|
||||
@@ -2411,7 +2413,7 @@ class RunQueueExecute:
|
||||
self.rq.start_fakeworker(self, mc)
|
||||
except OSError as exc:
|
||||
logger.critical("Failed to spawn fakeroot worker to run %s: %s" % (task, str(exc)))
|
||||
self.rq.state = runQueueFailed
|
||||
self.rq.state = RunQueueState.FAILED
|
||||
self.stats.taskFailed()
|
||||
return True
|
||||
RunQueue.send_pickled_data(self.rq.fakeworker[mc].process, runtask, "runtask")
|
||||
@@ -2439,7 +2441,7 @@ class RunQueueExecute:
|
||||
return True
|
||||
|
||||
if self.failed_tids:
|
||||
self.rq.state = runQueueFailed
|
||||
self.rq.state = RunQueueState.FAILED
|
||||
return True
|
||||
|
||||
# Sanity Checks
|
||||
@@ -2456,9 +2458,9 @@ class RunQueueExecute:
|
||||
err = True
|
||||
|
||||
if err:
|
||||
self.rq.state = runQueueFailed
|
||||
self.rq.state = RunQueueState.FAILED
|
||||
else:
|
||||
self.rq.state = runQueueComplete
|
||||
self.rq.state = RunQueueState.COMPLETE
|
||||
|
||||
return True
|
||||
|
||||
@@ -2688,7 +2690,7 @@ class RunQueueExecute:
|
||||
if dep in self.runq_complete and dep not in self.runq_tasksrun:
|
||||
bb.error("Task %s marked as completed but now needing to rerun? Halting build." % dep)
|
||||
self.failed_tids.append(tid)
|
||||
self.rq.state = runQueueCleanUp
|
||||
self.rq.state = RunQueueState.CLEAN_UP
|
||||
return
|
||||
|
||||
if dep not in self.runq_complete:
|
||||
@@ -2823,7 +2825,7 @@ class RunQueueExecute:
|
||||
pn = self.rqdata.dataCaches[mc].pkg_fn[taskfn]
|
||||
if not check_setscene_enforce_ignore_tasks(pn, taskname, self.rqdata.setscene_ignore_tasks):
|
||||
logger.error('Task %s.%s failed' % (pn, taskname + "_setscene"))
|
||||
self.rq.state = runQueueCleanUp
|
||||
self.rq.state = RunQueueState.CLEAN_UP
|
||||
|
||||
def sq_task_complete(self, task):
|
||||
bb.event.fire(sceneQueueTaskCompleted(task, self.stats, self.rq), self.cfgData)
|
||||
|
||||
Reference in New Issue
Block a user