about summary refs log tree commit diff
path: root/src/libstore/gc.cc
AgeCommit message (Collapse)AuthorFilesLines
2007-08-28 * PathLocks::lockPaths: don't allow reacquiring a lock we alreadyEelco Dolstra1-1/+3
hold.
2007-08-12 * Get rid of the substitutes database table (NIX-47). Instead, if weEelco Dolstra1-0/+2
need any info on substitutable paths, we just call the substituters (such as download-using-manifests.pl) directly. This means that it's no longer necessary for nix-pull to register substitutes or for nix-channel to clear them, which makes those operations much faster (NIX-95). Also, we don't have to worry about keeping nix-pull manifests (in /nix/var/nix/manifests) and the database in sync with each other. The downside is that there is some overhead in calling an external program to get the substitutes info. For instance, "nix-env -qas" takes a bit longer. Abolishing the substitutes table also makes the logic in local-store.cc simpler, as we don't need to store info for invalid paths. On the downside, you cannot do things like "nix-store -qR" on a substitutable but invalid path (but nobody did that anyway). * Never catch interrupts (the Interrupted exception).
2007-06-12 * Support queryDeriver() in multi-user installations.Eelco Dolstra1-1/+1
2007-06-11 * Check against creation of GC roots in the store. Those roots don'tEelco Dolstra1-1/+5
work, because findRoots() stops when it encounters a symlink to the store. And of course the store is supposed to be read-only.
2007-03-19 * Undocumented option `gc-check-reachability' to allow reachabilityEelco Dolstra1-7/+9
checking to be turned off on machines with way too many roots.
2007-02-21 * `nix-store -qR' and friends: print the paths sorted topologicallyEelco Dolstra1-2/+2
under the references relation. This is useful for commands that want to copy paths to another Nix store in the right order.
2007-01-14 * Make the garbage collector more resilient to certain consistencyEelco Dolstra1-3/+7
errors: in-use paths now cause a warning, not a fatal error.
2006-12-05 * Better message.Eelco Dolstra1-1/+1
2006-12-05 * Allow unprivileged users to run the garbage collector and to doEelco Dolstra1-4/+4
`nix-store --delete'. But unprivileged users are not allowed to ignore liveness. * `nix-store --delete --ignore-liveness': ignore the runtime roots as well.
2006-12-05 * The determination of the root set should be made by the privilegedEelco Dolstra1-56/+64
process, so forward the operation. * Spam the user about GC misconfigurations (NIX-71). * findRoots: skip all roots that are unreadable - the warnings with which we spam the user should be enough.
2006-12-05 * findRoots: return a map from the symlink (outside of the store) toEelco Dolstra1-11/+16
the store path (inside the store).
2006-12-05 * In addPermRoot, check that the root that we just registered can beEelco Dolstra1-17/+41
found by the garbage collector. This addresses NIX-71 and is a particular concern in multi-user stores.
2006-12-04 * Add indirect root registration to the protocol so that unprivilegedEelco Dolstra1-5/+10
processes can register indirect roots. Of course, there is still the problem that the garbage collector can only read the targets of the indirect roots when it's running as root...
2006-12-02 * Move addTempRoot() to the store API, and add another functionEelco Dolstra1-5/+12
syncWithGC() to allow clients to register GC roots without needing write access to the global roots directory or the GC lock.
2006-12-02 * Remove SwitchToOriginalUser, we're not going to need it anymore.Eelco Dolstra1-4/+1
2006-11-30 * Refactoring. There is now an abstract interface class StoreAPIEelco Dolstra1-8/+8
containing functions that operate on the Nix store. One implementation is LocalStore, which operates on the Nix store directly. The next step, to enable secure multi-user Nix, is to create a different implementation RemoteStore that talks to a privileged daemon process that uses LocalStore to perform the actual operations.
2006-11-24 * Doh! Path sizes need to be computed recursively of course.Eelco Dolstra1-6/+2
(NIX-70)
2006-09-14 * Fix a huge gaping hole in nix-env w.r.t. the garbage collector.Eelco Dolstra1-9/+14
Nix-env failed to call addPermRoot(), which is necessary to safely add a new root. So if nix-env started after and finished before the garbage collector, the user environment (plus all other new stuff) it built might be garbage collected, leading to a dangling symlink chain in ~/.nix-profile... * Be more explicit if we block on the GC lock ("waiting for the big garbage collector lock..."). * Don't loop trying to create a new generation. It's not necessary anymore since profiles are locked nowadays.
2006-09-04 * Use a proper namespace.Eelco Dolstra1-2/+11
* Optimise header file usage a bit. * Compile the parser as C++.
2006-08-11 * `nix-store --gc --print-dead': print the total size of the storeEelco Dolstra1-0/+9
objects that would be freed.
2006-08-11 * Don't assume that paths returned by the runtime root finder areEelco Dolstra1-1/+1
valid.
2006-07-20 * Use $(libexecdir) to find find-runtime-roots.pl.Eelco Dolstra1-1/+1
2006-07-20 * Use debug().Eelco Dolstra1-1/+1
2006-07-20 * Call find-runtime-roots.pl from the garbage collector to preventEelco Dolstra1-0/+31
running applications etc. from being garbage collected.
2006-06-20 * Concurrent GC on Cygwin.Eelco Dolstra1-23/+57
2006-05-29 * Disable the concurrent garbage collector on Cygwin for now.Eelco Dolstra1-0/+8
2006-05-11 * 64-bit compatibility fixes (for problems revealed by building on an AthlonEelco Dolstra1-1/+1
64 running 64-bit SUSE). A patched ATerm library is required to run Nix succesfully.
2006-03-06 * `nix-env (-i|-u) --dry-run' now shows exactly which missing pathsEelco Dolstra1-1/+1
will be built or substituted.
2005-12-23 * Added a flag `--ignore-liveness' to `nix-store --delete'. ItEelco Dolstra1-2/+3
deletes a path even if it is reachable from a root. However, it won't delete a path that still has referrers (since that would violate store invariants). Don't try this at home. It's a useful hack for recovering from certain situations in a somewhat clean way (e.g., holes in closures due to disk corruption).
2005-12-23 * Revived the old "nix-store --delete" operation that deletes theEelco Dolstra1-8/+19
specified paths from the Nix store. However, this operation is safe: it refuses to delete anything that the garbage collector wouldn't delete.
2005-12-15 * `nix-store --gc' prints out the number of bytes freed on stdoutEelco Dolstra1-2/+6
(even when it is interrupted by a signal).
2005-12-13 * Change `referer' to `referrer' throughout. In particular, theEelco Dolstra1-2/+2
nix-store query options `--referer' and `--referer-closure' have been changed to `--referrer' and `--referrer-closure' (but the old ones are still accepted for compatibility).
2005-05-10 * Ignore (with a warning) invalid garbage collector roots.Eelco Dolstra1-1/+6
2005-03-25 * When finding live paths, the deriver need not be valid.Eelco Dolstra1-1/+4
2005-03-24 * Create missing log and temproots directories automatically (reportedEelco Dolstra1-12/+5
by Rob).
2005-02-17 * Switch to the calling user context for some more operations in aEelco Dolstra1-2/+5
setuid installation.
2005-02-14 * Implement the `gc-keep-derivations' global configuretion flag.Eelco Dolstra1-1/+14
2005-02-14 * Global configuration option `env-keep-derivations' to store pointerEelco Dolstra1-2/+2
to derivations in user environments. Nice for developers (since it prevents build-time-only dependencies from being GC'ed, in conjunction with `gc-keep-outputs'). Turned off by default.
2005-02-08 * Updated `nix-store --verify' to the new schema.Eelco Dolstra1-1/+1
2005-02-07 * `nix-store -qb' to query derivation environment bindings. UsefulEelco Dolstra1-3/+3
for finding build-time dependencies (possibly after a build). E.g., $ nix-store -qb aterm $(nix-store -qd $(which strc)) /nix/store/jw7c7s65n1gwhxpn35j9rgcci6ilzxym-aterm-2.3.1 * Arguments to nix-store can be files within store objects, e.g., /nix/store/jw7c...-aterm-2.3.1/bin/baffle. * Idem for garbage collector roots.
2005-02-01 * A GC setting `gc-keep-outputs' to specify whether output paths ofEelco Dolstra1-7/+17
derivations should be kept.
2005-02-01 * Move root finding from `nix-collect-garbage' to `nix-store --gc'.Eelco Dolstra1-5/+54
This was necessary becase root finding must be done after acquisition of the global GC lock. This makes `nix-collect-garbage' obsolete; it is now just a wrapper around `nix-store --gc'. * Automatically remove stale GC roots (i.e., indirect GC roots that point to non-existent paths).
2005-02-01 * nix-build: use an indirection scheme to make it easier for users toEelco Dolstra1-19/+42
get rid of GC roots. Nix-build places a symlink `result' in the current directory. Previously, removing that symlink would not remove the store path being linked to as a GC root. Now, the GC root created by nix-build is actually a symlink in `/nix/var/nix/gcroots/auto' to `result'. So if that symlink is removed the GC root automatically becomes invalid (since it can no longer be resolved). The root itself is not automatically removed - the garbage collector should delete dangling roots.
2005-02-01 * nix-store, nix-instantiate: added an option `--add-root' toEelco Dolstra1-0/+46
immediately add the result as a permanent GC root. This is the only way to prevent a race with the garbage collector. For instance, the old style ln -s $(nix-store -r $(nix-instantiate foo.nix)) \ /nix/var/nix/gcroots/result has two time windows in which the garbage collector can interfere (by GC'ing the derivation and the output, respectively). On the other hand, nix-store --add-root /nix/var/nix/gcroots/result -r \ $(nix-instantiate --add-root /nix/var/nix/gcroots/drv \ foo.nix) is safe. * nix-build: use `--add-root' to prevent GC races.
2005-01-31 * Acquire a global GC lock to prevent new temporary root files fromEelco Dolstra1-15/+29
being created after the garbage collector has read the temproots directory. This blocks the creation of new processes, but the garbage collector could periodically release the GC lock to allow them to run.
2005-01-31 * Add a test for a more subtle race: a process starting after theEelco Dolstra1-2/+20
temporary root files have been read but creating outputs before the store directory has been read.
2005-01-31 * Automatically remove temporary root files.Eelco Dolstra1-1/+11
2005-01-31 * Topologically sort paths under the references relation to ensureEelco Dolstra1-35/+77
that they are deleted in an order that maintains the closure invariant. * Presence of a path in a temporary roots file does not imply that all paths in its closure are also present, so add the closure.
2005-01-31 * Don't delete active lock files.Eelco Dolstra1-0/+26
2005-01-31 * Start of concurrent garbage collection. Processes write temporaryEelco Dolstra1-97/+148
roots to a per-process temporary file in /nix/var/nix/temproots while holding a write lock on that file. The garbage collector acquires read locks on all those files, thus blocking further progress in other Nix processes, and reads the sets of temporary roots.