From: Michael Tremer Date: Mon, 17 Oct 2022 16:54:51 +0000 (+0000) Subject: jobs: Implement deleting a job X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dfa73e6fbb649ce28e3c2645ea54c2af431e7b1c;p=pbs.git jobs: Implement deleting a job Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/jobs.py b/src/buildservice/jobs.py index 0d19f8c4..ad03cc92 100644 --- a/src/buildservice/jobs.py +++ b/src/buildservice/jobs.py @@ -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): """ diff --git a/src/database.sql b/src/database.sql index 3af804cf..c5010966 100644 --- a/src/database.sql +++ b/src/database.sql @@ -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: - --