diff options
author | Alexandru DAMIAN <alexandru.damian@intel.com> | 2015-05-19 13:13:27 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-05-29 11:59:45 +0100 |
commit | 1b6a50c6b2857c7c21fe4287966f3babca71a142 (patch) | |
tree | b83d06d7e9e1aeb38cacc85a872c803ccf655147 | |
parent | 52fe880f9ec46c41d6afdfb275185768c0bb8db9 (diff) | |
download | poky-1b6a50c6b2857c7c21fe4287966f3babca71a142.tar.gz |
bitbake: toaster: refactor checksettings command
This patch refactors the checksetting command to prevent
early return from the handle function.
It also adds a check that marks IN PROGRESS builds at startup time
as FAILED. Minor changes to BuildRequest and Build classes
ensure useful string representation for the objects.
(Bitbake rev: adf67dd79dbf6b585bf8cd54f99c389409b88ecd)
Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py | 26 | ||||
-rw-r--r-- | bitbake/lib/toaster/bldcontrol/models.py | 3 | ||||
-rw-r--r-- | bitbake/lib/toaster/orm/models.py | 3 |
3 files changed, 30 insertions, 2 deletions
diff --git a/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py b/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py index 1ff5c92833..3c524464fa 100644 --- a/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py +++ b/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py | |||
@@ -2,7 +2,7 @@ from django.core.management.base import NoArgsCommand, CommandError | |||
2 | from django.db import transaction | 2 | from django.db import transaction |
3 | from bldcontrol.bbcontroller import getBuildEnvironmentController, ShellCmdException | 3 | from bldcontrol.bbcontroller import getBuildEnvironmentController, ShellCmdException |
4 | from bldcontrol.models import BuildRequest, BuildEnvironment, BRError | 4 | from bldcontrol.models import BuildRequest, BuildEnvironment, BRError |
5 | from orm.models import ToasterSetting | 5 | from orm.models import ToasterSetting, Build |
6 | import os | 6 | import os |
7 | 7 | ||
8 | def DN(path): | 8 | def DN(path): |
@@ -61,7 +61,7 @@ class Command(NoArgsCommand): | |||
61 | return DN(self._find_first_path_for_file(DN(self.guesspath), "bblayers.conf", 4)) | 61 | return DN(self._find_first_path_for_file(DN(self.guesspath), "bblayers.conf", 4)) |
62 | 62 | ||
63 | 63 | ||
64 | def handle(self, **options): | 64 | def _verify_artifact_storage_dir(self): |
65 | # verify that we have a settings for downloading artifacts | 65 | # verify that we have a settings for downloading artifacts |
66 | while ToasterSetting.objects.filter(name="ARTIFACTS_STORAGE_DIR").count() == 0: | 66 | while ToasterSetting.objects.filter(name="ARTIFACTS_STORAGE_DIR").count() == 0: |
67 | guessedpath = os.getcwd() + "/toaster_build_artifacts/" | 67 | guessedpath = os.getcwd() + "/toaster_build_artifacts/" |
@@ -78,7 +78,10 @@ class Command(NoArgsCommand): | |||
78 | else: | 78 | else: |
79 | raise ose | 79 | raise ose |
80 | ToasterSetting.objects.create(name="ARTIFACTS_STORAGE_DIR", value=artifacts_storage_dir) | 80 | ToasterSetting.objects.create(name="ARTIFACTS_STORAGE_DIR", value=artifacts_storage_dir) |
81 | return 0 | ||
82 | |||
81 | 83 | ||
84 | def _verify_build_environment(self): | ||
82 | self.guesspath = DN(DN(DN(DN(DN(DN(DN(__file__))))))) | 85 | self.guesspath = DN(DN(DN(DN(DN(DN(DN(__file__))))))) |
83 | # refuse to start if we have no build environments | 86 | # refuse to start if we have no build environments |
84 | while BuildEnvironment.objects.count() == 0: | 87 | while BuildEnvironment.objects.count() == 0: |
@@ -197,12 +200,16 @@ class Command(NoArgsCommand): | |||
197 | 200 | ||
198 | while (_verify_be()): | 201 | while (_verify_be()): |
199 | pass | 202 | pass |
203 | return 0 | ||
200 | 204 | ||
205 | def _verify_default_settings(self): | ||
201 | # verify that default settings are there | 206 | # verify that default settings are there |
202 | if ToasterSetting.objects.filter(name = 'DEFAULT_RELEASE').count() != 1: | 207 | if ToasterSetting.objects.filter(name = 'DEFAULT_RELEASE').count() != 1: |
203 | ToasterSetting.objects.filter(name = 'DEFAULT_RELEASE').delete() | 208 | ToasterSetting.objects.filter(name = 'DEFAULT_RELEASE').delete() |
204 | ToasterSetting.objects.get_or_create(name = 'DEFAULT_RELEASE', value = '') | 209 | ToasterSetting.objects.get_or_create(name = 'DEFAULT_RELEASE', value = '') |
210 | return 0 | ||
205 | 211 | ||
212 | def _verify_builds_in_progress(self): | ||
206 | # we are just starting up. we must not have any builds in progress, or build environments taken | 213 | # we are just starting up. we must not have any builds in progress, or build environments taken |
207 | for b in BuildRequest.objects.filter(state = BuildRequest.REQ_INPROGRESS): | 214 | for b in BuildRequest.objects.filter(state = BuildRequest.REQ_INPROGRESS): |
208 | BRError.objects.create(req = b, errtype = "toaster", errmsg = "Toaster found this build IN PROGRESS while Toaster started up. This is an inconsistent state, and the build was marked as failed") | 215 | BRError.objects.create(req = b, errtype = "toaster", errmsg = "Toaster found this build IN PROGRESS while Toaster started up. This is an inconsistent state, and the build was marked as failed") |
@@ -211,4 +218,19 @@ class Command(NoArgsCommand): | |||
211 | 218 | ||
212 | BuildEnvironment.objects.update(lock = BuildEnvironment.LOCK_FREE) | 219 | BuildEnvironment.objects.update(lock = BuildEnvironment.LOCK_FREE) |
213 | 220 | ||
221 | # also mark "In Progress builds as failures" | ||
222 | from django.utils import timezone | ||
223 | Build.objects.filter(outcome = Build.IN_PROGRESS).update(outcome = Build.FAILED, completed_on = timezone.now()) | ||
224 | |||
214 | return 0 | 225 | return 0 |
226 | |||
227 | |||
228 | |||
229 | def handle(self, **options): | ||
230 | retval = 0 | ||
231 | retval += self._verify_artifact_storage_dir() | ||
232 | retval += self._verify_build_environment() | ||
233 | retval += self._verify_default_settings() | ||
234 | retval += self._verify_builds_in_progress() | ||
235 | |||
236 | return retval | ||
diff --git a/bitbake/lib/toaster/bldcontrol/models.py b/bitbake/lib/toaster/bldcontrol/models.py index 02cfaf7086..b789446fa1 100644 --- a/bitbake/lib/toaster/bldcontrol/models.py +++ b/bitbake/lib/toaster/bldcontrol/models.py | |||
@@ -125,6 +125,9 @@ class BuildRequest(models.Model): | |||
125 | def get_machine(self): | 125 | def get_machine(self): |
126 | return self.brvariable_set.get(name="MACHINE").value | 126 | return self.brvariable_set.get(name="MACHINE").value |
127 | 127 | ||
128 | def __str__(self): | ||
129 | return "%s %s" % (self.project, self.get_state_display()) | ||
130 | |||
128 | # These tables specify the settings for running an actual build. | 131 | # These tables specify the settings for running an actual build. |
129 | # They MUST be kept in sync with the tables in orm.models.Project* | 132 | # They MUST be kept in sync with the tables in orm.models.Project* |
130 | 133 | ||
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py index fb62a55d71..8a9a21eeee 100644 --- a/bitbake/lib/toaster/orm/models.py +++ b/bitbake/lib/toaster/orm/models.py | |||
@@ -267,6 +267,9 @@ class Build(models.Model): | |||
267 | def toaster_exceptions(self): | 267 | def toaster_exceptions(self): |
268 | return self.logmessage_set.filter(level=LogMessage.EXCEPTION) | 268 | return self.logmessage_set.filter(level=LogMessage.EXCEPTION) |
269 | 269 | ||
270 | def __str__(self): | ||
271 | return "%d %s %s" % (self.id, self.project, ",".join([t.target for t in self.target_set.all()])) | ||
272 | |||
270 | 273 | ||
271 | # an Artifact is anything that results from a Build, and may be of interest to the user, and is not stored elsewhere | 274 | # an Artifact is anything that results from a Build, and may be of interest to the user, and is not stored elsewhere |
272 | class BuildArtifact(models.Model): | 275 | class BuildArtifact(models.Model): |