libstore: return relevant store path in goal result

we now do not need the goal pointers any more to process worker results.

Change-Id: I1a021b862ca666bcd23fee9f38973e90e6f94a72
This commit is contained in:
eldritch horrors 2024-10-20 22:55:00 +02:00
parent 67f1aafd61
commit b8cc54df0a
4 changed files with 17 additions and 9 deletions

View file

@ -127,11 +127,15 @@ Goal::WorkResult DerivationGoal::timedOut(Error && ex)
kj::Promise<Result<Goal::WorkResult>> DerivationGoal::workImpl() noexcept kj::Promise<Result<Goal::WorkResult>> DerivationGoal::workImpl() noexcept
{ {
return (useDerivation ? getDerivation() : haveDerivation()).attach(kj::defer([this] { KJ_DEFER({
act.reset(); act.reset();
actLock.reset(); actLock.reset();
builderActivities.clear(); builderActivities.clear();
})); });
BOOST_OUTCOME_CO_TRY(auto result, co_await (useDerivation ? getDerivation() : haveDerivation()));
result.storePath = drvPath;
co_return result;
} }
bool DerivationGoal::addWantedOutputs(const OutputsSpec & outputs) bool DerivationGoal::addWantedOutputs(const OutputsSpec & outputs)

View file

@ -33,10 +33,8 @@ void Store::buildPaths(const std::vector<DerivedPath> & reqs, BuildMode buildMod
ex = result.ex; ex = result.ex;
} }
if (result.exitCode != Goal::ecSuccess) { if (result.exitCode != Goal::ecSuccess) {
if (auto i2 = dynamic_cast<DerivationGoal *>(i.get())) if (result.storePath)
failed.insert(printStorePath(i2->drvPath)); failed.insert(printStorePath(*result.storePath));
else if (auto i2 = dynamic_cast<PathSubstitutionGoal *>(i.get()))
failed.insert(printStorePath(i2->storePath));
} }
} }

View file

@ -94,6 +94,9 @@ public:
bool timedOut = false; bool timedOut = false;
bool hashMismatch = false; bool hashMismatch = false;
bool checkMismatch = false; bool checkMismatch = false;
/// Store path this goal relates to. Will be set to drvPath for
/// derivations, or the substituted store path for substitions.
std::optional<StorePath> storePath = {};
}; };
protected: protected:

View file

@ -3,6 +3,7 @@
#include "nar-info.hh" #include "nar-info.hh"
#include "signals.hh" #include "signals.hh"
#include "finally.hh" #include "finally.hh"
#include <boost/outcome/try.hpp>
#include <kj/array.h> #include <kj/array.h>
#include <kj/vector.h> #include <kj/vector.h>
@ -54,7 +55,7 @@ try {
/* If the path already exists we're done. */ /* If the path already exists we're done. */
if (!repair && worker.store.isValidPath(storePath)) { if (!repair && worker.store.isValidPath(storePath)) {
return {done(ecSuccess, BuildResult::AlreadyValid)}; co_return done(ecSuccess, BuildResult::AlreadyValid);
} }
if (settings.readOnlyMode) if (settings.readOnlyMode)
@ -62,9 +63,11 @@ try {
subs = settings.useSubstitutes ? getDefaultSubstituters() : std::list<ref<Store>>(); subs = settings.useSubstitutes ? getDefaultSubstituters() : std::list<ref<Store>>();
return tryNext(); BOOST_OUTCOME_CO_TRY(auto result, co_await tryNext());
result.storePath = storePath;
co_return result;
} catch (...) { } catch (...) {
return {std::current_exception()}; co_return result::failure(std::current_exception());
} }