mirror of
https://github.com/NixOS/nix.git
synced 2025-11-17 07:52:43 +01: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
|
|
@ -141,7 +141,7 @@ void RemoteStore::setOptions(ref<Connection> conn)
|
|||
}
|
||||
|
||||
|
||||
bool RemoteStore::isValidPath(const Path & path)
|
||||
bool RemoteStore::isValidPathUncached(const Path & path)
|
||||
{
|
||||
auto conn(connections->get());
|
||||
conn->to << wopIsValidPath << path;
|
||||
|
|
@ -239,48 +239,27 @@ void RemoteStore::querySubstitutablePathInfos(const PathSet & paths,
|
|||
}
|
||||
|
||||
|
||||
ValidPathInfo RemoteStore::queryPathInfo(const Path & path)
|
||||
std::shared_ptr<ValidPathInfo> RemoteStore::queryPathInfoUncached(const Path & path)
|
||||
{
|
||||
auto conn(connections->get());
|
||||
conn->to << wopQueryPathInfo << path;
|
||||
conn->processStderr();
|
||||
ValidPathInfo info;
|
||||
info.path = path;
|
||||
info.deriver = readString(conn->from);
|
||||
if (info.deriver != "") assertStorePath(info.deriver);
|
||||
info.narHash = parseHash(htSHA256, readString(conn->from));
|
||||
info.references = readStorePaths<PathSet>(conn->from);
|
||||
info.registrationTime = readInt(conn->from);
|
||||
info.narSize = readLongLong(conn->from);
|
||||
auto info = std::make_shared<ValidPathInfo>();
|
||||
info->path = path;
|
||||
info->deriver = readString(conn->from);
|
||||
if (info->deriver != "") assertStorePath(info->deriver);
|
||||
info->narHash = parseHash(htSHA256, readString(conn->from));
|
||||
info->references = readStorePaths<PathSet>(conn->from);
|
||||
info->registrationTime = readInt(conn->from);
|
||||
info->narSize = readLongLong(conn->from);
|
||||
if (GET_PROTOCOL_MINOR(conn->daemonVersion) >= 16) {
|
||||
info.ultimate = readInt(conn->from) != 0;
|
||||
info.sigs = readStrings<StringSet>(conn->from);
|
||||
info->ultimate = readInt(conn->from) != 0;
|
||||
info->sigs = readStrings<StringSet>(conn->from);
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
|
||||
Hash RemoteStore::queryPathHash(const Path & path)
|
||||
{
|
||||
auto conn(connections->get());
|
||||
conn->to << wopQueryPathHash << path;
|
||||
conn->processStderr();
|
||||
string hash = readString(conn->from);
|
||||
return parseHash(htSHA256, hash);
|
||||
}
|
||||
|
||||
|
||||
void RemoteStore::queryReferences(const Path & path,
|
||||
PathSet & references)
|
||||
{
|
||||
auto conn(connections->get());
|
||||
conn->to << wopQueryReferences << path;
|
||||
conn->processStderr();
|
||||
PathSet references2 = readStorePaths<PathSet>(conn->from);
|
||||
references.insert(references2.begin(), references2.end());
|
||||
}
|
||||
|
||||
|
||||
void RemoteStore::queryReferrers(const Path & path,
|
||||
PathSet & referrers)
|
||||
{
|
||||
|
|
@ -292,17 +271,6 @@ void RemoteStore::queryReferrers(const Path & path,
|
|||
}
|
||||
|
||||
|
||||
Path RemoteStore::queryDeriver(const Path & path)
|
||||
{
|
||||
auto conn(connections->get());
|
||||
conn->to << wopQueryDeriver << path;
|
||||
conn->processStderr();
|
||||
Path drvPath = readString(conn->from);
|
||||
if (drvPath != "") assertStorePath(drvPath);
|
||||
return drvPath;
|
||||
}
|
||||
|
||||
|
||||
PathSet RemoteStore::queryValidDerivers(const Path & path)
|
||||
{
|
||||
auto conn(connections->get());
|
||||
|
|
@ -517,6 +485,12 @@ void RemoteStore::collectGarbage(const GCOptions & options, GCResults & results)
|
|||
results.paths = readStrings<PathSet>(conn->from);
|
||||
results.bytesFreed = readLongLong(conn->from);
|
||||
readLongLong(conn->from); // obsolete
|
||||
|
||||
{
|
||||
auto state_(Store::state.lock());
|
||||
state_->pathInfoCache.clear();
|
||||
stats.pathInfoCacheSize = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue