From 52a23a53335c979211f46ed4426cc7b1469a9892 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Sun, 27 Sep 2020 11:10:47 +0100 Subject: [PATCH] Further data deletion improvements --- guix-data-service/data-deletion.scm | 49 ++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/guix-data-service/data-deletion.scm b/guix-data-service/data-deletion.scm index a8a2fc2..dbb94e5 100644 --- a/guix-data-service/data-deletion.scm +++ b/guix-data-service/data-deletion.scm @@ -23,7 +23,9 @@ #:use-module (guix-data-service model package-derivation-by-guix-revision-range) #:export (delete-data-for-branch delete-revisions-from-branch-except-most-recent-n - delete-data-for-all-deleted-branches)) + delete-revisions-for-all-branches-except-most-recent-n + delete-data-for-all-deleted-branches + delete-unreferenced-derivations)) (define (delete-revisions-from-branch conn git-repository-id branch-name commits) (define (delete-jobs conn) @@ -111,15 +113,16 @@ WHERE guix_revisions.git_repository_id = " FROM git_branches )"))))) - (unless (null? guix-revision-ids) - (for-each (lambda (guix-revision-id) - (delete-guix-revision-package-derivation-entries - conn - (number->string git-repository-id) - guix-revision-id - branch-name)) - guix-revision-ids) + (exec-query + conn + " +DELETE FROM package_derivations_by_guix_revision_range +WHERE git_repository_id = $1 AND + branch_name = $2" + (list (number->string git-repository-id) + branch-name)) + (unless (null? guix-revision-ids) (for-each (lambda (table) (exec-query @@ -152,7 +155,13 @@ DELETE FROM ~A WHERE ~A IN (VALUES ~A)" DELETE FROM guix_revisions WHERE id IN (" (string-join guix-revision-ids ", ") - ")"))))))) + ") +AND id NOT IN ( + SELECT id FROM guix_revisions + INNER JOIN git_branches ON + git_branches.commit = guix_revisions.commit AND + git_branches.git_repository_id = guix_revisions.git_repository_id +)"))))))) (define (delete-data-for-branch conn git-repository-id branch-name) (define commits @@ -188,7 +197,7 @@ OFFSET $3" (number->string n))))) (unless (null? commits) - (simple-format #t "deleting ~A commits\n" (length commits)) + (simple-format #t "deleting ~A commits from ~A\n" (length commits) branch-name) (delete-revisions-from-branch conn git-repository-id branch-name @@ -200,6 +209,24 @@ OFFSET $3" git-repository-id) branch-name))) +(define (delete-revisions-for-all-branches-except-most-recent-n n) + (with-postgresql-connection + "data-deletion" + (lambda (conn) + (for-each + (match-lambda + ((git-repository-id branch-name) + (delete-revisions-from-branch-except-most-recent-n + conn + (string->number git-repository-id) + branch-name + n))) + (exec-query + conn + " +SELECT DISTINCT git_repository_id, name +FROM git_branches"))))) + (define (delete-data-for-all-branches-but-master) (with-postgresql-connection "data-deletion"