summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py')
-rw-r--r--bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py21
1 files changed, 14 insertions, 7 deletions
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
11import logging 11import logging
12import traceback 12import traceback
13import signal 13import signal
14import os
14 15
15logger = logging.getLogger("toaster") 16logger = logging.getLogger("toaster")
16 17
18
17class Command(NoArgsCommand): 19class Command(NoArgsCommand):
18 args = "" 20 args = ""
19 help = "Schedules and executes build requests as possible. "\ 21 help = "Schedules and executes build requests as possible. "\
@@ -50,7 +52,7 @@ class Command(NoArgsCommand):
50 logger.debug("runbuilds: No build env") 52 logger.debug("runbuilds: No build env")
51 return 53 return
52 54
53 logger.info("runbuilds: starting build %s, environment %s" % \ 55 logger.info("runbuilds: starting build %s, environment %s" %
54 (br, bec.be)) 56 (br, bec.be))
55 57
56 # let the build request know where it is being executed 58 # let the build request know where it is being executed
@@ -80,7 +82,7 @@ class Command(NoArgsCommand):
80 82
81 def archive(self): 83 def archive(self):
82 for br in BuildRequest.objects.filter(state=BuildRequest.REQ_ARCHIVE): 84 for br in BuildRequest.objects.filter(state=BuildRequest.REQ_ARCHIVE):
83 if br.build == None: 85 if br.build is None:
84 br.state = BuildRequest.REQ_FAILED 86 br.state = BuildRequest.REQ_FAILED
85 else: 87 else:
86 br.state = BuildRequest.REQ_COMPLETED 88 br.state = BuildRequest.REQ_COMPLETED
@@ -99,10 +101,10 @@ class Command(NoArgsCommand):
99 Q(updated__lt=timezone.now() - timedelta(seconds=30)) 101 Q(updated__lt=timezone.now() - timedelta(seconds=30))
100 ).update(lock=BuildEnvironment.LOCK_FREE) 102 ).update(lock=BuildEnvironment.LOCK_FREE)
101 103
102
103 # update all Builds that were in progress and failed to start 104 # update all Builds that were in progress and failed to start
104 for br in BuildRequest.objects.filter(state=BuildRequest.REQ_FAILED, 105 for br in BuildRequest.objects.filter(
105 build__outcome=Build.IN_PROGRESS): 106 state=BuildRequest.REQ_FAILED,
107 build__outcome=Build.IN_PROGRESS):
106 # transpose the launch errors in ToasterExceptions 108 # transpose the launch errors in ToasterExceptions
107 br.build.outcome = Build.FAILED 109 br.build.outcome = Build.FAILED
108 for brerror in br.brerror_set.all(): 110 for brerror in br.brerror_set.all():
@@ -117,7 +119,6 @@ class Command(NoArgsCommand):
117 br.environment.lock = BuildEnvironment.LOCK_FREE 119 br.environment.lock = BuildEnvironment.LOCK_FREE
118 br.environment.save() 120 br.environment.save()
119 121
120
121 # update all BuildRequests without a build created 122 # update all BuildRequests without a build created
122 for br in BuildRequest.objects.filter(build=None): 123 for br in BuildRequest.objects.filter(build=None):
123 br.build = Build.objects.create(project=br.project, 124 br.build = Build.objects.create(project=br.project,
@@ -144,7 +145,7 @@ class Command(NoArgsCommand):
144 145
145 # Make sure the LOCK is removed for builds which have been fully 146 # Make sure the LOCK is removed for builds which have been fully
146 # cancelled 147 # cancelled
147 for br in BuildRequest.objects.filter(\ 148 for br in BuildRequest.objects.filter(
148 Q(build__outcome=Build.CANCELLED) & 149 Q(build__outcome=Build.CANCELLED) &
149 Q(state=BuildRequest.REQ_CANCELLING) & 150 Q(state=BuildRequest.REQ_CANCELLING) &
150 ~Q(environment=None)): 151 ~Q(environment=None)):
@@ -168,6 +169,12 @@ class Command(NoArgsCommand):
168 logger.warn("runbuilds: schedule exception %s" % str(e)) 169 logger.warn("runbuilds: schedule exception %s" % str(e))
169 170
170 def handle_noargs(self, **options): 171 def handle_noargs(self, **options):
172 pidfile_path = os.path.join(os.environ.get("BUILDDIR", "."),
173 ".runbuilds.pid")
174
175 with open(pidfile_path, 'w') as pidfile:
176 pidfile.write("%s" % os.getpid())
177
171 self.runbuild() 178 self.runbuild()
172 179
173 signal.signal(signal.SIGUSR1, lambda sig, frame: None) 180 signal.signal(signal.SIGUSR1, lambda sig, frame: None)