nix-eval-jobs: move more worker initialization code to its file
Change-Id: Ief8b16220c153e402ecbdeabd576344c6a6a6964
This commit is contained in:
committed by
alois31
parent
e36ac58f93
commit
ed9cc5f448
@@ -44,9 +44,8 @@
|
||||
|
||||
using namespace nix;
|
||||
|
||||
using Processor = std::function<void(
|
||||
ref<nix::eval_cache::CachingEvaluator> state, Bindings &autoArgs,
|
||||
AutoCloseFD &to, AutoCloseFD &from, MyArgs &args, AsyncIoRoot &aio)>;
|
||||
using Processor =
|
||||
std::function<void(AutoCloseFD &to, AutoCloseFD &from, MyArgs &args)>;
|
||||
|
||||
/* Auto-cleanup of fork's process and fds. */
|
||||
struct Proc {
|
||||
@@ -63,30 +62,7 @@ struct Proc {
|
||||
from{
|
||||
std::make_shared<AutoCloseFD>(std::move(toPipe.readSide))}]() {
|
||||
debug("created worker process %d", getpid());
|
||||
try {
|
||||
AsyncIoRoot aio;
|
||||
auto evalStore = aio.blockOn(myArgs.evalStoreUrl
|
||||
? openStore(*myArgs.evalStoreUrl)
|
||||
: openStore());
|
||||
auto evaluator =
|
||||
nix::make_ref<nix::eval_cache::CachingEvaluator>(
|
||||
aio, myArgs.searchPath, evalStore);
|
||||
Bindings &autoArgs = *myArgs.getAutoArgs(*evaluator);
|
||||
proc(evaluator, autoArgs, *to, *from, myArgs, aio);
|
||||
} catch (Error &e) {
|
||||
JSON err;
|
||||
auto msg = e.msg();
|
||||
err["error"] = nix::filterANSIEscapes(msg, true);
|
||||
printError("%1%", Uncolored(msg));
|
||||
if (tryWriteLine(to->get(), err.dump()) < 0) {
|
||||
return; // main process died
|
||||
};
|
||||
// Don't forget to print it into the STDERR log, this is
|
||||
// what's shown in the Hydra UI.
|
||||
if (tryWriteLine(to->get(), "restart") < 0) {
|
||||
return; // main process died
|
||||
}
|
||||
}
|
||||
proc(*to, *from, myArgs);
|
||||
},
|
||||
ProcessOptions{});
|
||||
|
||||
|
||||
@@ -122,9 +122,17 @@ readConstituents(const nix::Value *v, nix::box_ptr<nix::EvalState> &state,
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
void worker(nix::ref<nix::eval_cache::CachingEvaluator> evaluator,
|
||||
nix::Bindings &autoArgs, nix::AutoCloseFD &to,
|
||||
nix::AutoCloseFD &from, MyArgs &args, nix::AsyncIoRoot &aio) {
|
||||
void worker(nix::AutoCloseFD &to, nix::AutoCloseFD &from, MyArgs &args)
|
||||
try {
|
||||
nix::AsyncIoRoot aio;
|
||||
|
||||
auto evalStore = aio.blockOn(args.evalStoreUrl
|
||||
? nix::openStore(*args.evalStoreUrl)
|
||||
: nix::openStore());
|
||||
auto evaluator =
|
||||
nix::make_ref<nix::eval_cache::CachingEvaluator>(
|
||||
aio, args.searchPath, evalStore);
|
||||
nix::Bindings &autoArgs = *args.getAutoArgs(*evaluator);
|
||||
|
||||
nix::Value vRoot = [&]() {
|
||||
auto state = evaluator->begin(aio);
|
||||
@@ -253,4 +261,17 @@ void worker(nix::ref<nix::eval_cache::CachingEvaluator> evaluator,
|
||||
if (tryWriteLine(to.get(), "restart") < 0) {
|
||||
return; // main process died
|
||||
};
|
||||
} catch (nix::Error &e) {
|
||||
nix::JSON err;
|
||||
auto msg = e.msg();
|
||||
err["error"] = nix::filterANSIEscapes(msg, true);
|
||||
printError("%1%", nix::Uncolored(msg));
|
||||
if (tryWriteLine(to.get(), err.dump()) < 0) {
|
||||
return; // main process died
|
||||
};
|
||||
// Don't forget to print it into the STDERR log, this is
|
||||
// what's shown in the Hydra UI.
|
||||
if (tryWriteLine(to.get(), "restart") < 0) {
|
||||
return; // main process died
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,4 @@ class EvalState;
|
||||
template <typename T> class ref;
|
||||
} // namespace nix
|
||||
|
||||
void worker(nix::ref<nix::eval_cache::CachingEvaluator> evaluator,
|
||||
nix::Bindings &autoArgs, nix::AutoCloseFD &to,
|
||||
nix::AutoCloseFD &from, MyArgs &args, nix::AsyncIoRoot &aio);
|
||||
void worker(nix::AutoCloseFD &to, nix::AutoCloseFD &from, MyArgs &args);
|
||||
|
||||
Reference in New Issue
Block a user