Remove the drv resolution caching mechanism
It isn't needed anymore now that don't need to eagerly resolve everything like we used to do. So we can safely get rid of it
This commit is contained in:
parent
4bc28c44f2
commit
f483b623e9
2 changed files with 1 additions and 37 deletions
|
@ -745,7 +745,7 @@ static void rewriteDerivation(Store & store, BasicDerivation & drv, const String
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<BasicDerivation> Derivation::tryResolveUncached(Store & store) {
|
std::optional<BasicDerivation> Derivation::tryResolve(Store & store) {
|
||||||
BasicDerivation resolved { *this };
|
BasicDerivation resolved { *this };
|
||||||
|
|
||||||
// Input paths that we'll want to rewrite in the derivation
|
// Input paths that we'll want to rewrite in the derivation
|
||||||
|
@ -776,36 +776,4 @@ std::optional<BasicDerivation> Derivation::tryResolveUncached(Store & store) {
|
||||||
return resolved;
|
return resolved;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<BasicDerivation> Derivation::tryResolve(Store& store)
|
|
||||||
{
|
|
||||||
auto drvPath = writeDerivation(store, *this, NoRepair, false);
|
|
||||||
return Derivation::tryResolve(store, drvPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::optional<BasicDerivation> Derivation::tryResolve(Store& store, const StorePath& drvPath)
|
|
||||||
{
|
|
||||||
// This is quite dirty and leaky, but will disappear once #4340 is merged
|
|
||||||
static Sync<std::map<StorePath, std::optional<Derivation>>> resolutionsCache;
|
|
||||||
|
|
||||||
debug("trying to resolve %s", store.printStorePath(drvPath));
|
|
||||||
|
|
||||||
{
|
|
||||||
auto resolutions = resolutionsCache.lock();
|
|
||||||
auto resolvedDrvIter = resolutions->find(drvPath);
|
|
||||||
if (resolvedDrvIter != resolutions->end()) {
|
|
||||||
auto & [_, resolvedDrv] = *resolvedDrvIter;
|
|
||||||
return *resolvedDrv;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Try resolve drv and use that path instead. */
|
|
||||||
auto drv = store.readDerivation(drvPath);
|
|
||||||
auto attempt = drv.tryResolveUncached(store);
|
|
||||||
if (!attempt)
|
|
||||||
return std::nullopt;
|
|
||||||
/* Store in memo table. */
|
|
||||||
resolutionsCache.lock()->insert_or_assign(drvPath, *attempt);
|
|
||||||
return *attempt;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,14 +138,10 @@ struct Derivation : BasicDerivation
|
||||||
|
|
||||||
2. Input placeholders are replaced with realized input store paths. */
|
2. Input placeholders are replaced with realized input store paths. */
|
||||||
std::optional<BasicDerivation> tryResolve(Store & store);
|
std::optional<BasicDerivation> tryResolve(Store & store);
|
||||||
static std::optional<BasicDerivation> tryResolve(Store & store, const StorePath & drvPath);
|
|
||||||
|
|
||||||
Derivation() = default;
|
Derivation() = default;
|
||||||
Derivation(const BasicDerivation & bd) : BasicDerivation(bd) { }
|
Derivation(const BasicDerivation & bd) : BasicDerivation(bd) { }
|
||||||
Derivation(BasicDerivation && bd) : BasicDerivation(std::move(bd)) { }
|
Derivation(BasicDerivation && bd) : BasicDerivation(std::move(bd)) { }
|
||||||
|
|
||||||
private:
|
|
||||||
std::optional<BasicDerivation> tryResolveUncached(Store & store);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue