hydra-eval-jobs: Identify unexpected errors in handling aggregate jobs

The vague "[json.exception.type_error.302] type must be string, but is null"
is **absolutely** unhelpful in the way Hydra currently handles it on
evaluation.

This is handling *unexpected* errors only; the following commit will
handle the specific instance of the previously mentioned error.
This commit is contained in:
Samuel Dionne-Riel 2020-10-25 18:50:54 -04:00
parent be709d450b
commit 68e689cace

View file

@ -442,12 +442,16 @@ int main(int argc, char * * argv)
for (auto i = state->jobs.begin(); i != state->jobs.end(); ++i) {
auto jobName = i.key();
auto & job = i.value();
// For the error message
std::string lastTriedJobName = i.key();
auto named = job.find("namedConstituents");
if (named == job.end()) continue;
try {
if (myArgs.dryRun) {
for (std::string jobName2 : *named) {
lastTriedJobName = jobName2;
auto job2 = state->jobs.find(jobName2);
if (job2 == state->jobs.end())
throw Error("aggregate job '%s' references non-existent job '%s'", jobName, jobName2);
@ -459,6 +463,7 @@ int main(int argc, char * * argv)
auto drv = store->readDerivation(drvPath);
for (std::string jobName2 : *named) {
lastTriedJobName = jobName2;
auto job2 = state->jobs.find(jobName2);
if (job2 == state->jobs.end())
throw Error("aggregate job '%s' references non-existent job '%s'", jobName, jobName2);
@ -482,6 +487,13 @@ int main(int argc, char * * argv)
job["drvPath"] = newDrvPath;
job["outputs"]["out"] = store->printStorePath(outPath);
}
} catch (std::exception & e) {
// Print more information to help debugging.
printError("Unexpected error in hydra-eval-jobs when handling job '%s', when producing aggregate job '%s':", lastTriedJobName, jobName);
// And throw the original exception!
throw;
}
job.erase("namedConstituents");
}