hydra-evaluator improvements
[?]
Mar 13, 2017, 3:19 PM
W4G5MZZSCK7VGSZJQKLS6XMQPFDIL7D542XWDMFMO4RZEO4FQB2QCDependencies
- [2]
7XOH2DGHhydra-module.nix: Give types to options - [3]
CCIORPJ5When manually scheduling an eval, force re-instantiation of store derivations - [4]
ZM6WYVL7hydra-evaluator: Set jobset error if hydra-eval-jobset dies - [5]
OPQLMRPUhydra-evaluator: Handle SIGINT - [6]
W5OAZWPDDrop the errorMsg column in the Jobs table - [7]
PCD3ZH6ZPartially revert 1c20cfdf2403feb78cef515faf15c04d5c9f17bd - [8]
NS7SND6Rhydra-evaluator: Send statistics to statsd - [9]
PYTVXHMHhydra-evaluator: Show friendlier exit status - [10]
Y6AHH4THRemove the logfile and logSize columns from the database - [11]
KQAQ4FIFUpdate Schema classes - [12]
7ZYBTNJJrevert unmeant previous change which caused errors to stay, even after successful evaluation of jobs - [13]
LZVO64YGMerge in the first bits of the API work - [14]
6QRHXIM3* Speed up the jobset index page. Especially the query to get the - [15]
K3HODXGHCheck all inputs for blame but only email selected inputs - [16]
PCKLFRT5Support push notification of repository changes - [17]
WVD3YYONhydra-evaluator: Add some debug code - [18]
NI5BVF2V* In job inputs of type "build", allow the project and jobset names of - [19]
QLOLZHRXAllow a per-jobset check interval - [20]
KSBB33REAdd a dashboard - [21]
TFK74CQRPut job status on a separate tab - [22]
OVR2RWBIhydra-evaluator: Always pick the jobset that hasn't been evaluated longest - [23]
DH3KNBAVMerge remote-tracking branch 'upstream/who-broke-builds' into upstream-master - [24]
M4TBFHHJ"limit" -> "rows" - [25]
MPFSVI5XPedantry: CLOCK_REALTIME -> CLOCK_MONOTONIC - [26]
QTC3SYBMJobset page: Load the jobs and status tabs on demand - [27]
4YCF3KBGConcurrent hydra-evaluator - [28]
SS4TZXNUDistinguish between permanent evaluation errors and transient input errors - [29]
WQXF2T3Dhydra-evaluator: Don't require $HYDRA_CONFIG - [30]
T5BIOVJEAdd support for tracking custom metrics - [31]
5MVWRWHThydra-evaluator: Don't use the "timeout" command - [32]
X27GNHDV* Basic job info in the database. - [33]
4UUKWXDFJobset page: Show last evaluation time - [34]
6LETVKRAAfter editing a jobset, push it to the front of the evaluation queue - [35]
53PW36WShydra-evaluator: When evaluating a single jobset, exit with a failure code if evaluation fails - [36]
J74UTA3IHandle the case where a jobset has never been evaluated - [37]
SB2V735VKeep track of the database schema version - [38]
RXVJFQ5AEvaluator cleanups - [39]
GEADFVZ5hydra-queue-runner: Improved scheduling - [*]
D3MDJONY - [*]
KMPLMG7Thydra-module.nix: Cleanup - [*]
3HZY24CX* Make jobsets viewable under - [*]
ODNCGFQ5* Improved the navigation bar: don't include all projects (since that - [*]
N22GPKYT* Put info about logs / build products in the DB. - [*]
LLAJKVGIFix syntax error - [*]
D5QIOJGP* Move everything up one directory.
Change contents
- edit in hydra-module.nix at line 348
ExecStopPost = "${cfg.package}/bin/hydra-evaluator --unlock"; - edit in src/hydra-evaluator/hydra-evaluator.cc at line 8
#include <experimental/optional> - edit in src/hydra-evaluator/hydra-evaluator.cc at line 15
typedef std::pair<std::string, std::string> JobsetName; - edit in src/hydra-evaluator/hydra-evaluator.cc at line 21
typedef std::pair<std::string, std::string> JobsetName; - edit in src/hydra-evaluator/hydra-evaluator.cc at line 31
std::experimental::optional<JobsetName> evalOne; - edit in src/hydra-evaluator/hydra-evaluator.cc at line 64
if (evalOne && name != *evalOne) continue; - edit in src/hydra-evaluator/hydra-evaluator.cc at line 77
if (evalOne && seen.empty()) {printError("the specified jobset does not exist");std::_Exit(1);} - replacement in src/hydra-evaluator/hydra-evaluator.cc at line 93
printInfo("starting evaluation of jobset ‘%s:%s’", jobset.name.first, jobset.name.second);time_t now = time(0);printInfo("starting evaluation of jobset ‘%s:%s’ (last checked %d s ago)",jobset.name.first, jobset.name.second,now - jobset.lastCheckedTime);{auto conn(dbPool.get());pqxx::work txn(*conn);txn.parameterized("update Jobsets set startTime = $1 where project = $2 and name = $3")(now)(jobset.name.first)(jobset.name.second).exec();txn.commit();} - edit in src/hydra-evaluator/hydra-evaluator.cc at line 122
time_t now = time(0);{auto conn(dbPool.get());pqxx::work txn(*conn);txn.parameterized("update Jobsets set lastCheckedTime = $1, triggerTime = null where project = $2 and name = $3")(now)(jobset.name.first)(jobset.name.second).exec();txn.commit();jobset.lastCheckedTime = now;jobset.triggerTime = notTriggered;} - replacement in src/hydra-evaluator/hydra-evaluator.cc at line 133
if (i->second.pid == -1 &&(i->second.triggerTime != std::numeric_limits<time_t>::max() ||(i->second.checkInterval > 0 && i->second.lastCheckedTime + i->second.checkInterval <= now)))if (evalOne ||(i->second.pid == -1 &&(i->second.triggerTime != std::numeric_limits<time_t>::max() ||(i->second.checkInterval > 0 && i->second.lastCheckedTime + i->second.checkInterval <= now)))) - replacement in src/hydra-evaluator/hydra-evaluator.cc at line 239
for (auto & jobset : state->jobsets)if (jobset.second.pid == pid) {// FIXME: should use a map.for (auto & i : state->jobsets) {auto & jobset(i.second);if (jobset.pid == pid) { - replacement in src/hydra-evaluator/hydra-evaluator.cc at line 246
jobset.first.first, jobset.first.second, statusToString(status));jobset.name.first, jobset.name.second, statusToString(status));auto now = time(0);jobset.triggerTime = notTriggered;jobset.lastCheckedTime = now; - edit in src/hydra-evaluator/hydra-evaluator.cc at line 254
auto conn(dbPool.get());pqxx::work txn(*conn);/* Clear the trigger time to prevent thisjobset from getting stuck in an endlessfailing eval loop. */txn.parameterized("update Jobsets set triggerTime = null where project = $1 and name = $2 and startTime is not null and triggerTime < startTime")(jobset.name.first)(jobset.name.second).exec();/* Clear the start time. */txn.parameterized("update Jobsets set startTime = null where project = $1 and name = $2")(jobset.name.first)(jobset.name.second).exec(); - edit in src/hydra-evaluator/hydra-evaluator.cc at line 275
auto conn(dbPool.get());pqxx::work txn(*conn); - replacement in src/hydra-evaluator/hydra-evaluator.cc at line 276
("update Jobsets set errorMsg = $1, errorTime = $2")("update Jobsets set errorMsg = $1, lastCheckedTime = $2, errorTime = $2, fetchErrorMsg = null where project = $3 and name = $4") - replacement in src/hydra-evaluator/hydra-evaluator.cc at line 278
(time(0))(now)(jobset.name.first)(jobset.name.second) - edit in src/hydra-evaluator/hydra-evaluator.cc at line 282
txn.commit(); - edit in src/hydra-evaluator/hydra-evaluator.cc at line 284
txn.commit(); - replacement in src/hydra-evaluator/hydra-evaluator.cc at line 290
jobset.second.pid.release();jobset.pid.release(); - edit in src/hydra-evaluator/hydra-evaluator.cc at line 292
if (evalOne) std::_Exit(0); - edit in src/hydra-evaluator/hydra-evaluator.cc at line 297
} - edit in src/hydra-evaluator/hydra-evaluator.cc at line 302
void unlock(){auto conn(dbPool.get());pqxx::work txn(*conn);txn.parameterized("update Jobsets set startTime = null").exec();txn.commit();} - edit in src/hydra-evaluator/hydra-evaluator.cc at line 312
unlock(); - replacement in src/hydra-evaluator/hydra-evaluator.cc at line 315
auto callback = createInterruptCallback([&]() { std::_Exit(0); });auto callback = createInterruptCallback([&]() { std::_Exit(1); }); - edit in src/hydra-evaluator/hydra-evaluator.cc at line 341
bool unlock = false;Evaluator evaluator;std::vector<std::string> args; - replacement in src/hydra-evaluator/hydra-evaluator.cc at line 348
return false;if (*arg == "--unlock")unlock = true;else if (hasPrefix(*arg, "-"))return false;args.push_back(*arg);return true; - replacement in src/hydra-evaluator/hydra-evaluator.cc at line 356
Evaluator().run();if (!args.empty()) {if (args.size() != 2) throw UsageError("Syntax: hydra-evaluator [<project> <jobset>]");evaluator.evalOne = JobsetName(args[0], args[1]);}if (unlock)evaluator.unlock();elseevaluator.run(); - replacement in src/lib/Hydra/Controller/Jobset.pm at line 46
$c->stash->{latestEval} = $c->stash->{jobset}->jobsetevals->search({}, { rows => 1, order_by => ["id desc"] })->single;$c->stash->{latestEval} = $c->stash->{jobset}->jobsetevals->search({ hasnewbuilds => 1 }, { rows => 1, order_by => ["id desc"] })->single; - edit in src/lib/Hydra/Schema/Jobsets.pm at line 135
is_nullable: 1=head2 starttimedata_type: 'integer' - edit in src/lib/Hydra/Schema/Jobsets.pm at line 181
"starttime",{ data_type => "integer", is_nullable => 1 }, - replacement in src/lib/Hydra/Schema/Jobsets.pm at line 355
# Created by DBIx::Class::Schema::Loader v0.07045 @ 2016-10-24 20:12:51# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:PSR66NnVRNTMFhDEm10erA# Created by DBIx::Class::Schema::Loader v0.07045 @ 2017-03-09 13:03:05# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ivYvsUyhEeaeI4EmRQ0/QQ - replacement in src/root/jobset.tt at line 97
[% IF jobset.triggertime %][% IF jobset.starttime %]<tr><th>Evaluation running since:</th><td>[% INCLUDE renderRelativeDate timestamp = jobset.starttime %]</td></tr>[% ELSIF jobset.triggertime %] - replacement in src/root/jobset.tt at line 105
<td>[% INCLUDE renderDateTime timestamp = jobset.triggertime %]</td><td>[% INCLUDE renderRelativeDate timestamp = jobset.triggertime %]</td> - edit in src/script/hydra-eval-jobset at line 752[6.1450]→[6.214:298](∅→∅),[6.298]→[6.0:146](∅→∅),[6.146]→[6.2152:2197](∅→∅),[6.146]→[6.1451:1452](∅→∅),[6.372]→[6.1451:1452](∅→∅),[6.2197]→[6.1451:1452](∅→∅),[6.2923]→[6.1451:1452](∅→∅)
print STDERR "considering jobset ", $jobset->project->name, ":", $jobset->name,$jobset->lastcheckedtime? " (last checked " . (time() - $jobset->lastcheckedtime) . "s ago)\n": " (never checked)\n";my $triggerTime = $jobset->triggertime; - edit in src/script/hydra-eval-jobset at line 770
}if (defined $triggerTime) {txn_do($db, sub {# Only clear the trigger time if the jobset hasn't been# triggered in the meantime. In that case, we need to# evaluate again.my $new = $jobset->get_from_storage();$jobset->update({ triggertime => undef })if $new->triggertime == $triggerTime;}) if !$dryRun; - edit in src/sql/hydra.sql at line 72
startTime integer, -- if jobset is currently running - file addition: upgrade-53.sql[47.3004]
alter table Jobsets add column startTime integer;