From 0291bda98abf4cf4299434ed304aa72846f405dd Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Thu, 5 Dec 2019 14:10:09 +0100 Subject: Deduplicate builds and add a unique index Duplicate builds could creep in if the code to create them ran concurrently. I didn't exclude them initially, as I was unsure if there should be such a restriction, but at least for now, Cuirass builds map exactly to a single derivation, so use the same restriction here. --- sqitch/deploy/sort_out_duplicate_builds.sql | 33 +++++++++++++++++++++++++++++ sqitch/revert/sort_out_duplicate_builds.sql | 7 ++++++ sqitch/sqitch.plan | 1 + sqitch/verify/sort_out_duplicate_builds.sql | 7 ++++++ 4 files changed, 48 insertions(+) create mode 100644 sqitch/deploy/sort_out_duplicate_builds.sql create mode 100644 sqitch/revert/sort_out_duplicate_builds.sql create mode 100644 sqitch/verify/sort_out_duplicate_builds.sql diff --git a/sqitch/deploy/sort_out_duplicate_builds.sql b/sqitch/deploy/sort_out_duplicate_builds.sql new file mode 100644 index 0000000..92bd2c5 --- /dev/null +++ b/sqitch/deploy/sort_out_duplicate_builds.sql @@ -0,0 +1,33 @@ +-- Deploy guix-data-service:sort_out_duplicate_builds to pg + +BEGIN; + +DELETE FROM build_status WHERE build_id IN ( + SELECT builds.id + FROM builds + INNER JOIN ( + SELECT derivation_file_name, MIN(id) AS id + FROM builds + GROUP BY build_server_id, derivation_file_name + HAVING COUNT(DISTINCT id) > 1 + ) AS min_ids + ON min_ids.derivation_file_name = builds.derivation_file_name AND + min_ids.id != builds.id +); + +DELETE FROM builds WHERE id IN ( + SELECT builds.id + FROM builds + INNER JOIN ( + SELECT derivation_file_name, MIN(id) AS id + FROM builds + GROUP BY build_server_id, derivation_file_name + HAVING COUNT(DISTINCT id) > 1 + ) AS min_ids + ON min_ids.derivation_file_name = builds.derivation_file_name AND + min_ids.id != builds.id +); + +CREATE UNIQUE INDEX ON builds (build_server_id, derivation_file_name); + +COMMIT; diff --git a/sqitch/revert/sort_out_duplicate_builds.sql b/sqitch/revert/sort_out_duplicate_builds.sql new file mode 100644 index 0000000..153a4ef --- /dev/null +++ b/sqitch/revert/sort_out_duplicate_builds.sql @@ -0,0 +1,7 @@ +-- Revert guix-data-service:sort_out_duplicate_builds from pg + +BEGIN; + +DROP INDEX builds_build_server_id_derivation_file_name_idx; + +COMMIT; diff --git a/sqitch/sqitch.plan b/sqitch/sqitch.plan index ee65c61..c323eef 100644 --- a/sqitch/sqitch.plan +++ b/sqitch/sqitch.plan @@ -34,3 +34,4 @@ add_index_on_builds_derivation_file_name 2019-12-03T16:23:55Z # narinfo_fetch_record 2019-12-03T20:53:28Z # Add a table to describe fetching a narinfo change_nars_size_to_bigint 2019-12-04T21:24:21Z # Change nars.size to bigint change_nar_urls_size_to_bigint 2019-12-04T21:49:07Z # Change nar_urls.size to bigint +sort_out_duplicate_builds 2019-12-05T12:43:53Z # Sort out duplicate builds diff --git a/sqitch/verify/sort_out_duplicate_builds.sql b/sqitch/verify/sort_out_duplicate_builds.sql new file mode 100644 index 0000000..a63cda4 --- /dev/null +++ b/sqitch/verify/sort_out_duplicate_builds.sql @@ -0,0 +1,7 @@ +-- Verify guix-data-service:sort_out_duplicate_builds on pg + +BEGIN; + +-- XXX Add verifications here. + +ROLLBACK; -- cgit v1.2.3