From 310a9e5d3564e9b07bb32e3d7b3cc94e32421968 Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Thu, 24 Nov 2016 11:19:52 +0000 Subject: bitbake: toaster: runbuilds Write the pidfile in python rather than shell script Write the pid file out in the start up of this management command. This ensures this has happened instead of relying on the shell command having been run which may or may not be the case. This also makes it simpler for testing. Couple of clean ups of runbuilds as identified by pyflake (Bitbake rev: 999e980ee1a58d16f33ef6c0e41aecdcd0206f39) Signed-off-by: Michael Wood Signed-off-by: Richard Purdie --- .../bldcontrol/management/commands/runbuilds.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'bitbake/lib/toaster/bldcontrol') diff --git a/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py b/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py index 7f7a5a9555..df11f9d162 100644 --- a/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py +++ b/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py @@ -11,9 +11,11 @@ from orm.models import Build, LogMessage, Target import logging import traceback import signal +import os logger = logging.getLogger("toaster") + class Command(NoArgsCommand): args = "" help = "Schedules and executes build requests as possible. "\ @@ -50,7 +52,7 @@ class Command(NoArgsCommand): logger.debug("runbuilds: No build env") return - logger.info("runbuilds: starting build %s, environment %s" % \ + logger.info("runbuilds: starting build %s, environment %s" % (br, bec.be)) # let the build request know where it is being executed @@ -80,7 +82,7 @@ class Command(NoArgsCommand): def archive(self): for br in BuildRequest.objects.filter(state=BuildRequest.REQ_ARCHIVE): - if br.build == None: + if br.build is None: br.state = BuildRequest.REQ_FAILED else: br.state = BuildRequest.REQ_COMPLETED @@ -99,10 +101,10 @@ class Command(NoArgsCommand): Q(updated__lt=timezone.now() - timedelta(seconds=30)) ).update(lock=BuildEnvironment.LOCK_FREE) - # update all Builds that were in progress and failed to start - for br in BuildRequest.objects.filter(state=BuildRequest.REQ_FAILED, - build__outcome=Build.IN_PROGRESS): + for br in BuildRequest.objects.filter( + state=BuildRequest.REQ_FAILED, + build__outcome=Build.IN_PROGRESS): # transpose the launch errors in ToasterExceptions br.build.outcome = Build.FAILED for brerror in br.brerror_set.all(): @@ -117,7 +119,6 @@ class Command(NoArgsCommand): br.environment.lock = BuildEnvironment.LOCK_FREE br.environment.save() - # update all BuildRequests without a build created for br in BuildRequest.objects.filter(build=None): br.build = Build.objects.create(project=br.project, @@ -144,7 +145,7 @@ class Command(NoArgsCommand): # Make sure the LOCK is removed for builds which have been fully # cancelled - for br in BuildRequest.objects.filter(\ + for br in BuildRequest.objects.filter( Q(build__outcome=Build.CANCELLED) & Q(state=BuildRequest.REQ_CANCELLING) & ~Q(environment=None)): @@ -168,6 +169,12 @@ class Command(NoArgsCommand): logger.warn("runbuilds: schedule exception %s" % str(e)) def handle_noargs(self, **options): + pidfile_path = os.path.join(os.environ.get("BUILDDIR", "."), + ".runbuilds.pid") + + with open(pidfile_path, 'w') as pidfile: + pidfile.write("%s" % os.getpid()) + self.runbuild() signal.signal(signal.SIGUSR1, lambda sig, frame: None) -- cgit v1.2.3-54-g00ecf