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):
"""
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
);
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));
--
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;
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
-- 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);
--
-- 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));
--
-- 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);
--
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: -
--