aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/local-store.hh
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2012-03-26 20:43:33 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2012-03-26 20:43:33 +0200
commit117670be570d775a18e4e35db3dae00abc24f729 (patch)
tree426cc5f0185457c719eee2287b769202311784d8 /src/libstore/local-store.hh
parent8be1979f1ae4b85c36988f7b3cf8240c9682dc54 (diff)
Make the garbage collector more concurrent
Make the garbage collector more concurrent by deleting valid paths outside the region where we're holding the global GC lock. This should greatly reduce the time during which new builds are blocked, since the deletion accounts for the vast majority of the time spent in the GC. To ensure that this is safe, the valid paths are invalidated and renamed to some arbitrary path while we're holding the lock. This ensures that we when we finally delete the path, it's not a (newly) valid or locked path.
Diffstat (limited to 'src/libstore/local-store.hh')
-rw-r--r--src/libstore/local-store.hh9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/libstore/local-store.hh b/src/libstore/local-store.hh
index 2739c4eea..8e3cbe5ce 100644
--- a/src/libstore/local-store.hh
+++ b/src/libstore/local-store.hh
@@ -164,10 +164,6 @@ public:
void collectGarbage(const GCOptions & options, GCResults & results);
- /* Delete a path from the Nix store. */
- void deleteFromStore(const Path & path, unsigned long long & bytesFreed,
- unsigned long long & blocksFreed);
-
/* Optimise the disk space usage of the Nix store by hard-linking
files with the same contents. */
void optimiseStore(bool dryRun, OptimiseStats & stats);
@@ -238,6 +234,9 @@ private:
void invalidatePath(const Path & path);
+ /* Delete a path from the Nix store. */
+ void invalidatePathChecked(const Path & path);
+
void verifyPath(const Path & path, const PathSet & store,
PathSet & done, PathSet & validPaths);
@@ -249,6 +248,8 @@ private:
struct GCState;
+ void deleteGarbage(GCState & state, const Path & path);
+
bool tryToDelete(GCState & state, const Path & path);
bool isActiveTempFile(const GCState & state,