diff options
| -rw-r--r-- | bitbake/lib/toaster/bldcontrol/migrations/0003_add_cancelling_state.py | 19 | ||||
| -rw-r--r-- | bitbake/lib/toaster/bldcontrol/models.py | 27 |
2 files changed, 45 insertions, 1 deletions
diff --git a/bitbake/lib/toaster/bldcontrol/migrations/0003_add_cancelling_state.py b/bitbake/lib/toaster/bldcontrol/migrations/0003_add_cancelling_state.py new file mode 100644 index 0000000000..eec9216ca3 --- /dev/null +++ b/bitbake/lib/toaster/bldcontrol/migrations/0003_add_cancelling_state.py | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | # -*- coding: utf-8 -*- | ||
| 2 | from __future__ import unicode_literals | ||
| 3 | |||
| 4 | from django.db import migrations, models | ||
| 5 | |||
| 6 | |||
| 7 | class Migration(migrations.Migration): | ||
| 8 | |||
| 9 | dependencies = [ | ||
| 10 | ('bldcontrol', '0002_auto_20160120_1250'), | ||
| 11 | ] | ||
| 12 | |||
| 13 | operations = [ | ||
| 14 | migrations.AlterField( | ||
| 15 | model_name='buildrequest', | ||
| 16 | name='state', | ||
| 17 | field=models.IntegerField(default=0, choices=[(0, b'created'), (1, b'queued'), (2, b'in progress'), (3, b'completed'), (4, b'failed'), (5, b'deleted'), (6, b'cancelling'), (7, b'archive')]), | ||
| 18 | ), | ||
| 19 | ] | ||
diff --git a/bitbake/lib/toaster/bldcontrol/models.py b/bitbake/lib/toaster/bldcontrol/models.py index 9b2d0d0b24..cb49a58c45 100644 --- a/bitbake/lib/toaster/bldcontrol/models.py +++ b/bitbake/lib/toaster/bldcontrol/models.py | |||
| @@ -4,6 +4,8 @@ from django.core.validators import MaxValueValidator, MinValueValidator | |||
| 4 | from django.utils.encoding import force_bytes | 4 | from django.utils.encoding import force_bytes |
| 5 | from orm.models import Project, ProjectLayer, ProjectVariable, ProjectTarget, Build, Layer_Version | 5 | from orm.models import Project, ProjectLayer, ProjectVariable, ProjectTarget, Build, Layer_Version |
| 6 | 6 | ||
| 7 | import logging | ||
| 8 | logger = logging.getLogger("toaster") | ||
| 7 | # a BuildEnvironment is the equivalent of the "build/" directory on the localhost | 9 | # a BuildEnvironment is the equivalent of the "build/" directory on the localhost |
| 8 | class BuildEnvironment(models.Model): | 10 | class BuildEnvironment(models.Model): |
| 9 | SERVER_STOPPED = 0 | 11 | SERVER_STOPPED = 0 |
| @@ -64,7 +66,8 @@ class BuildRequest(models.Model): | |||
| 64 | REQ_COMPLETED = 3 | 66 | REQ_COMPLETED = 3 |
| 65 | REQ_FAILED = 4 | 67 | REQ_FAILED = 4 |
| 66 | REQ_DELETED = 5 | 68 | REQ_DELETED = 5 |
| 67 | REQ_ARCHIVE = 6 | 69 | REQ_CANCELLING = 6 |
| 70 | REQ_ARCHIVE = 7 | ||
| 68 | 71 | ||
| 69 | REQUEST_STATE = ( | 72 | REQUEST_STATE = ( |
| 70 | (REQ_CREATED, "created"), | 73 | (REQ_CREATED, "created"), |
| @@ -73,6 +76,7 @@ class BuildRequest(models.Model): | |||
| 73 | (REQ_COMPLETED, "completed"), | 76 | (REQ_COMPLETED, "completed"), |
| 74 | (REQ_FAILED, "failed"), | 77 | (REQ_FAILED, "failed"), |
| 75 | (REQ_DELETED, "deleted"), | 78 | (REQ_DELETED, "deleted"), |
| 79 | (REQ_CANCELLING, "cancelling"), | ||
| 76 | (REQ_ARCHIVE, "archive"), | 80 | (REQ_ARCHIVE, "archive"), |
| 77 | ) | 81 | ) |
| 78 | 82 | ||
| @@ -85,6 +89,27 @@ class BuildRequest(models.Model): | |||
| 85 | created = models.DateTimeField(auto_now_add = True) | 89 | created = models.DateTimeField(auto_now_add = True) |
| 86 | updated = models.DateTimeField(auto_now = True) | 90 | updated = models.DateTimeField(auto_now = True) |
| 87 | 91 | ||
| 92 | def __init__(self, *args, **kwargs): | ||
| 93 | super(BuildRequest, self).__init__(*args, **kwargs) | ||
| 94 | # Save the old state incase it's about to be modified | ||
| 95 | self.old_state = self.state | ||
| 96 | |||
| 97 | def save(self, *args, **kwargs): | ||
| 98 | # Check that the state we're trying to set is not going backwards | ||
| 99 | # e.g. from REQ_FAILED to REQ_INPROGRESS | ||
| 100 | if self.old_state != self.state and self.old_state > self.state: | ||
| 101 | logger.warn("Invalid state change requested: " | ||
| 102 | "Cannot go from %s to %s - ignoring request" % | ||
| 103 | (BuildRequest.REQUEST_STATE[self.old_state][1], | ||
| 104 | BuildRequest.REQUEST_STATE[self.state][1]) | ||
| 105 | ) | ||
| 106 | # Set property back to the old value | ||
| 107 | self.state = self.old_state | ||
| 108 | return | ||
| 109 | |||
| 110 | super(BuildRequest, self).save(*args, **kwargs) | ||
| 111 | |||
| 112 | |||
| 88 | def get_duration(self): | 113 | def get_duration(self): |
| 89 | return (self.updated - self.created).total_seconds() | 114 | return (self.updated - self.created).total_seconds() |
| 90 | 115 | ||
