diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2007-01-14T16·24+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2007-01-14T16·24+0000 |
commit | 8f67b3588603483402440538d7dc326451bbe60d (patch) | |
tree | 4c72877a8e2ea20379249eff1555d9eb6c7b600e /src | |
parent | 8659edc0981373a42f123cd7d84b9925be0123bc (diff) |
* Make the garbage collector more resilient to certain consistency
errors: in-use paths now cause a warning, not a fatal error.
Diffstat (limited to 'src')
-rw-r--r-- | src/libstore/gc.cc | 10 | ||||
-rw-r--r-- | src/libstore/local-store.cc | 2 | ||||
-rw-r--r-- | src/libstore/local-store.hh | 2 |
3 files changed, 10 insertions, 4 deletions
diff --git a/src/libstore/gc.cc b/src/libstore/gc.cc index e867feeda8df..fa3b84b7afc9 100644 --- a/src/libstore/gc.cc +++ b/src/libstore/gc.cc @@ -599,9 +599,13 @@ void LocalStore::collectGarbage(GCAction action, const PathSet & pathsToDelete, printMsg(lvlInfo, format("deleting `%1%'") % *i); /* Okay, it's safe to delete. */ - unsigned long long freed; - deleteFromStore(*i, freed); - bytesFreed += freed; + try { + unsigned long long freed; + deleteFromStore(*i, freed); + bytesFreed += freed; + } catch (PathInUse & e) { + printMsg(lvlError, format("warning: %1%") % e.msg()); + } #ifndef __CYGWIN__ if (fdLock != -1) diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 1bed672d2c9a..b679ffb4fa7c 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -709,7 +709,7 @@ void deleteFromStore(const Path & _path, unsigned long long & bytesFreed) for (PathSet::iterator i = referrers.begin(); i != referrers.end(); ++i) if (*i != path && isValidPathTxn(txn, *i)) - throw Error(format("cannot delete path `%1%' because it is in use by path `%2%'") % path % *i); + throw PathInUse(format("cannot delete path `%1%' because it is in use by path `%2%'") % path % *i); invalidatePath(txn, path); } txn.commit(); diff --git a/src/libstore/local-store.hh b/src/libstore/local-store.hh index 8f4ed8fc82ba..83cb87d451a7 100644 --- a/src/libstore/local-store.hh +++ b/src/libstore/local-store.hh @@ -138,6 +138,8 @@ Path queryDeriver(const Transaction & txn, const Path & path); /* Delete a value from the nixStore directory. */ void deleteFromStore(const Path & path, unsigned long long & bytesFreed); +MakeError(PathInUse, Error); + void verifyStore(bool checkContents); /* Whether we are in build users mode. */ |