]> git.ipfire.org Git - people/jschlag/pbs.git/commitdiff
Allow jobs to be superseeded by each other
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 21 Oct 2017 13:32:20 +0000 (14:32 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 21 Oct 2017 13:32:20 +0000 (14:32 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/jobs.py

index ee6cad3cde4246ab27d7377d1b60f925a0cb0085..f60f44d2498a95fc2c9fddc346799329b512698d 100644 (file)
@@ -34,7 +34,7 @@ class Jobs(base.Object):
                for row in res:
                        yield Job(self.backend, row.id, data=row)
 
-       def create(self, build, arch, type="build"):
+       def create(self, build, arch, type="build", superseeds=None):
                job = self._get_job("INSERT INTO jobs(uuid, type, build_id, arch, time_created) \
                        VALUES(%s, %s, %s, %s, NOW()) RETURNING *", "%s" % uuid.uuid4(), type, build.id, arch)
                job.log("created")
@@ -42,6 +42,10 @@ class Jobs(base.Object):
                # Set cache for Build object.
                job.build = build
 
+               # Mark if the new job superseeds some other job
+               if superseeds:
+                       superseeds.superseeded_by = job
+
                # Jobs are by default in state "new" and wait for being checked
                # for dependencies. Packages that do have no build dependencies
                # can directly be forwarded to "pending" state.
@@ -234,6 +238,18 @@ class Job(base.DataObject):
        def distro(self):
                return self.build.distro
 
+       def get_superseeded_by(self):
+               if self.data.superseeded_by:
+                       return self.backend.jobs.get_by_id(self.data.superseeded_by)
+
+       def set_superseeded_by(self, superseeded_by):
+               assert isinstance(superseeded_by, self.__class__)
+
+               self._set_attribute("superseeded_by", superseeded_by.id)
+               self.superseeded_by = superseeded_by
+
+       superseeded_by = lazy_property(get_superseeded_by, set_superseeded_by)
+
        def delete(self):
                self.__delete_buildroots()
                self.__delete_history()