Nix 2.26.3
Nix, the purely functional package manager; unstable internal interfaces
 
Loading...
Searching...
No Matches
derivation-goal.hh
Go to the documentation of this file.
1#pragma once
3
5#ifndef _WIN32
6# include "user-lock.hh"
7#endif
8#include "outputs-spec.hh"
9#include "store-api.hh"
10#include "pathlocks.hh"
11#include "goal.hh"
12
13namespace nix {
14
15using std::map;
16
17#ifndef _WIN32 // TODO enable build hook on Windows
18struct HookInstance;
19#endif
20
21typedef enum {rpAccept, rpDecline, rpPostpone} HookReply;
22
27enum struct PathStatus {
28 Corrupt,
29 Absent,
30 Valid,
31};
32
34 StorePath path;
35 PathStatus status;
39 bool isValid() const {
40 return status == PathStatus::Valid;
41 }
42
45 bool isPresent() const {
46 return status == PathStatus::Corrupt
47 || status == PathStatus::Valid;
48 }
49};
50
52 bool wanted;
53 Hash outputHash;
54 std::optional<InitialOutputStatus> known;
55};
56
60struct DerivationGoal : public Goal
61{
66
69
73 std::shared_ptr<DerivationGoal> resolvedDrvGoal;
74
79
85 std::map<std::pair<StorePath, std::string>, StorePath> inputDrvOutputs;
86
108
113
133
139
143 std::unique_ptr<Derivation> drv;
144
145 std::unique_ptr<ParsedDerivation> parsedDrv;
146
150
155
160 StorePathSet inputPaths;
161
162 std::map<std::string, InitialOutput> initialOutputs;
163
168 std::shared_ptr<BufferedSink> logFileSink, logSink;
169
173 unsigned long logSize;
174
178 std::list<std::string> logTail;
179
180 std::string currentLogLine;
181 size_t currentLogLinePos = 0; // to handle carriage return
182
183 std::string currentHookLine;
184
185#ifndef _WIN32 // TODO enable build hook on Windows
189 std::unique_ptr<HookInstance> hook;
190#endif
191
195 std::optional<DerivationType> derivationType;
196
197 BuildMode buildMode;
198
199 std::unique_ptr<MaintainCount<uint64_t>> mcExpectedBuilds, mcRunningBuilds;
200
201 std::unique_ptr<Activity> act;
202
206 std::unique_ptr<Activity> actLock;
207
208 std::map<ActivityId, Activity> builderActivities;
209
213 std::string machineName;
214
215 DerivationGoal(const StorePath & drvPath,
217 BuildMode buildMode = bmNormal);
218 DerivationGoal(const StorePath & drvPath, const BasicDerivation & drv,
220 BuildMode buildMode = bmNormal);
221 virtual ~DerivationGoal();
222
223 void timedOut(Error && ex) override;
224
225 std::string key() override;
226
230 void addWantedOutputs(const OutputsSpec & outputs);
231
235 Co init() override;
236 Co getDerivation();
237 Co loadDerivation();
238 Co haveDerivation();
239 Co outputsSubstitutionTried();
240 Co gaveUpOnSubstitution();
241 Co closureRepaired();
242 Co inputsRealised();
243 Co tryToBuild();
244 virtual Co tryLocalBuild();
245 Co buildDone();
246
247 Co resolvedFinished();
248
252 HookReply tryBuildHook();
253
254 virtual int getChildStatus();
255
261
266
270 virtual void signRealisation(Realisation&) {}
271
275 void closeLogFile();
276
280 virtual void closeReadPipes();
281
285 virtual void cleanupHookFinally();
286 virtual void cleanupPreChildKill();
287 virtual void cleanupPostChildKill();
288 virtual bool cleanupDecideWhetherDiskFull();
289 virtual void cleanupPostOutputsRegisteredModeCheck();
290 virtual void cleanupPostOutputsRegisteredModeNonCheck();
291
292 virtual bool isReadDesc(Descriptor fd);
293
297 void handleChildOutput(Descriptor fd, std::string_view data) override;
298 void handleEOF(Descriptor fd) override;
299 void flushLine();
300
306 std::map<std::string, std::optional<StorePath>> queryPartialDerivationOutputMap();
307 OutputPathMap queryDerivationOutputMap();
308
315 std::pair<bool, SingleDrvOutputs> checkPathValidity();
316
322
326 virtual void killChild();
327
328 Co repairClosure();
329
330 void started();
331
332 Done done(
334 SingleDrvOutputs builtOutputs = {},
335 std::optional<Error> ex = {});
336
337 void waiteeDone(GoalPtr waitee, ExitCode result) override;
338
339 StorePathSet exportReferences(const StorePathSet & storePaths);
340
341 JobCategory jobCategory() const override {
342 return JobCategory::Build;
343 };
344};
345
346MakeError(NotDeterministic, BuildError);
347
348}
Definition file-descriptor.hh:152
Definition pathlocks.hh:25
Definition path.hh:27
Definition worker.hh:65
PathStatus
Definition derivation-goal.hh:27
int Descriptor
Definition file-descriptor.hh:20
JobCategory
Definition goal.hh:44
@ Build
Definition goal.hh:48
std::variant< std::string, std::string_view > data
Definition lexer.l:177
unsigned int status
Definition lexer.l:663
return fd
Definition lexer.l:2948
std::map< OutputName, Realisation > SingleDrvOutputs
Definition realisation.hh:87
Definition derivations.hh:285
Status
Definition build-result.hh:21
std::unique_ptr< HookInstance > hook
Definition derivation-goal.hh:189
JobCategory jobCategory() const override
Hint for the scheduler, which concurrency limit applies.
Definition derivation-goal.hh:341
std::unique_ptr< Derivation > drv
Definition derivation-goal.hh:143
unsigned long logSize
Definition derivation-goal.hh:173
HookReply tryBuildHook()
Definition derivation-goal.cc:1127
void closeLogFile()
Definition derivation-goal.cc:1290
SingleDrvOutputs assertPathValidity()
Definition derivation-goal.cc:1517
void handleChildOutput(Descriptor fd, std::string_view data) override
Definition derivation-goal.cc:1309
Path openLogFile()
Definition derivation-goal.cc:1252
Co init() override
Definition derivation-goal.cc:39
NeedRestartForMoreOutputs needRestart
Definition derivation-goal.hh:112
std::optional< DerivationType > derivationType
Definition derivation-goal.hh:195
NeedRestartForMoreOutputs
Definition derivation-goal.hh:90
@ OutputsUnmodifedDontNeed
Definition derivation-goal.hh:95
@ BuildInProgressWillNotNeed
Definition derivation-goal.hh:106
@ OutputsAddedDoNeed
Definition derivation-goal.hh:100
virtual void cleanupHookFinally()
Definition derivation-goal.cc:841
RetrySubstitution retrySubstitution
Definition derivation-goal.hh:138
std::map< std::pair< StorePath, std::string >, StorePath > inputDrvOutputs
Definition derivation-goal.hh:85
OutputsSpec wantedOutputs
Definition derivation-goal.hh:78
void timedOut(Error &&ex) override
Definition derivation-goal.cc:115
virtual SingleDrvOutputs registerOutputs()
Definition derivation-goal.cc:1240
PathLocks outputLocks
Definition derivation-goal.hh:154
std::pair< bool, SingleDrvOutputs > checkPathValidity()
Definition derivation-goal.cc:1437
void addWantedOutputs(const OutputsSpec &outputs)
Definition derivation-goal.cc:123
AutoCloseFD fdLogFile
Definition derivation-goal.hh:167
std::shared_ptr< DerivationGoal > resolvedDrvGoal
Definition derivation-goal.hh:73
RetrySubstitution
Definition derivation-goal.hh:117
@ YesNeed
Definition derivation-goal.hh:126
@ NoNeed
Definition derivation-goal.hh:121
@ AlreadyRetried
Definition derivation-goal.hh:131
StorePathSet inputPaths
Definition derivation-goal.hh:160
virtual void closeReadPipes()
Definition derivation-goal.cc:832
std::unique_ptr< Activity > actLock
Definition derivation-goal.hh:206
virtual void killChild()
Definition derivation-goal.cc:107
bool useDerivation
Definition derivation-goal.hh:65
std::list< std::string > logTail
Definition derivation-goal.hh:178
std::map< std::string, std::optional< StorePath > > queryPartialDerivationOutputMap()
Definition derivation-goal.cc:1404
std::string machineName
Definition derivation-goal.hh:213
virtual void signRealisation(Realisation &)
Definition derivation-goal.hh:270
StorePath drvPath
Definition derivation-goal.hh:68
Definition goal.hh:182
std::optional< Error > ex
Definition goal.hh:379
Worker & worker
Definition goal.hh:62
Definition hash.hh:45
Definition derivation-goal.hh:33
bool isPresent() const
Definition derivation-goal.hh:45
bool isValid() const
Definition derivation-goal.hh:39
Definition derivation-goal.hh:51
Definition outputs-spec.hh:26
Definition realisation.hh:49
std::string Path
Definition types.hh:22