LegacySSHStore: Provide a faster implementation of computeFSClosure()
This avoids the latency of the standard implementation, which can make a huge difference (e.g. 16.5s -> 0.5s on a NixOS system closure).
This commit is contained in:
parent
7a716ef2a5
commit
ea7fa88131
|
@ -204,6 +204,28 @@ struct LegacySSHStore : public Store
|
||||||
bool isTrusted() override
|
bool isTrusted() override
|
||||||
{ return true; }
|
{ return true; }
|
||||||
|
|
||||||
|
void computeFSClosure(const PathSet & paths,
|
||||||
|
PathSet & out, bool flipDirection = false,
|
||||||
|
bool includeOutputs = false, bool includeDerivers = false) override
|
||||||
|
{
|
||||||
|
if (flipDirection || includeDerivers) {
|
||||||
|
Store::computeFSClosure(paths, out, flipDirection, includeOutputs, includeDerivers);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto conn(connections->get());
|
||||||
|
|
||||||
|
conn->to
|
||||||
|
<< cmdQueryClosure
|
||||||
|
<< includeOutputs
|
||||||
|
<< paths;
|
||||||
|
conn->to.flush();
|
||||||
|
|
||||||
|
auto res = readStorePaths<PathSet>(*this, conn->from);
|
||||||
|
|
||||||
|
out.insert(res.begin(), res.end());
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static RegisterStoreImplementation regStore([](
|
static RegisterStoreImplementation regStore([](
|
||||||
|
|
|
@ -511,7 +511,7 @@ public:
|
||||||
`storePath' is returned; that is, the closures under the
|
`storePath' is returned; that is, the closures under the
|
||||||
`referrers' relation instead of the `references' relation is
|
`referrers' relation instead of the `references' relation is
|
||||||
returned. */
|
returned. */
|
||||||
void computeFSClosure(const PathSet & paths,
|
virtual void computeFSClosure(const PathSet & paths,
|
||||||
PathSet & out, bool flipDirection = false,
|
PathSet & out, bool flipDirection = false,
|
||||||
bool includeOutputs = false, bool includeDerivers = false);
|
bool includeOutputs = false, bool includeDerivers = false);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue