]> git.ipfire.org Git - pbs.git/commitdiff
jobs: Implement deleting a job
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 17 Oct 2022 16:54:51 +0000 (16:54 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 17 Oct 2022 16:54:51 +0000 (16:54 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/jobs.py
src/database.sql

index 0d19f8c495df0c65a4609f77d7f05d1226f1624f..ad03cc92532048548a7de8087f613369bab65c62 100644 (file)
@@ -299,33 +299,20 @@ class Job(base.DataObject):
        def message(self):
                return self.data.message
 
-       def delete(self):
+       def delete(self, user=None):
                """
-                       Deletes a job from the database
+                       Deletes a job
                """
-               return # XXX DISABLE FOR NOW
-
-               # Remove the buildroot
-               self.db.execute("DELETE FROM jobs_buildroots WHERE job_id = %s", self.id)
-
-               # Remove the history
-               self.db.execute("DELETE FROM jobs_history WHERE job_id = %s", self.id)
-
-               # Delete all packages
-               for pkg in self:
-                       self.db.execute("DELETE FROM jobs_packages \
-                               WHERE job_id = %s AND pkg_id = %s", self.id, pkg.id)
+               # Delete all binary packages
+               for pkg in self.packages:
                        pkg.delete()
 
-               # Remove all logfiles
-               for logfile in self.logfiles:
-                       path = self.backend.path("packages", logfile.path)
-                       self.backend.delete_file(path)
-
-               self.db.execute("DELETE FROM logfiles WHERE job_id = %s", self.id)
+               # Mark as deleted
+               self._set_attribute_now("deleted_at")
+               if user:
+                       self._set_attribute("deleted_by", user)
 
-               # Delete the job itself.
-               self.db.execute("DELETE FROM jobs WHERE id = %s", self.id)
+               # XXX DELETE THE LOGFILE
 
        def clone(self):
                """
index 3af804cf73ccfd924fb2344019e5782f081d07e8..c50109668b582823ad9b67458db4eb7f11018bc5 100644 (file)
@@ -361,11 +361,12 @@ CREATE TABLE public.jobs (
     superseeded_by integer,
     depcheck_succeeded boolean,
     depcheck_performed_at timestamp without time zone,
-    deleted boolean DEFAULT false NOT NULL,
     failed boolean DEFAULT false NOT NULL,
     log_path text,
     log_size bigint,
-    log_digest_blake2s bytea
+    log_digest_blake2s bytea,
+    deleted_at timestamp without time zone,
+    deleted_by integer
 );
 
 
@@ -379,7 +380,7 @@ CREATE VIEW public.job_queue AS
     jobs.arch
    FROM (public.jobs
      LEFT JOIN public.builds ON ((jobs.build_id = builds.id)))
-  WHERE ((jobs.deleted IS FALSE) AND (jobs.started_at IS NULL) AND (jobs.finished_at IS NULL) AND (jobs.depcheck_succeeded IS TRUE));
+  WHERE ((jobs.deleted_at IS NULL) AND (jobs.started_at IS NULL) AND (jobs.finished_at IS NULL) AND (jobs.depcheck_succeeded IS TRUE));
 
 
 --
@@ -665,7 +666,7 @@ CREATE VIEW public.package_estimated_build_times AS
    FROM ((public.jobs
      LEFT JOIN public.builds ON ((jobs.build_id = builds.id)))
      LEFT JOIN public.packages ON ((builds.pkg_id = packages.id)))
-  WHERE ((jobs.deleted IS FALSE) AND (jobs.started_at IS NOT NULL) AND (jobs.finished_at IS NOT NULL) AND (jobs.failed IS FALSE) AND (jobs.test IS FALSE))
+  WHERE ((jobs.deleted_at IS NULL) AND (jobs.started_at IS NOT NULL) AND (jobs.finished_at IS NOT NULL) AND (jobs.failed IS FALSE) AND (jobs.test IS FALSE))
   GROUP BY packages.name, jobs.arch;
 
 
@@ -1028,7 +1029,7 @@ CREATE VIEW public.user_disk_usages AS
             jobs.log_size
            FROM (public.jobs
              LEFT JOIN public.builds ON ((builds.id = jobs.build_id)))
-          WHERE ((builds.deleted_at IS NULL) AND (jobs.deleted IS FALSE) AND (builds.owner_id IS NOT NULL) AND (jobs.log_size IS NOT NULL))
+          WHERE ((builds.deleted_at IS NULL) AND (jobs.deleted_at IS NULL) AND (builds.owner_id IS NOT NULL) AND (jobs.log_size IS NOT NULL))
         )
  SELECT objects.user_id,
     sum(objects.size) AS disk_usage
@@ -1571,7 +1572,7 @@ CREATE INDEX jobs_arch ON public.jobs USING btree (arch);
 -- Name: jobs_build_id; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX jobs_build_id ON public.jobs USING btree (build_id) WHERE (deleted IS FALSE);
+CREATE INDEX jobs_build_id ON public.jobs USING btree (build_id) WHERE (deleted_at IS NULL);
 
 
 --
@@ -1601,7 +1602,7 @@ CREATE INDEX jobs_finished_at ON public.jobs USING btree (finished_at DESC) WHER
 -- Name: jobs_pending; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE INDEX jobs_pending ON public.jobs USING btree (id) WHERE ((deleted IS FALSE) AND (started_at IS NULL) AND (finished_at IS NULL) AND (depcheck_succeeded IS TRUE));
+CREATE INDEX jobs_pending ON public.jobs USING btree (id) WHERE ((deleted_at IS NULL) AND (started_at IS NULL) AND (finished_at IS NULL) AND (depcheck_succeeded IS TRUE));
 
 
 --
@@ -1615,7 +1616,7 @@ CREATE INDEX jobs_running ON public.jobs USING btree (started_at) WHERE ((starte
 -- Name: jobs_uuid; Type: INDEX; Schema: public; Owner: -
 --
 
-CREATE UNIQUE INDEX jobs_uuid ON public.jobs USING btree (uuid) WHERE (deleted IS FALSE);
+CREATE UNIQUE INDEX jobs_uuid ON public.jobs USING btree (uuid) WHERE (deleted_at IS NULL);
 
 
 --
@@ -1846,6 +1847,14 @@ ALTER TABLE ONLY public.jobs_buildroots
     ADD CONSTRAINT jobs_buildroots_job_id FOREIGN KEY (job_id) REFERENCES public.jobs(id);
 
 
+--
+-- Name: jobs jobs_deleted_by; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.jobs
+    ADD CONSTRAINT jobs_deleted_by FOREIGN KEY (deleted_by) REFERENCES public.users(id);
+
+
 --
 -- Name: jobs_packages jobs_packaged_job_id; Type: FK CONSTRAINT; Schema: public; Owner: -
 --