From: Efraim Flashner <efraim@flashner.co.il>
To: Liliana Marie Prikler <liliana.prikler@gmail.com>
Cc: 58624@debbugs.gnu.org
Subject: [bug#58624] [PATCH] guix gc: Add '--vacuum-store'.
Date: Thu, 20 Oct 2022 22:22:52 +0300 [thread overview]
Message-ID: <Y1GgDMnKy8e70pXj@3900XT> (raw)
In-Reply-To: <b2b1c727708eaca787844768351a1daf53ef8016.camel@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 5763 bytes --]
On Thu, Oct 20, 2022 at 08:51:04PM +0200, Liliana Marie Prikler wrote:
> Am Mittwoch, dem 19.10.2022 um 12:26 +0300 schrieb Efraim Flashner:
> > * 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..
> You're using vacuum-store here...
>
> > @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@gnu.org>
> > +;;; Copyright © 2022 Efraim Flashner <efraim@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@cune.org>
> > ;;; Copyright © 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
> > ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
> > +;;; Copyright © 2022 Efraim Flashner <efraim@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)))
> ... but vacuum-database here.
>
> Since the database is just a part of the store, I think making it
> "vacuum-database" everywhere ought to make it both more consistent and
> more correct.
Agreed. I even made sure it was --vacuum-database in the help menu from
'guix gc --help'. Truth is I wrote the code and then the next day I
wrote the documentation, so figures I would document it wrong ...
--
Efraim Flashner <efraim@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
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2022-10-20 19:26 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-19 9:26 [bug#58624] [PATCH] guix gc: Add '--vacuum-store' Efraim Flashner
2022-10-20 18:51 ` Liliana Marie Prikler
2022-10-20 19:22 ` Efraim Flashner [this message]
2022-10-20 19:27 ` [bug#58624] [PATCH v2] guix gc: Add '--vacuum-database' Efraim Flashner
2022-11-03 16:20 ` Christopher Baines
2022-11-06 12:04 ` bug#58624: " Efraim Flashner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y1GgDMnKy8e70pXj@3900XT \
--to=efraim@flashner.co.il \
--cc=58624@debbugs.gnu.org \
--cc=liliana.prikler@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).