* Updated hydra_eval_jobs for the new evaluator.
[?]
May 18, 2010, 9:57 AM
AEKIREIHNEHL4CQEHRZJGRWMCV2XO6ICZK2OM342IKAJV6MUMDOACDependencies
- [2]
FMJMW4PU - [3]
HOVPJBFF* Require every argument to be specified. - [4]
VTNP5KDO* Don't catch all errors. Some errors mess up the connection with the - [5]
4XR2A7QD* Fix building hydra_eval_jobs against the sqlite branch. - [6]
YGRLM2SK* Export all relevant info about the derivation. - [7]
HVXL2XUZ - [8]
4N5APGRG* Start of a helper tool to evaluate job expressions efficiently. - [9]
KD5237CU* eval-jobs now efficiently evaluates all Hydra jobs from a - [10]
IZ2AHLM3* Export all relevant info about the derivation. - [11]
A63IHCMX* Register GC roots properly. - [12]
POPU2ATH* hydra_scheduler: use eval-jobs. - [13]
4LWGZL33 - [14]
7YCFGMZB* Report evaluation errors per job, and don't bail out if a job fails
Change contents
- edit in src/c/hydra_eval_jobs.cc at line 8
#include "nixexpr-ast.hh" - edit in src/c/hydra_eval_jobs.cc at line 11
#include "aterm.hh" - replacement in src/c/hydra_eval_jobs.cc at line 24
Expr evalAttr(EvalState & state, Expr e){return e ? evalExpr(state, e) : e;}typedef std::map<Symbol, std::pair<unsigned int, Value> > ArgsUsed;typedef std::map<Symbol, list<Value> > AutoArgs; - replacement in src/c/hydra_eval_jobs.cc at line 29
const ATermMap & argsUsed, const ATermMap & argsLeft,Expr e, const string & attrPath);const ArgsUsed & argsUsed, const AutoArgs & argsLeft,Value & v, const string & attrPath); - replacement in src/c/hydra_eval_jobs.cc at line 34
const ATermMap & argsUsed, const ATermMap & argsLeft,const string & attrPath, Expr fun,ATermList formals, const ATermMap & actualArgs)const ArgsUsed & argsUsed, const AutoArgs & argsLeft,const string & attrPath, Value & fun,Formals::Formals_::iterator cur,Formals::Formals_::iterator last,const Bindings & actualArgs) - replacement in src/c/hydra_eval_jobs.cc at line 40
if (formals == ATempty) {findJobs(state, doc, argsUsed, argsLeft,makeCall(fun, makeAttrs(actualArgs)), attrPath);if (cur == last) {Value v, arg;state.mkAttrs(arg);*arg.attrs = actualArgs;mkApp(v, fun, arg);findJobs(state, doc, argsUsed, argsLeft, v, attrPath); - replacement in src/c/hydra_eval_jobs.cc at line 49[6.471]→[6.165:210](∅→∅),[6.210]→[6.521:643](∅→∅),[6.521]→[6.521:643](∅→∅),[6.644]→[2.0:83](∅→∅),[2.83]→[6.703:898](∅→∅),[6.703]→[6.703:898](∅→∅),[6.898]→[2.84:164](∅→∅),[2.164]→[6.935:1087](∅→∅),[6.935]→[6.935:1087](∅→∅),[6.1096]→[6.1096:1102](∅→∅),[6.1102]→[6.0:5](∅→∅),[6.5]→[6.1297:1306](∅→∅),[6.1297]→[6.1297:1306](∅→∅)
Expr name; ATerm def2; ATermList values;if (!matchFormal(ATgetFirst(formals), name, def2)) abort();if ((values = (ATermList) argsLeft.get(name))) {int n = 0;for (ATermIterator i(ATreverse(values)); i; ++i, ++n) {ATermMap actualArgs2(actualArgs);ATermMap argsUsed2(argsUsed);ATermMap argsLeft2(argsLeft);actualArgs2.set(name, makeAttrRHS(*i, makeNoPos()));argsUsed2.set(name, (ATerm) ATmakeList2(*i, (ATerm) ATmakeInt(n)));argsLeft2.remove(name);tryJobAlts(state, doc, argsUsed2, argsLeft2, attrPath, fun, ATgetNext(formals), actualArgs2);}}elseAutoArgs::const_iterator a = argsLeft.find(cur->name);if (a == argsLeft.end()) - replacement in src/c/hydra_eval_jobs.cc at line 53
% attrPath % aterm2String(name));% attrPath % cur->name);Formals::Formals_::iterator next = cur; ++next;int n = 0;foreach (list<Value>::const_iterator, i, a->second) {Bindings actualArgs2(actualArgs); // !!! inefficientArgsUsed argsUsed2(argsUsed);AutoArgs argsLeft2(argsLeft);actualArgs2[cur->name].value = *i;argsUsed2[cur->name] = std::pair<unsigned int, Value>(n, *i);argsLeft2.erase(cur->name);tryJobAlts(state, doc, argsUsed2, argsLeft2, attrPath, fun, next, last, actualArgs2);++n;} - replacement in src/c/hydra_eval_jobs.cc at line 71
static void showArgsUsed(XMLWriter & doc, const ATermMap & argsUsed)static void showArgsUsed(XMLWriter & doc, const ArgsUsed & argsUsed) - replacement in src/c/hydra_eval_jobs.cc at line 73
foreach (ATermMap::const_iterator, i, argsUsed) {foreach (ArgsUsed::const_iterator, i, argsUsed) { - replacement in src/c/hydra_eval_jobs.cc at line 75
xmlAttrs2["name"] = aterm2String(i->key);xmlAttrs2["value"] = showValue(ATelementAt((ATermList) i->value, 0));xmlAttrs2["altnr"] = int2String(ATgetInt((ATermInt) ATelementAt((ATermList) i->value, 1)));xmlAttrs2["name"] = i->first;xmlAttrs2["value"] = (format("%1%") % i->second.second).str();xmlAttrs2["altnr"] = int2String(i->second.first); - replacement in src/c/hydra_eval_jobs.cc at line 102
- replacement in src/c/hydra_eval_jobs.cc at line 104[6.377]→[6.1470:1528](∅→∅),[6.1470]→[6.1470:1528](∅→∅),[6.1528]→[6.218:255](∅→∅),[6.218]→[6.218:255](∅→∅)
const ATermMap & argsUsed, const ATermMap & argsLeft,Expr e, const string & attrPath)const ArgsUsed & argsUsed, const AutoArgs & argsLeft,Value & v, const string & attrPath) - replacement in src/c/hydra_eval_jobs.cc at line 109
e = evalExpr(state, e);state.forceValue(v); - replacement in src/c/hydra_eval_jobs.cc at line 111[6.337]→[6.731:758](∅→∅),[6.758]→[6.31:55](∅→∅),[6.31]→[6.31:55](∅→∅),[6.55]→[6.359:511](∅→∅),[6.359]→[6.359:511](∅→∅)
ATermList as, formals;ATermBool ellipsis;ATerm pat, body, pos;string s;PathSet context;if (matchAttrs(e, as)) {ATermMap attrs;queryAllAttrs(e, attrs);if (v.type == tAttrs) { - replacement in src/c/hydra_eval_jobs.cc at line 115
if (getDerivation(state, e, drv)) {if (getDerivation(state, v, drv)) { - replacement in src/c/hydra_eval_jobs.cc at line 155[6.1212]→[6.1212:1269](∅→∅),[6.1269]→[6.1864:1931](∅→∅),[6.1931]→[6.1316:1402](∅→∅),[6.1316]→[6.1316:1402](∅→∅)
foreach (ATermMap::const_iterator, i, attrs)findJobs(state, doc, argsUsed, argsLeft, i->value,(attrPath.empty() ? "" : attrPath + ".") + aterm2String(i->key));foreach (Bindings::iterator, i, *v.attrs)findJobs(state, doc, argsUsed, argsLeft, i->second.value,(attrPath.empty() ? "" : attrPath + ".") + (string) i->first); - replacement in src/c/hydra_eval_jobs.cc at line 161
else if (matchFunction(e, pat, body, pos) && matchAttrsPat(pat, formals, ellipsis)) {tryJobAlts(state, doc, argsUsed, argsLeft, attrPath, e, formals, ATermMap());else if (v.type == tLambda && v.lambda.fun->matchAttrs) {tryJobAlts(state, doc, argsUsed, argsLeft, attrPath, v,v.lambda.fun->formals->formals.begin(),v.lambda.fun->formals->formals.end(),Bindings()); - replacement in src/c/hydra_eval_jobs.cc at line 169
throw TypeError(format("unknown value: %1%") % showValue(e));throw TypeError(format("unsupported value: %1%") % v); - replacement in src/c/hydra_eval_jobs.cc at line 174
const ATermMap & argsUsed, const ATermMap & argsLeft,Expr e, const string & attrPath)const ArgsUsed & argsUsed, const AutoArgs & argsLeft,Value & v, const string & attrPath) - replacement in src/c/hydra_eval_jobs.cc at line 178
findJobsWrapped(state, doc, argsUsed, argsLeft, e, attrPath);findJobsWrapped(state, doc, argsUsed, argsLeft, v, attrPath); - replacement in src/c/hydra_eval_jobs.cc at line 193
ATermMap autoArgs;AutoArgs autoArgs; - replacement in src/c/hydra_eval_jobs.cc at line 206[6.2604]→[6.1003:1039](∅→∅),[6.1039]→[3.124:207](∅→∅),[3.207]→[6.1105:1139](∅→∅),[6.1105]→[6.1105:1139](∅→∅),[6.1139]→[6.2674:2857](∅→∅),[6.2674]→[6.2674:2857](∅→∅)
Expr e = arg == "--arg"? evalExpr(state, parseExprFromString(state, value, absPath("."))): makeStr(value);autoArgs.set(toATerm(name), (ATerm) ATinsert(autoArgs.get(toATerm(name))? (ATermList) autoArgs.get(toATerm(name)): ATempty, e));Value v;if (arg == "--arg")state.eval(parseExprFromString(state, value, absPath(".")), v);elsemkString(v, value);autoArgs[state.symbols.create(name)].push_back(v); - replacement in src/c/hydra_eval_jobs.cc at line 229
Expr e = parseExprFromFile(state, releaseExpr);Expr * e = parseExprFromFile(state, releaseExpr);Value v;state.mkThunk_(v, e); - replacement in src/c/hydra_eval_jobs.cc at line 235
findJobs(state, doc, ATermMap(), autoArgs, e, "");findJobs(state, doc, ArgsUsed(), autoArgs, v, "");