Merge lp:~cjwatson/launchpad/db-snappy into lp:launchpad/db-devel

Proposed by Colin Watson on 2015-07-20
Status: Merged
Merged at revision: 13160
Proposed branch: lp:~cjwatson/launchpad/db-snappy
Merge into: lp:launchpad/db-devel
Diff against target: 216 lines (+159/-0)
2 files modified
database/schema/patch-2209-69-0.sql (+140/-0)
database/schema/security.cfg (+19/-0)
To merge this branch: bzr merge lp:~cjwatson/launchpad/db-snappy
Reviewer Review Type Date Requested Status
William Grant db 2015-07-20 Approve on 2015-07-30
Review via email: mp+265332@code.launchpad.net

Commit Message

Add Snap, SnapArch, SnapBuild, and SnapFile tables.

Description of the Change

Add Snap, SnapArch, SnapBuild, and SnapFile tables.

This is basically LiveFS with the serial numbers filed off, although instead of having a metadata dict we take a Branch/GitRef and expect that to contain the snapcraft recipe. I initially went for a recipe text column containing YAML, but following discussion with the snapcraft team a version control branch seems to be the most sensible way to pass the recipe, not least because there may need to be some other snap-specific metadata other than snapcraft.yaml and so one will often want a container for that anyway.

To post a comment you must log in.
William Grant (wgrant) :
review: Approve (db)
Colin Watson (cjwatson) :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'database/schema/patch-2209-69-0.sql'
2--- database/schema/patch-2209-69-0.sql 1970-01-01 00:00:00 +0000
3+++ database/schema/patch-2209-69-0.sql 2015-07-30 11:17:24 +0000
4@@ -0,0 +1,140 @@
5+-- Copyright 2015 Canonical Ltd. This software is licensed under the
6+-- GNU Affero General Public License version 3 (see the file LICENSE).
7+
8+SET client_min_messages=ERROR;
9+
10+CREATE TABLE Snap (
11+ id serial PRIMARY KEY,
12+ date_created timestamp without time zone DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') NOT NULL,
13+ date_last_modified timestamp without time zone DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') NOT NULL,
14+ registrant integer NOT NULL REFERENCES person,
15+ owner integer NOT NULL REFERENCES person,
16+ distro_series integer NOT NULL REFERENCES distroseries,
17+ name text NOT NULL,
18+ description text,
19+ branch integer REFERENCES branch,
20+ git_repository integer REFERENCES gitrepository,
21+ git_path text,
22+ require_virtualized boolean DEFAULT true NOT NULL,
23+ CONSTRAINT valid_name CHECK (valid_name(name)),
24+ CONSTRAINT consistent_git_ref CHECK ((git_repository IS NULL) = (git_path IS NULL)),
25+ CONSTRAINT consistent_vcs CHECK (null_count(ARRAY[branch, git_repository]) >= 1),
26+ CONSTRAINT snap__owner__name__key UNIQUE (owner, name)
27+);
28+
29+COMMENT ON TABLE Snap IS 'A snap package.';
30+COMMENT ON COLUMN Snap.registrant IS 'The user who registered the snap package.';
31+COMMENT ON COLUMN Snap.owner IS 'The owner of the snap package.';
32+COMMENT ON COLUMN Snap.distro_series IS 'The DistroSeries for which the snap package should be built.';
33+COMMENT ON COLUMN Snap.name IS 'The name of the snap package, unique per owner and DistroSeries.';
34+COMMENT ON COLUMN Snap.description IS 'A description of the snap package.';
35+COMMENT ON COLUMN Snap.branch IS 'A Bazaar branch containing a snap recipe.';
36+COMMENT ON COLUMN Snap.git_repository IS 'A Git repository with a branch containing a snap recipe.';
37+COMMENT ON COLUMN Snap.git_path IS 'The path of the Git branch containing a snap recipe.';
38+COMMENT ON COLUMN Snap.require_virtualized IS 'If True, this snap package must be built only on a virtual machine.';
39+
40+CREATE INDEX snap__registrant__idx
41+ ON Snap (registrant);
42+CREATE INDEX snap__distro_series__idx
43+ ON Snap (distro_series);
44+CREATE INDEX snap__branch__idx
45+ ON Snap (branch);
46+CREATE INDEX snap__git_repository__idx
47+ ON Snap (git_repository);
48+
49+CREATE TABLE SnapArch (
50+ snap integer NOT NULL REFERENCES snap,
51+ processor integer NOT NULL REFERENCES processor,
52+ PRIMARY KEY (snap, processor)
53+);
54+
55+COMMENT ON TABLE SnapArch IS 'The architectures a snap package should be built for.';
56+COMMENT ON COLUMN SnapArch.snap IS 'The snap package for which an architecture is specified.';
57+COMMENT ON COLUMN SnapArch.processor IS 'The architecture for which the snap package should be built.';
58+
59+CREATE TABLE SnapBuild (
60+ id serial PRIMARY KEY,
61+ requester integer NOT NULL REFERENCES person,
62+ snap integer NOT NULL REFERENCES snap,
63+ archive integer NOT NULL REFERENCES archive,
64+ distro_arch_series integer NOT NULL REFERENCES distroarchseries,
65+ pocket integer NOT NULL,
66+ processor integer NOT NULL REFERENCES processor,
67+ virtualized boolean NOT NULL,
68+ date_created timestamp without time zone DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') NOT NULL,
69+ date_started timestamp without time zone,
70+ date_finished timestamp without time zone,
71+ date_first_dispatched timestamp without time zone,
72+ builder integer REFERENCES builder,
73+ status integer NOT NULL,
74+ log integer REFERENCES libraryfilealias,
75+ upload_log integer REFERENCES libraryfilealias,
76+ dependencies text,
77+ failure_count integer DEFAULT 0 NOT NULL,
78+ build_farm_job integer NOT NULL REFERENCES buildfarmjob
79+);
80+
81+COMMENT ON TABLE SnapBuild IS 'A build record for a snap package.';
82+COMMENT ON COLUMN SnapBuild.requester IS 'The person who requested this snap package build.';
83+COMMENT ON COLUMN SnapBuild.snap IS 'The snap package to build.';
84+COMMENT ON COLUMN SnapBuild.archive IS 'The archive that the snap package should build from.';
85+COMMENT ON COLUMN SnapBuild.distro_arch_series IS 'The distroarchseries that the snap package should build from.';
86+COMMENT ON COLUMN SnapBuild.pocket IS 'The pocket that the snap package should build from.';
87+COMMENT ON COLUMN SnapBuild.virtualized IS 'The virtualization setting required by this build farm job.';
88+COMMENT ON COLUMN SnapBuild.date_created IS 'When the build farm job record was created.';
89+COMMENT ON COLUMN SnapBuild.date_started IS 'When the build farm job started being processed.';
90+COMMENT ON COLUMN SnapBuild.date_finished IS 'When the build farm job finished being processed.';
91+COMMENT ON COLUMN SnapBuild.date_first_dispatched IS 'The instant the build was dispatched the first time. This value will not get overridden if the build is retried.';
92+COMMENT ON COLUMN SnapBuild.builder IS 'The builder which processed this build farm job.';
93+COMMENT ON COLUMN SnapBuild.status IS 'The current build status.';
94+COMMENT ON COLUMN SnapBuild.log IS 'The log file for this build farm job stored in the librarian.';
95+COMMENT ON COLUMN SnapBuild.upload_log IS 'The upload log file for this build farm job stored in the librarian.';
96+COMMENT ON COLUMN SnapBuild.dependencies IS 'A Debian-like dependency line specifying the current missing dependencies for this build.';
97+COMMENT ON COLUMN SnapBuild.failure_count IS 'The number of consecutive failures on this job. If excessive, the job may be terminated.';
98+COMMENT ON COLUMN SnapBuild.build_farm_job IS 'The build farm job with the base information.';
99+
100+CREATE INDEX snapbuild__requester__idx
101+ ON SnapBuild (requester);
102+CREATE INDEX snapbuild__snap__idx
103+ ON SnapBuild (snap);
104+CREATE INDEX snapbuild__archive__idx
105+ ON SnapBuild (archive);
106+CREATE INDEX snapbuild__distro_arch_series__idx
107+ ON SnapBuild (distro_arch_series);
108+CREATE INDEX snapbuild__log__idx
109+ ON SnapBuild (log);
110+CREATE INDEX snapbuild__upload_log__idx
111+ ON SnapBuild (upload_log);
112+CREATE INDEX snapbuild__build_farm_job__idx
113+ ON SnapBuild (build_farm_job);
114+
115+-- Snap.requestBuild
116+CREATE INDEX snapbuild__snap__archive__das__pocket__status__idx
117+ ON SnapBuild (snap, archive, distro_arch_series, pocket, status);
118+
119+-- Snap.builds, Snap.completed_builds, Snap.pending_builds
120+CREATE INDEX snapbuild__snap__status__started__finished__created__id__idx
121+ ON SnapBuild (
122+ snap, status, GREATEST(date_started, date_finished) DESC NULLS LAST,
123+ date_created DESC, id DESC);
124+
125+-- SnapBuild.getMedianBuildDuration
126+CREATE INDEX snapbuild__snap__das__status__finished__idx
127+ ON SnapBuild (snap, distro_arch_series, status, date_finished DESC)
128+ -- 1 == FULLYBUILT
129+ WHERE status = 1;
130+
131+CREATE TABLE SnapFile (
132+ id serial PRIMARY KEY,
133+ snapbuild integer NOT NULL REFERENCES snapbuild,
134+ libraryfile integer NOT NULL REFERENCES libraryfilealias
135+);
136+
137+COMMENT ON TABLE SnapFile IS 'A link between a snap package build and a file in the librarian that it produces.';
138+COMMENT ON COLUMN SnapFile.snapbuild IS 'The snap package build producing this file.';
139+COMMENT ON COLUMN SnapFile.libraryfile IS 'A file in the librarian.';
140+
141+CREATE INDEX snapfile__snapbuild__idx
142+ ON SnapFile (snapbuild);
143+
144+INSERT INTO LaunchpadDatabaseRevision VALUES (2209, 69, 0);
145
146=== modified file 'database/schema/security.cfg'
147--- database/schema/security.cfg 2015-07-30 02:58:59 +0000
148+++ database/schema/security.cfg 2015-07-30 11:17:24 +0000
149@@ -289,6 +289,10 @@
150 public.scriptactivity = SELECT
151 public.seriessourcepackagebranch = SELECT, INSERT, UPDATE, DELETE
152 public.sharingjob = SELECT, INSERT, UPDATE, DELETE
153+public.snap = SELECT, INSERT, UPDATE, DELETE
154+public.snaparch = SELECT, INSERT, DELETE
155+public.snapbuild = SELECT, INSERT, UPDATE, DELETE
156+public.snapfile = SELECT, INSERT, UPDATE, DELETE
157 public.sourcepackageformatselection = SELECT
158 public.sourcepackagepublishinghistory = SELECT
159 public.sourcepackagerecipe = SELECT, INSERT, UPDATE, DELETE
160@@ -442,6 +446,8 @@
161 public.product = SELECT
162 public.productreleasefile = SELECT
163 public.project = SELECT
164+public.snapbuild = SELECT
165+public.snapfile = SELECT
166 public.sourcepackagerecipebuild = SELECT
167 public.sourcepackagerelease = SELECT
168 public.sourcepackagereleasefile = SELECT
169@@ -980,6 +986,10 @@
170 public.publisherconfig = SELECT
171 public.section = SELECT
172 public.seriessourcepackagebranch = SELECT
173+public.snap = SELECT
174+public.snaparch = SELECT
175+public.snapbuild = SELECT, UPDATE
176+public.snapfile = SELECT
177 public.sourcepackagename = SELECT
178 public.sourcepackagepublishinghistory = SELECT
179 public.sourcepackagerecipe = SELECT
180@@ -1401,6 +1411,10 @@
181 public.sectionselection = SELECT
182 public.sharingjob = SELECT, INSERT, UPDATE
183 public.signedcodeofconduct = SELECT
184+public.snap = SELECT, UPDATE
185+public.snaparch = SELECT
186+public.snapbuild = SELECT, UPDATE
187+public.snapfile = SELECT, INSERT, UPDATE
188 public.sourcepackagefilepublishing = SELECT
189 public.sourcepackageformatselection = SELECT
190 public.sourcepackagename = SELECT, INSERT
191@@ -1510,6 +1524,8 @@
192 public.section = SELECT
193 public.sectionselection = SELECT
194 public.sharingjob = SELECT, INSERT, UPDATE
195+public.snapbuild = SELECT
196+public.snapfile = SELECT, UPDATE
197 public.sourcepackagefilepublishing = SELECT
198 public.sourcepackagename = SELECT
199 public.sourcepackagepublishinghistory = SELECT, INSERT, UPDATE
200@@ -2209,6 +2225,8 @@
201 public.seriessourcepackagebranch = SELECT, UPDATE
202 public.sharingjob = SELECT, INSERT, UPDATE
203 public.signedcodeofconduct = SELECT, UPDATE
204+public.snap = SELECT, UPDATE
205+public.snapbuild = SELECT, UPDATE
206 public.sourcepackagename = SELECT
207 public.sourcepackagepublishinghistory = SELECT, UPDATE
208 public.sourcepackagerecipe = SELECT, UPDATE
209@@ -2294,6 +2312,7 @@
210 public.previewdiff = SELECT, DELETE
211 public.revisionauthor = SELECT, UPDATE
212 public.revisioncache = SELECT, DELETE
213+public.snapfile = SELECT, DELETE
214 public.sourcepackagename = SELECT
215 public.sourcepackagerelease = SELECT
216 public.sourcepackagepublishinghistory = SELECT, UPDATE

Subscribers

People subscribed via source and target branches

to status/vote changes: