forked from lix-project/lix
libstore: de-callback-ify Store::queryRealisation
Change-Id: I8d74745c519518f163f51dfaa39063836f17599e
This commit is contained in:
parent
17965bf11c
commit
28a98d152c
|
@ -716,65 +716,36 @@ ref<const ValidPathInfo> Store::queryPathInfo(const StorePath & storePath)
|
||||||
return ref<const ValidPathInfo>(info);
|
return ref<const ValidPathInfo>(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Store::queryRealisation(const DrvOutput & id,
|
|
||||||
Callback<std::shared_ptr<const Realisation>> callback) noexcept
|
|
||||||
{
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (diskCache) {
|
|
||||||
auto [cacheOutcome, maybeCachedRealisation]
|
|
||||||
= diskCache->lookupRealisation(getUri(), id);
|
|
||||||
switch (cacheOutcome) {
|
|
||||||
case NarInfoDiskCache::oValid:
|
|
||||||
debug("Returning a cached realisation for %s", id.to_string());
|
|
||||||
callback(maybeCachedRealisation);
|
|
||||||
return;
|
|
||||||
case NarInfoDiskCache::oInvalid:
|
|
||||||
debug(
|
|
||||||
"Returning a cached missing realisation for %s",
|
|
||||||
id.to_string());
|
|
||||||
callback(nullptr);
|
|
||||||
return;
|
|
||||||
case NarInfoDiskCache::oUnknown:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (...) {
|
|
||||||
return callback.rethrow();
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
auto info = queryRealisationUncached(id);
|
|
||||||
|
|
||||||
if (diskCache) {
|
|
||||||
if (info)
|
|
||||||
diskCache->upsertRealisation(getUri(), *info);
|
|
||||||
else
|
|
||||||
diskCache->upsertAbsentRealisation(getUri(), id);
|
|
||||||
}
|
|
||||||
|
|
||||||
callback(std::shared_ptr<const Realisation>(info));
|
|
||||||
|
|
||||||
} catch (...) {
|
|
||||||
callback.rethrow();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::shared_ptr<const Realisation> Store::queryRealisation(const DrvOutput & id)
|
std::shared_ptr<const Realisation> Store::queryRealisation(const DrvOutput & id)
|
||||||
{
|
{
|
||||||
using RealPtr = std::shared_ptr<const Realisation>;
|
|
||||||
std::promise<RealPtr> promise;
|
|
||||||
|
|
||||||
queryRealisation(id,
|
if (diskCache) {
|
||||||
{[&](std::future<RealPtr> result) {
|
auto [cacheOutcome, maybeCachedRealisation]
|
||||||
try {
|
= diskCache->lookupRealisation(getUri(), id);
|
||||||
promise.set_value(result.get());
|
switch (cacheOutcome) {
|
||||||
} catch (...) {
|
case NarInfoDiskCache::oValid:
|
||||||
promise.set_exception(std::current_exception());
|
debug("Returning a cached realisation for %s", id.to_string());
|
||||||
}
|
return maybeCachedRealisation;
|
||||||
}});
|
case NarInfoDiskCache::oInvalid:
|
||||||
|
debug(
|
||||||
|
"Returning a cached missing realisation for %s",
|
||||||
|
id.to_string());
|
||||||
|
return nullptr;
|
||||||
|
case NarInfoDiskCache::oUnknown:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return promise.get_future().get();
|
auto info = queryRealisationUncached(id);
|
||||||
|
|
||||||
|
if (diskCache) {
|
||||||
|
if (info)
|
||||||
|
diskCache->upsertRealisation(getUri(), *info);
|
||||||
|
else
|
||||||
|
diskCache->upsertAbsentRealisation(getUri(), id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Store::substitutePaths(const StorePathSet & paths)
|
void Store::substitutePaths(const StorePathSet & paths)
|
||||||
|
|
|
@ -371,12 +371,6 @@ public:
|
||||||
*/
|
*/
|
||||||
std::shared_ptr<const Realisation> queryRealisation(const DrvOutput &);
|
std::shared_ptr<const Realisation> queryRealisation(const DrvOutput &);
|
||||||
|
|
||||||
/**
|
|
||||||
* Asynchronous version of queryRealisation().
|
|
||||||
*/
|
|
||||||
void queryRealisation(const DrvOutput &,
|
|
||||||
Callback<std::shared_ptr<const Realisation>> callback) noexcept;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether the given valid path info is sufficiently attested, by
|
* Check whether the given valid path info is sufficiently attested, by
|
||||||
|
|
Loading…
Reference in a new issue