From dbc75000a5cf5edf3e9e3bbb3555552811c5bb22 Mon Sep 17 00:00:00 2001 From: Oliver Giles Date: Sat, 19 Sep 2015 15:41:19 +0200 Subject: [PATCH] readability: move runFinished into its own function --- src/laminar.cpp | 76 ++++++++++++++++++++++++++----------------------- src/laminar.h | 1 + 2 files changed, 41 insertions(+), 36 deletions(-) diff --git a/src/laminar.cpp b/src/laminar.cpp index 526a9df..ef3278f 100644 --- a/src/laminar.cpp +++ b/src/laminar.cpp @@ -496,42 +496,7 @@ void Laminar::assignNewJobs() { } // setup run completion handler - run->notifyCompletion = [=,&node](const Run* r) { - node.busyExecutors--; - KJ_LOG(INFO, "Run completed", r->name, to_string(r->result)); - time_t completedAt = time(0); - db->stmt("INSERT INTO builds VALUES(?,?,?,?,?,?,?,?,?,?,?)") - .bind(r->name, r->build, node.name, r->queuedAt, r->startedAt, completedAt, int(r->result), - r->log, r->parentName, r->parentBuild, r->reason()) - .exec(); - - // notify clients - Json j; - j.set("type", "job_completed") - .startObject("data") - .set("name", r->name) - .set("number", r->build) - .set("duration", completedAt - r->startedAt) - .set("started", r->startedAt) - .set("result", to_string(r->result)) - .EndObject(); - const char* msg = j.str(); - for(LaminarClient* c : clients) { - if(c->scope.wantsStatus(r->name, r->build)) - c->sendMessage(msg); - } - - // wake the waiters - for(Waiter& waiter : waiters[r]) - waiter.release(r->result); - waiters.erase(r); - - // remove the workdir - fs::remove_all(wd); - - // will delete the job - activeJobs.get<2>().erase(r); - }; + run->notifyCompletion = [this](const Run* r) { runFinished(r); }; // trigger the first step of the run if(stepRun(run)) { @@ -552,3 +517,42 @@ void Laminar::assignNewJobs() { } } + +void Laminar::runFinished(const Run * r) { + Node* node = r->node; + + node->busyExecutors--; + KJ_LOG(INFO, "Run completed", r->name, to_string(r->result)); + time_t completedAt = time(0); + db->stmt("INSERT INTO builds VALUES(?,?,?,?,?,?,?,?,?,?,?)") + .bind(r->name, r->build, node->name, r->queuedAt, r->startedAt, completedAt, int(r->result), + r->log, r->parentName, r->parentBuild, r->reason()) + .exec(); + + // notify clients + Json j; + j.set("type", "job_completed") + .startObject("data") + .set("name", r->name) + .set("number", r->build) + .set("duration", completedAt - r->startedAt) + .set("started", r->startedAt) + .set("result", to_string(r->result)) + .EndObject(); + const char* msg = j.str(); + for(LaminarClient* c : clients) { + if(c->scope.wantsStatus(r->name, r->build)) + c->sendMessage(msg); + } + + // wake the waiters + for(Waiter& waiter : waiters[r]) + waiter.release(r->result); + waiters.erase(r); + + // remove the workdir + fs::remove_all(r->wd); + + // will delete the job + activeJobs.get<2>().erase(r); +} diff --git a/src/laminar.h b/src/laminar.h index e585899..5693e4d 100644 --- a/src/laminar.h +++ b/src/laminar.h @@ -59,6 +59,7 @@ private: void reapAdvance(); void assignNewJobs(); bool stepRun(std::shared_ptr run); + void runFinished(const Run*); std::list> queuedJobs;