mirror of
https://github.com/NixOS/nix
synced 2025-07-07 01:51:47 +02:00
Move path info caching from BinaryCacheStore to Store
Caching path info is generally useful. For instance, it speeds up "nix path-info -rS /run/current-system" (i.e. showing the closure sizes of all paths in the closure of the current system) from 5.6s to 0.15s. This also eliminates some APIs like Store::queryDeriver() and Store::queryReferences().
This commit is contained in:
parent
608b0265e1
commit
e0204f8d46
21 changed files with 318 additions and 353 deletions
|
@ -2724,7 +2724,7 @@ void DerivationGoal::registerOutputs()
|
|||
|
||||
if (buildMode == bmCheck) {
|
||||
if (!worker.store.isValidPath(path)) continue;
|
||||
ValidPathInfo info = worker.store.queryPathInfo(path);
|
||||
auto info = *worker.store.queryPathInfo(path);
|
||||
if (hash.first != info.narHash) {
|
||||
if (settings.keepFailed) {
|
||||
Path dst = path + checkSuffix;
|
||||
|
@ -3778,14 +3778,14 @@ bool Worker::pathContentsGood(const Path & path)
|
|||
std::map<Path, bool>::iterator i = pathContentsGoodCache.find(path);
|
||||
if (i != pathContentsGoodCache.end()) return i->second;
|
||||
printMsg(lvlInfo, format("checking path ‘%1%’...") % path);
|
||||
ValidPathInfo info = store.queryPathInfo(path);
|
||||
auto info = store.queryPathInfo(path);
|
||||
bool res;
|
||||
if (!pathExists(path))
|
||||
res = false;
|
||||
else {
|
||||
HashResult current = hashPath(info.narHash.type, path);
|
||||
HashResult current = hashPath(info->narHash.type, path);
|
||||
Hash nullHash(htSHA256);
|
||||
res = info.narHash == nullHash || info.narHash == current.first;
|
||||
res = info->narHash == nullHash || info->narHash == current.first;
|
||||
}
|
||||
pathContentsGoodCache[path] = res;
|
||||
if (!res) printMsg(lvlError, format("path ‘%1%’ is corrupted or missing!") % path);
|
||||
|
@ -3881,7 +3881,7 @@ void LocalStore::repairPath(const Path & path)
|
|||
if (goal->getExitCode() != Goal::ecSuccess) {
|
||||
/* Since substituting the path didn't work, if we have a valid
|
||||
deriver, then rebuild the deriver. */
|
||||
Path deriver = queryDeriver(path);
|
||||
auto deriver = queryPathInfo(path)->deriver;
|
||||
if (deriver != "" && isValidPath(deriver)) {
|
||||
goals.clear();
|
||||
goals.insert(worker.makeDerivationGoal(deriver, StringSet(), bmRepair));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue