refactor: Generalize log ownership to allow for scratch jobs (#182)

* refactor: Generalize log ownership to allow for scratch jobs

Importing may fail when creating a project. We don't want to lose this output,
but we don't want to allow users to create a failing project.

This generalizes logs to soon enable one-off situations where a user can upload
their archive, create a project, and watch the output parse to completion.

* Improve file table schema by using hash

* Fix racey test by allowing logs before

* Add debug logging for PostgreSQL insert
This commit is contained in:
Kyle Carberry
2022-02-07 15:32:37 -06:00
committed by GitHub
parent bde732f2ef
commit ed705f6af2
26 changed files with 892 additions and 935 deletions
+24 -33
View File
@@ -87,6 +87,13 @@ CREATE TABLE api_keys (
devurl_token boolean DEFAULT false NOT NULL
);
CREATE TABLE file (
hash character varying(32) NOT NULL,
created_at timestamp with time zone NOT NULL,
mimetype character varying(64) NOT NULL,
data bytea NOT NULL
);
CREATE TABLE licenses (
id integer NOT NULL,
license jsonb NOT NULL,
@@ -169,15 +176,6 @@ CREATE TABLE project_version (
import_job_id uuid NOT NULL
);
CREATE TABLE project_version_log (
id uuid NOT NULL,
project_version_id uuid NOT NULL,
created_at timestamp with time zone NOT NULL,
source log_source NOT NULL,
level log_level NOT NULL,
output character varying(1024) NOT NULL
);
CREATE TABLE provisioner_daemon (
id uuid NOT NULL,
created_at timestamp with time zone NOT NULL,
@@ -197,11 +195,19 @@ CREATE TABLE provisioner_job (
initiator_id text NOT NULL,
provisioner provisioner_type NOT NULL,
type provisioner_job_type NOT NULL,
project_id uuid NOT NULL,
input jsonb NOT NULL,
worker_id uuid
);
CREATE TABLE provisioner_job_log (
id uuid NOT NULL,
job_id uuid NOT NULL,
created_at timestamp with time zone NOT NULL,
source log_source NOT NULL,
level log_level NOT NULL,
output character varying(1024) NOT NULL
);
CREATE TABLE users (
id text NOT NULL,
email text NOT NULL,
@@ -257,15 +263,6 @@ CREATE TABLE workspace_history (
provision_job_id uuid NOT NULL
);
CREATE TABLE workspace_history_log (
id uuid NOT NULL,
workspace_history_id uuid NOT NULL,
created_at timestamp with time zone NOT NULL,
source log_source NOT NULL,
level log_level NOT NULL,
output character varying(1024) NOT NULL
);
CREATE TABLE workspace_resource (
id uuid NOT NULL,
created_at timestamp with time zone NOT NULL,
@@ -276,6 +273,9 @@ CREATE TABLE workspace_resource (
workspace_agent_id uuid
);
ALTER TABLE ONLY file
ADD CONSTRAINT file_hash_key UNIQUE (hash);
ALTER TABLE ONLY parameter_value
ADD CONSTRAINT parameter_value_id_key UNIQUE (id);
@@ -297,9 +297,6 @@ ALTER TABLE ONLY project_parameter
ALTER TABLE ONLY project_version
ADD CONSTRAINT project_version_id_key UNIQUE (id);
ALTER TABLE ONLY project_version_log
ADD CONSTRAINT project_version_log_id_key UNIQUE (id);
ALTER TABLE ONLY project_version
ADD CONSTRAINT project_version_project_id_name_key UNIQUE (project_id, name);
@@ -312,15 +309,15 @@ ALTER TABLE ONLY provisioner_daemon
ALTER TABLE ONLY provisioner_job
ADD CONSTRAINT provisioner_job_id_key UNIQUE (id);
ALTER TABLE ONLY provisioner_job_log
ADD CONSTRAINT provisioner_job_log_id_key UNIQUE (id);
ALTER TABLE ONLY workspace_agent
ADD CONSTRAINT workspace_agent_id_key UNIQUE (id);
ALTER TABLE ONLY workspace_history
ADD CONSTRAINT workspace_history_id_key UNIQUE (id);
ALTER TABLE ONLY workspace_history_log
ADD CONSTRAINT workspace_history_log_id_key UNIQUE (id);
ALTER TABLE ONLY workspace_history
ADD CONSTRAINT workspace_history_workspace_id_name_key UNIQUE (workspace_id, name);
@@ -342,21 +339,15 @@ ALTER TABLE ONLY workspace_resource
ALTER TABLE ONLY project_parameter
ADD CONSTRAINT project_parameter_project_version_id_fkey FOREIGN KEY (project_version_id) REFERENCES project_version(id) ON DELETE CASCADE;
ALTER TABLE ONLY project_version_log
ADD CONSTRAINT project_version_log_project_version_id_fkey FOREIGN KEY (project_version_id) REFERENCES project_version(id) ON DELETE CASCADE;
ALTER TABLE ONLY project_version
ADD CONSTRAINT project_version_project_id_fkey FOREIGN KEY (project_id) REFERENCES project(id);
ALTER TABLE ONLY provisioner_job
ADD CONSTRAINT provisioner_job_project_id_fkey FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE;
ALTER TABLE ONLY provisioner_job_log
ADD CONSTRAINT provisioner_job_log_job_id_fkey FOREIGN KEY (job_id) REFERENCES provisioner_job(id) ON DELETE CASCADE;
ALTER TABLE ONLY workspace_agent
ADD CONSTRAINT workspace_agent_workspace_resource_id_fkey FOREIGN KEY (workspace_resource_id) REFERENCES workspace_resource(id) ON DELETE CASCADE;
ALTER TABLE ONLY workspace_history_log
ADD CONSTRAINT workspace_history_log_workspace_history_id_fkey FOREIGN KEY (workspace_history_id) REFERENCES workspace_history(id) ON DELETE CASCADE;
ALTER TABLE ONLY workspace_history
ADD CONSTRAINT workspace_history_project_version_id_fkey FOREIGN KEY (project_version_id) REFERENCES project_version(id) ON DELETE CASCADE;