Add automatic garbage collection

Nix can now automatically run the garbage collector during builds or
while adding paths to the store. The option "min-free = <bytes>"
specifies that Nix should run the garbage collector whenever free
space in the Nix store drops below <bytes>. It will then delete
garbage until "max-free" bytes are available.

Garbage collection during builds is asynchronous; running builds are
not paused and new builds are not blocked. However, there also is a
synchronous GC run prior to the first build/substitution.

Currently, no old GC roots are deleted (as in "nix-collect-garbage
-d").
This commit is contained in:
Eelco Dolstra 2017-09-05 20:43:42 +02:00
parent b932ea58ec
commit 0b606aad46
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
6 changed files with 127 additions and 1 deletions

View file

@ -4,8 +4,9 @@
#include "config.hh"
#include <map>
#include <sys/types.h>
#include <limits>
#include <sys/types.h>
namespace nix {
@ -342,6 +343,13 @@ public:
Setting<Strings> hashedMirrors{this, {"http://tarballs.nixos.org/"}, "hashed-mirrors",
"A list of servers used by builtins.fetchurl to fetch files by hash."};
Setting<uint64_t> minFree{this, 0, "min-free",
"Automatically run the garbage collector when free disk space drops below the specified amount."};
Setting<uint64_t> maxFree{this, std::numeric_limits<uint64_t>::max(), "max-free",
"Stop deleting garbage when free disk space is above the specified amount."};
};