diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-03-26T18·43+0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-03-26T18·43+0200 |
commit | 117670be570d775a18e4e35db3dae00abc24f729 (patch) | |
tree | 426cc5f0185457c719eee2287b769202311784d8 /src/libstore/local-store.cc | |
parent | 8be1979f1ae4b85c36988f7b3cf8240c9682dc54 (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.cc')
-rw-r--r-- | src/libstore/local-store.cc | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index f3b779dd05f3..1ab9d15eb66b 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -1380,11 +1380,8 @@ Paths LocalStore::importPaths(bool requireSignature, Source & source) } -void LocalStore::deleteFromStore(const Path & path, unsigned long long & bytesFreed, - unsigned long long & blocksFreed) +void LocalStore::invalidatePathChecked(const Path & path) { - bytesFreed = 0; - assertStorePath(path); while (1) { @@ -1404,8 +1401,6 @@ void LocalStore::deleteFromStore(const Path & path, unsigned long long & bytesFr break; } catch (SQLiteBusy & e) { }; } - - deletePathWrapped(path, bytesFreed, blocksFreed); } |