GNU bug report logs - #58624
[PATCH] guix gc: Add '--vacuum-store'.

Previous Next

Package: guix-patches;

Reported by: Efraim Flashner <efraim <at> flashner.co.il>

Date: Wed, 19 Oct 2022 09:31:02 UTC

Severity: normal

Tags: patch

Done: Efraim Flashner <efraim <at> flashner.co.il>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Efraim Flashner <efraim <at> flashner.co.il>
Subject: bug#58624: closed (Re: [bug#58624] [PATCH v2] guix gc: Add
 '--vacuum-database'.)
Date: Sun, 06 Nov 2022 12:05:01 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#58624: [PATCH] guix gc: Add '--vacuum-store'.

which was filed against the guix-patches package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 58624 <at> debbugs.gnu.org.

-- 
58624: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=58624
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Efraim Flashner <efraim <at> flashner.co.il>
To: Christopher Baines <mail <at> cbaines.net>
Cc: 58624-done <at> debbugs.gnu.org
Subject: Re: [bug#58624] [PATCH v2] guix gc: Add '--vacuum-database'.
Date: Sun, 6 Nov 2022 14:04:14 +0200
[Message part 3 (text/plain, inline)]
On Thu, Nov 03, 2022 at 05:20:24PM +0100, Christopher Baines wrote:
> 
> Efraim Flashner <efraim <at> flashner.co.il> writes:
> 
> > * guix/scripts/gc.scm (show-help, %options): Add '--vacuum-database'.
> > * guix/store/database.scm (vacuum-database): New procedure.
> > * doc/guix.texi (Invoking guix gc): Document the option.
> > ---
> >  doc/guix.texi           | 12 ++++++++++++
> >  guix/scripts/gc.scm     | 11 +++++++++++
> >  guix/store/database.scm |  9 ++++++++-
> >  3 files changed, 31 insertions(+), 1 deletion(-)
> 
> I haven't tried this out, but it sounds good to me +1.

Thanks. In the documentation I used overtime vs 'over time' and I had a
double period at the end of the last sentence, which I cleaned up before
pushing.


-- 
Efraim Flashner   <efraim <at> flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
[signature.asc (application/pgp-signature, inline)]
[Message part 5 (message/rfc822, inline)]
From: Efraim Flashner <efraim <at> flashner.co.il>
To: guix-patches <at> gnu.org
Cc: Efraim Flashner <efraim <at> flashner.co.il>
Subject: [PATCH] guix gc: Add '--vacuum-store'.
Date: Wed, 19 Oct 2022 12:26:20 +0300
* guix/scripts/gc.scm (show-help, %options): Add '--vacuum-store'.
* guix/store/database.scm (vacuum-database): New procedure.
* doc/guix.texi (Invoking guix gc): Document the option.
---
 doc/guix.texi           | 11 +++++++++++
 guix/scripts/gc.scm     | 11 +++++++++++
 guix/store/database.scm |  9 ++++++++-
 3 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 3bf2dee752..89fd04415a 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -4531,6 +4531,17 @@ Invoking guix gc
 this option is primarily useful when the daemon was running with
 @option{--disable-deduplication}.
 
+@item --vacuum-store
+@cindex vacuum the store database
+@comment Avoid words like 'repair,' 'compress,' and 'optimize.'
+Guix uses an sqlite database to keep track of the items in (@pxref{The Store}).
+Overtime it is possible that the database may grow to a large size and become
+fragmented.  As a result, one may wish to clear the freed space and join the
+partially used pages in the database left behind from removed packages or after
+running the garbage collector.  Running @command{sudo guix gc --vacuum-store}
+will lock the database and @code{VACUUM} the store, defragmenting the database
+and purging freed pages, unlocking the database when it finishes..
+
 @end table
 
 @node Invoking guix pull
diff --git a/guix/scripts/gc.scm b/guix/scripts/gc.scm
index 65cd4bdf8b..5e775c5cdb 100644
--- a/guix/scripts/gc.scm
+++ b/guix/scripts/gc.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012-2013, 2015-2020, 2022 Ludovic Courtès <ludo <at> gnu.org>
+;;; Copyright © 2022 Efraim Flashner <efraim <at> flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +28,7 @@ (define-module (guix scripts gc)
                                 generation-number)
   #:autoload   (guix scripts package) (delete-generations)
   #:autoload   (gnu home) (home-generation-base)
+  #:autoload   (guix store database) (vacuum-database)
   #:use-module (ice-9 match)
   #:use-module (ice-9 regex)
   #:use-module (srfi srfi-1)
@@ -86,6 +88,10 @@ (define (show-help)
   (display (G_ "
       --clear-failures   remove PATHS from the set of cached failures"))
   (newline)
+  (display (G_ "
+      --vacuum-database  repack the sqlite database tracking the store
+                         using less space"))
+  (newline)
   (display (G_ "
   -h, --help             display this help and exit"))
   (display (G_ "
@@ -131,6 +137,11 @@ (define %options
                 (lambda args
                   (show-version-and-exit "guix gc")))
 
+        (option '("vacuum-database") #f #f
+                (lambda args
+                  (vacuum-database)
+                  (exit 0)))
+
         (option '(#\C "collect-garbage") #f #t
                 (lambda (opt name arg result)
                   (let ((result (alist-cons 'action 'collect-garbage
diff --git a/guix/store/database.scm b/guix/store/database.scm
index 8d08def833..e664015673 100644
--- a/guix/store/database.scm
+++ b/guix/store/database.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2017, 2019 Caleb Ristvedt <caleb.ristvedt <at> cune.org>
 ;;; Copyright © 2018, 2020, 2021 Ludovic Courtès <ludo <at> gnu.org>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+;;; Copyright © 2022 Efraim Flashner <efraim <at> flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -45,7 +46,8 @@ (define-module (guix store database)
             sqlite-register
             register-items
             %epoch
-            reset-timestamps))
+            reset-timestamps
+            vacuum-database))
 
 ;;; Code for working with the store database directly.
 
@@ -438,3 +440,8 @@ (define* (register-items db items
                     (register db item)
                     (report))
                   items)))))
+
+(define (vacuum-database)
+  (let ((db (sqlite-open (store-database-file))))
+    (sqlite-exec db "VACUUM;")
+    (sqlite-close db)))

base-commit: 3bb145b6e2a8c84e7739ead9ae76dc4d42bb9850
-- 
2.38.0




This bug report was last modified 2 years and 258 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.