forked from lix-project/hydra
lix api changes
This commit is contained in:
parent
803b8ee731
commit
a053ef8fdf
|
@ -8,6 +8,7 @@
|
||||||
#include "eval.hh"
|
#include "eval.hh"
|
||||||
#include "eval-inline.hh"
|
#include "eval-inline.hh"
|
||||||
#include "eval-settings.hh"
|
#include "eval-settings.hh"
|
||||||
|
#include "signals.hh"
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
#include "get-drvs.hh"
|
#include "get-drvs.hh"
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
|
@ -160,7 +161,7 @@ static void worker(
|
||||||
|
|
||||||
auto s = readLine(from.get());
|
auto s = readLine(from.get());
|
||||||
if (s == "exit") break;
|
if (s == "exit") break;
|
||||||
if (!hasPrefix(s, "do ")) abort();
|
if (!s.starts_with("do ")) abort();
|
||||||
std::string attrPath(s, 3);
|
std::string attrPath(s, 3);
|
||||||
|
|
||||||
debug("worker process %d at '%s'", getpid(), attrPath);
|
debug("worker process %d at '%s'", getpid(), attrPath);
|
||||||
|
@ -183,7 +184,7 @@ static void worker(
|
||||||
!experimentalFeatureSettings.isEnabled(Xp::CaDerivations));
|
!experimentalFeatureSettings.isEnabled(Xp::CaDerivations));
|
||||||
|
|
||||||
if (drv->querySystem() == "unknown")
|
if (drv->querySystem() == "unknown")
|
||||||
throw EvalError("derivation must have a 'system' attribute");
|
state.error<EvalError>("derivation must have a 'system' attribute").debugThrow();
|
||||||
|
|
||||||
auto drvPath = state.store->printStorePath(drv->requireDrvPath());
|
auto drvPath = state.store->printStorePath(drv->requireDrvPath());
|
||||||
|
|
||||||
|
@ -206,7 +207,7 @@ static void worker(
|
||||||
if (a && state.forceBool(*a->value, a->pos, "while evaluating the `_hydraAggregate` attribute")) {
|
if (a && state.forceBool(*a->value, a->pos, "while evaluating the `_hydraAggregate` attribute")) {
|
||||||
auto a = v->attrs->get(state.symbols.create("constituents"));
|
auto a = v->attrs->get(state.symbols.create("constituents"));
|
||||||
if (!a)
|
if (!a)
|
||||||
throw EvalError("derivation must have a ‘constituents’ attribute");
|
state.error<EvalError>("derivation must have a ‘constituents’ attribute").debugThrow();
|
||||||
|
|
||||||
NixStringContext context;
|
NixStringContext context;
|
||||||
state.coerceToString(a->pos, *a->value, context, "while evaluating the `constituents` attribute", true, false);
|
state.coerceToString(a->pos, *a->value, context, "while evaluating the `constituents` attribute", true, false);
|
||||||
|
@ -272,7 +273,7 @@ static void worker(
|
||||||
else if (v->type() == nNull)
|
else if (v->type() == nNull)
|
||||||
;
|
;
|
||||||
|
|
||||||
else throw TypeError("attribute '%s' is %s, which is not supported", attrPath, showType(*v));
|
else state.error<TypeError>("attribute '%s' is %s, which is not supported", attrPath, showType(*v)).debugThrow();
|
||||||
|
|
||||||
} catch (EvalError & e) {
|
} catch (EvalError & e) {
|
||||||
auto msg = e.msg();
|
auto msg = e.msg();
|
||||||
|
@ -379,8 +380,7 @@ int main(int argc, char * * argv)
|
||||||
// what's shown in the Hydra UI.
|
// what's shown in the Hydra UI.
|
||||||
writeLine(to->get(), "restart");
|
writeLine(to->get(), "restart");
|
||||||
}
|
}
|
||||||
},
|
});
|
||||||
ProcessOptions { .allowVfork = false });
|
|
||||||
from = std::move(fromPipe.readSide);
|
from = std::move(fromPipe.readSide);
|
||||||
to = std::move(toPipe.writeSide);
|
to = std::move(toPipe.writeSide);
|
||||||
debug("created worker process %d", pid);
|
debug("created worker process %d", pid);
|
||||||
|
@ -531,7 +531,7 @@ int main(int argc, char * * argv)
|
||||||
|
|
||||||
if (brokenJobs.empty()) {
|
if (brokenJobs.empty()) {
|
||||||
std::string drvName(drvPath.name());
|
std::string drvName(drvPath.name());
|
||||||
assert(hasSuffix(drvName, drvExtension));
|
assert(drvName.ends_with(drvExtension));
|
||||||
drvName.resize(drvName.size() - drvExtension.size());
|
drvName.resize(drvName.size() - drvExtension.size());
|
||||||
|
|
||||||
auto hashModulo = hashDerivationModulo(*store, drv, true);
|
auto hashModulo = hashDerivationModulo(*store, drv, true);
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "hydra-config.hh"
|
#include "hydra-config.hh"
|
||||||
#include "pool.hh"
|
#include "pool.hh"
|
||||||
#include "shared.hh"
|
#include "shared.hh"
|
||||||
|
#include "signals.hh"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
@ -11,7 +12,10 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
|
||||||
|
#include <boost/format.hpp>
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
|
using boost::format;
|
||||||
|
|
||||||
typedef std::pair<std::string, std::string> JobsetName;
|
typedef std::pair<std::string, std::string> JobsetName;
|
||||||
|
|
||||||
|
@ -505,7 +509,7 @@ int main(int argc, char * * argv)
|
||||||
parseCmdLine(argc, argv, [&](Strings::iterator & arg, const Strings::iterator & end) {
|
parseCmdLine(argc, argv, [&](Strings::iterator & arg, const Strings::iterator & end) {
|
||||||
if (*arg == "--unlock")
|
if (*arg == "--unlock")
|
||||||
unlock = true;
|
unlock = true;
|
||||||
else if (hasPrefix(*arg, "-"))
|
else if (arg->starts_with("-"))
|
||||||
return false;
|
return false;
|
||||||
args.push_back(*arg);
|
args.push_back(*arg);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -93,11 +93,11 @@ static void openConnection(::Machine::ptr machine, Path tmpDir, int stderrFD, SS
|
||||||
throw SysError("cannot start %s", pgmName);
|
throw SysError("cannot start %s", pgmName);
|
||||||
});
|
});
|
||||||
|
|
||||||
to.readSide = -1;
|
to.readSide.reset();
|
||||||
from.writeSide = -1;
|
from.writeSide.reset();
|
||||||
|
|
||||||
child.in = to.writeSide.release();
|
child.in = AutoCloseFD{to.writeSide.release()};
|
||||||
child.out = from.readSide.release();
|
child.out = AutoCloseFD{from.readSide.release()};
|
||||||
|
|
||||||
// XXX: determine the actual max value we can use from /proc.
|
// XXX: determine the actual max value we can use from /proc.
|
||||||
int pipesize = 1024 * 1024;
|
int pipesize = 1024 * 1024;
|
||||||
|
@ -186,7 +186,7 @@ static std::pair<Path, AutoCloseFD> openLogFile(const std::string & logDir, cons
|
||||||
|
|
||||||
createDirs(dirOf(logFile));
|
createDirs(dirOf(logFile));
|
||||||
|
|
||||||
AutoCloseFD logFD = open(logFile.c_str(), O_CREAT | O_TRUNC | O_WRONLY, 0666);
|
AutoCloseFD logFD{open(logFile.c_str(), O_CREAT | O_TRUNC | O_WRONLY, 0666)};
|
||||||
if (!logFD) throw SysError("creating log file ‘%s’", logFile);
|
if (!logFD) throw SysError("creating log file ‘%s’", logFile);
|
||||||
|
|
||||||
return {std::move(logFile), std::move(logFD)};
|
return {std::move(logFile), std::move(logFD)};
|
||||||
|
@ -588,7 +588,7 @@ void State::buildRemote(ref<Store> destStore,
|
||||||
if (ftruncate(logFD.get(), 0) == -1)
|
if (ftruncate(logFD.get(), 0) == -1)
|
||||||
throw SysError("truncating log file ‘%s’", result.logFile);
|
throw SysError("truncating log file ‘%s’", result.logFile);
|
||||||
|
|
||||||
logFD = -1;
|
logFD.reset();
|
||||||
|
|
||||||
/* Do the build. */
|
/* Do the build. */
|
||||||
printMsg(lvlDebug, "building ‘%s’ on ‘%s’",
|
printMsg(lvlDebug, "building ‘%s’ on ‘%s’",
|
||||||
|
@ -684,7 +684,7 @@ void State::buildRemote(ref<Store> destStore,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Shut down the connection. */
|
/* Shut down the connection. */
|
||||||
child.in = -1;
|
child.in.reset();
|
||||||
child.sshPid.wait();
|
child.sshPid.wait();
|
||||||
|
|
||||||
} catch (Error & e) {
|
} catch (Error & e) {
|
||||||
|
|
|
@ -11,10 +11,10 @@
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
|
#include "signals.hh"
|
||||||
#include "state.hh"
|
#include "state.hh"
|
||||||
#include "hydra-build-result.hh"
|
#include "hydra-build-result.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
#include "remote-store.hh"
|
|
||||||
|
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
#include "hydra-config.hh"
|
#include "hydra-config.hh"
|
||||||
|
@ -930,20 +930,6 @@ void State::run(BuildID buildOne)
|
||||||
}
|
}
|
||||||
}).detach();
|
}).detach();
|
||||||
|
|
||||||
/* Make sure that old daemon connections are closed even when
|
|
||||||
we're not doing much. */
|
|
||||||
std::thread([&]() {
|
|
||||||
while (true) {
|
|
||||||
sleep(10);
|
|
||||||
try {
|
|
||||||
if (auto remoteStore = getDestStore().dynamic_pointer_cast<RemoteStore>())
|
|
||||||
remoteStore->flushBadConnections();
|
|
||||||
} catch (std::exception & e) {
|
|
||||||
printMsg(lvlError, "connection flush thread: %s", e.what());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).detach();
|
|
||||||
|
|
||||||
/* Monitor the database for status dump requests (e.g. from
|
/* Monitor the database for status dump requests (e.g. from
|
||||||
‘hydra-queue-runner --status’). */
|
‘hydra-queue-runner --status’). */
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|
|
@ -299,7 +299,7 @@ bool State::getQueuedBuilds(Connection & conn,
|
||||||
try {
|
try {
|
||||||
createBuild(build);
|
createBuild(build);
|
||||||
} catch (Error & e) {
|
} catch (Error & e) {
|
||||||
e.addTrace({}, hintfmt("while loading build %d: ", build->id));
|
e.addTrace({}, HintFmt("while loading build %d: ", build->id));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ struct Connection : pqxx::connection
|
||||||
std::string lower_prefix = "dbi:Pg:";
|
std::string lower_prefix = "dbi:Pg:";
|
||||||
std::string upper_prefix = "DBI:Pg:";
|
std::string upper_prefix = "DBI:Pg:";
|
||||||
|
|
||||||
if (hasPrefix(s, lower_prefix) || hasPrefix(s, upper_prefix)) {
|
if (s.starts_with(lower_prefix) || s.starts_with(upper_prefix)) {
|
||||||
return concatStringsSep(" ", tokenizeString<Strings>(std::string(s, lower_prefix.size()), ";"));
|
return concatStringsSep(" ", tokenizeString<Strings>(std::string(s, lower_prefix.size()), ";"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue