21 kj::Promise<Outcome<void, Goal::WorkResult>> promise;
27struct [[nodiscard]] HookReply
29 std::variant<HookReplyBase::Accept, HookReplyBase::Decline, HookReplyBase::Postpone>
32 using variant::variant;
52 return status == PathStatus::Valid;
58 return status == PathStatus::Corrupt
59 || status == PathStatus::Valid;
66 std::optional<InitialOutputStatus> known = {};
72struct DerivationGoal :
public Goal
115 OutputsUnmodifedDontNeed,
134 bool anyHashMismatchSeen =
false;
135 bool anyCheckMismatchSeen =
false;
166 std::unique_ptr<Derivation>
drv;
168 std::unique_ptr<ParsedDerivation> parsedDrv;
185 std::map<std::string, InitialOutput> initialOutputs;
196 std::shared_ptr<BufferedSink> logFileSink, logSink;
208 std::string currentLogLine;
209 size_t currentLogLinePos = 0;
211 std::string currentHookLine;
216 std::unique_ptr<HookInstance>
hook;
234 std::unique_ptr<Activity> act;
241 std::map<ActivityId, Activity> builderActivities;
249 struct DrvHasRoot {
explicit DrvHasRoot() =
default; };
253 BuildMode buildMode = bmNormal);
256 BuildMode buildMode = bmNormal);
257 virtual ~DerivationGoal() noexcept(false);
261 kj::Promise<Result<
WorkResult>> workImpl() noexcept override;
272 kj::Promise<Result<
WorkResult>> loadDerivation() noexcept;
273 kj::Promise<Result<
WorkResult>> haveDerivation() noexcept;
274 kj::Promise<Result<
WorkResult>> outputsSubstitutionTried() noexcept;
275 kj::Promise<Result<
WorkResult>> gaveUpOnSubstitution() noexcept;
276 kj::Promise<Result<
WorkResult>> closureRepaired() noexcept;
277 kj::Promise<Result<
WorkResult>> inputsRealised() noexcept;
278 kj::Promise<Result<
WorkResult>> tryToBuild() noexcept;
279 virtual kj::Promise<Result<
WorkResult>> tryLocalBuild() noexcept;
280 kj::Promise<Result<
WorkResult>> buildDone() noexcept;
282 kj::Promise<Result<
WorkResult>> resolvedFinished() noexcept;
289 virtual
int getChildStatus();
321 virtual void cleanupPreChildKill();
322 virtual void cleanupPostChildKill();
323 virtual bool cleanupDecideWhetherDiskFull();
324 virtual void cleanupPostOutputsRegisteredModeCheck();
325 virtual void cleanupPostOutputsRegisteredModeNonCheck();
328 kj::TimePoint lastChildActivity = kj::minValue;
330 kj::Promise<Outcome<void, WorkResult>> handleChildOutput() noexcept;
331 kj::Promise<Outcome<
void, WorkResult>>
332 handleChildStreams(InputStream & builderIn, InputStream * hookIn) noexcept;
333 kj::Promise<Outcome<
void, WorkResult>> handleBuilderOutput(InputStream & in) noexcept;
334 kj::Promise<Outcome<
void, WorkResult>> handleHookOutput(InputStream & in) noexcept;
335 kj::Promise<Outcome<
void, WorkResult>> monitorForSilence() noexcept;
336 WorkResult tooMuchLogs();
346 kj::Promise<Result<OutputPathMap>> queryDerivationOutputMap();
367 kj::Promise<Result<WorkResult>> repairClosure() noexcept;
374 std::optional<Error> ex = {});
376 void waiteeDone(GoalPtr waitee)
override;
378 virtual bool respectsTimeouts()
383 StorePathSet exportReferences(
const StorePathSet & storePaths);
390MakeError(NotDeterministic, BuildError);
Definition file-descriptor.hh:51
Definition notifying-counter.hh:19
PathStatus
Definition derivation-goal.hh:39
JobCategory
Definition goal.hh:36
@ Build
Definition goal.hh:40
std::map< OutputName, Realisation > SingleDrvOutputs
Definition realisation.hh:89
Definition derivations.hh:274
Definition build-result.hh:17
Definition derivation-goal.hh:249
std::unique_ptr< HookInstance > hook
Definition derivation-goal.hh:216
JobCategory jobCategory() const override
Hint for the scheduler, which concurrency limit applies.
Definition derivation-goal.hh:385
bool addWantedOutputs(const OutputsSpec &outputs)
Definition derivation-goal.cc:138
std::optional< PathLocks > outputLocks
Definition derivation-goal.hh:177
std::unique_ptr< Derivation > drv
Definition derivation-goal.hh:166
unsigned long logSize
Definition derivation-goal.hh:201
HookReply tryBuildHook()
Definition derivation-goal.cc:1234
bool isDone
Definition derivation-goal.hh:80
kj::Promise< Result< SingleDrvOutputs > > assertPathValidity()
Definition derivation-goal.cc:1745
kj::Promise< Result< std::map< std::string, std::optional< StorePath > > > > queryPartialDerivationOutputMap()
Definition derivation-goal.cc:1621
void closeLogFile()
Definition derivation-goal.cc:1384
virtual kj::Promise< Result< SingleDrvOutputs > > registerOutputs()
Definition derivation-goal.cc:1338
Path openLogFile()
Definition derivation-goal.cc:1350
NeedRestartForMoreOutputs needRestart
Definition derivation-goal.hh:132
kj::Promise< Result< std::pair< bool, SingleDrvOutputs > > > checkPathValidity()
Definition derivation-goal.cc:1663
std::optional< DerivationType > derivationType
Definition derivation-goal.hh:228
NeedRestartForMoreOutputs
Definition derivation-goal.hh:110
@ BuildInProgressWillNotNeed
Definition derivation-goal.hh:126
@ OutputsAddedDoNeed
Definition derivation-goal.hh:120
virtual void cleanupHookFinally()
Definition derivation-goal.cc:929
RetrySubstitution retrySubstitution
Definition derivation-goal.hh:161
std::map< std::pair< StorePath, std::string >, StorePath > inputDrvOutputs
Definition derivation-goal.hh:105
AutoCloseFD * builderOutFD
Definition derivation-goal.hh:223
OutputsSpec wantedOutputs
Definition derivation-goal.hh:98
kj::Promise< Result< WorkResult > > getDerivation() noexcept
Definition derivation-goal.cc:164
AutoCloseFD fdLogFile
Definition derivation-goal.hh:195
std::shared_ptr< DerivationGoal > resolvedDrvGoal
Definition derivation-goal.hh:93
RetrySubstitution
Definition derivation-goal.hh:140
@ YesNeed
Definition derivation-goal.hh:149
@ NoNeed
Definition derivation-goal.hh:144
@ AlreadyRetried
Definition derivation-goal.hh:154
StorePathSet inputPaths
Definition derivation-goal.hh:183
virtual void closeReadPipes()
Definition derivation-goal.cc:921
std::unique_ptr< Activity > actLock
Definition derivation-goal.hh:239
virtual void killChild()
Definition derivation-goal.cc:111
bool useDerivation
Definition derivation-goal.hh:85
std::list< std::string > logTail
Definition derivation-goal.hh:206
BuildResult buildResult
Definition derivation-goal.hh:190
std::string machineName
Definition derivation-goal.hh:246
virtual void signRealisation(Realisation &)
Definition derivation-goal.hh:305
StorePath drvPath
Definition derivation-goal.hh:88
const bool isDependency
Definition goal.hh:61
Worker & worker
Definition goal.hh:54
Definition hook-instance.hh:11
Definition derivation-goal.hh:20
Definition derivation-goal.hh:23
Definition derivation-goal.hh:24
Definition derivation-goal.hh:19
Definition derivation-goal.hh:30
Definition derivation-goal.hh:45
bool isPresent() const
Definition derivation-goal.hh:57
bool isValid() const
Definition derivation-goal.hh:51
Definition derivation-goal.hh:63
Definition outputs-spec.hh:28
Definition realisation.hh:49
std::string Path
Definition types.hh:28