1
0
mirror of https://github.com/ohwgiles/laminar.git synced 2024-10-27 20:34:20 +00:00

fix LAST_RESULT env var

the variable was set too late to be passed to the forked
process.

resolves #131
This commit is contained in:
Oliver Giles 2020-09-20 09:10:28 +12:00
parent 4b62e6dbf3
commit 6d2c0b208b
3 changed files with 9 additions and 8 deletions

View File

@ -618,16 +618,19 @@ bool Laminar::tryStartRun(std::shared_ptr<Run> run, int queueIndex) {
std::shared_ptr<Context> ctx = sc.second; std::shared_ptr<Context> ctx = sc.second;
if(ctx->canQueue(jobContexts.at(run->name))) { if(ctx->canQueue(jobContexts.at(run->name))) {
kj::Promise<RunState> onRunFinished = run->start(buildNums[run->name] + 1, ctx, *fsHome,[this](kj::Maybe<pid_t>& pid){return srv.onChildExit(pid);}); RunState lastResult = RunState::UNKNOWN;
ctx->busyExecutors++;
// set the last known result if exists // set the last known result if exists
db->stmt("SELECT result FROM builds WHERE name = ? ORDER BY completedAt DESC LIMIT 1") db->stmt("SELECT result FROM builds WHERE name = ? ORDER BY completedAt DESC LIMIT 1")
.bind(run->name) .bind(run->name)
.fetch<int>([=](int result){ .fetch<int>([&](int result){
run->lastResult = RunState(result); lastResult = RunState(result);
}); });
kj::Promise<RunState> onRunFinished = run->start(buildNums[run->name] + 1, lastResult, ctx, *fsHome,[this](kj::Maybe<pid_t>& pid){return srv.onChildExit(pid);});
ctx->busyExecutors++;
kj::Promise<void> exec = srv.readDescriptor(run->output_fd, [this, run](const char*b, size_t n){ kj::Promise<void> exec = srv.readDescriptor(run->output_fd, [this, run](const char*b, size_t n){
// handle log output // handle log output
std::string s(b, n); std::string s(b, n);

View File

@ -46,7 +46,6 @@ std::string to_string(const RunState& rs) {
Run::Run(std::string name, ParamMap pm, kj::Path&& rootPath) : Run::Run(std::string name, ParamMap pm, kj::Path&& rootPath) :
result(RunState::SUCCESS), result(RunState::SUCCESS),
lastResult(RunState::UNKNOWN),
name(name), name(name),
params(kj::mv(pm)), params(kj::mv(pm)),
queuedAt(time(nullptr)), queuedAt(time(nullptr)),
@ -84,7 +83,7 @@ static void setEnvFromFile(const kj::Path& rootPath, kj::Path file) {
} }
} }
kj::Promise<RunState> Run::start(uint buildNum, std::shared_ptr<Context> ctx, const kj::Directory &fsHome, std::function<kj::Promise<int>(kj::Maybe<pid_t>&)> getPromise) kj::Promise<RunState> Run::start(uint buildNum, RunState lastResult, std::shared_ptr<Context> ctx, const kj::Directory &fsHome, std::function<kj::Promise<int>(kj::Maybe<pid_t>&)> getPromise)
{ {
kj::Path cfgDir{"cfg"}; kj::Path cfgDir{"cfg"};

View File

@ -57,7 +57,7 @@ public:
Run(const Run&) = delete; Run(const Run&) = delete;
Run& operator=(const Run&) = delete; Run& operator=(const Run&) = delete;
kj::Promise<RunState> start(uint buildNum, std::shared_ptr<Context> ctx, const kj::Directory &fsHome, std::function<kj::Promise<int>(kj::Maybe<pid_t>&)> getPromise); kj::Promise<RunState> start(uint buildNum, RunState lastResult, std::shared_ptr<Context> ctx, const kj::Directory &fsHome, std::function<kj::Promise<int>(kj::Maybe<pid_t>&)> getPromise);
// aborts this run // aborts this run
bool abort(); bool abort();
@ -69,7 +69,6 @@ public:
std::shared_ptr<Context> context; std::shared_ptr<Context> context;
RunState result; RunState result;
RunState lastResult;
std::string name; std::string name;
std::string parentName; std::string parentName;
int parentBuild = 0; int parentBuild = 0;