forked from lix-project/hydra
hydra-update-gc-roots: Keep derivations of failed builds
By keeping the derivations of failed builds in the most recent evaluations, we ensure that failed builds can be restarted.
This commit is contained in:
parent
4aa01e021e
commit
4cf0d7c4b3
|
@ -21,14 +21,15 @@ sub addRoot {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
my @columns = ( "id", "project", "jobset", "job", "system", "finished", "drvpath", "timestamp" );
|
my @columns = ( "id", "project", "jobset", "job", "system", "finished", "drvpath", "timestamp", "buildstatus" );
|
||||||
|
|
||||||
sub keepBuild {
|
sub keepBuild {
|
||||||
my ($build) = @_;
|
my ($build, $keepFailedDrvs) = @_;
|
||||||
print STDERR " keeping ", ($build->finished ? "" : "scheduled "), "build ", $build->id, " (",
|
print STDERR " keeping ", ($build->finished ? "" : "scheduled "), "build ", $build->id, " (",
|
||||||
$build->get_column('project'), ":", $build->get_column('jobset'), ":", $build->get_column('job'), "; ",
|
$build->get_column('project'), ":", $build->get_column('jobset'), ":", $build->get_column('job'), "; ",
|
||||||
$build->system, "; ",
|
$build->system, "; ",
|
||||||
strftime("%Y-%m-%d %H:%M:%S", localtime($build->timestamp)), ")\n";
|
strftime("%Y-%m-%d %H:%M:%S", localtime($build->timestamp)), ")\n";
|
||||||
|
if ($build->finished && ($build->buildstatus == 0 || $build->buildstatus == 6)) {
|
||||||
foreach my $out ($build->buildoutputs->all) {
|
foreach my $out ($build->buildoutputs->all) {
|
||||||
if (isValidPath($out->path)) {
|
if (isValidPath($out->path)) {
|
||||||
addRoot $out->path;
|
addRoot $out->path;
|
||||||
|
@ -36,7 +37,8 @@ sub keepBuild {
|
||||||
print STDERR " warning: output ", $out->path, " has disappeared\n" if $build->finished;
|
print STDERR " warning: output ", $out->path, " has disappeared\n" if $build->finished;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!$build->finished) {
|
}
|
||||||
|
if (!$build->finished || ($keepFailedDrvs && $build->buildstatus != 0)) {
|
||||||
if (isValidPath($build->drvpath)) {
|
if (isValidPath($build->drvpath)) {
|
||||||
addRoot $build->drvpath;
|
addRoot $build->drvpath;
|
||||||
} else {
|
} else {
|
||||||
|
@ -58,12 +60,12 @@ closedir DIR;
|
||||||
|
|
||||||
# For scheduled builds, we register the derivation as a GC root.
|
# For scheduled builds, we register the derivation as a GC root.
|
||||||
print STDERR "*** looking for scheduled builds\n";
|
print STDERR "*** looking for scheduled builds\n";
|
||||||
keepBuild $_ foreach $db->resultset('Builds')->search({ finished => 0 }, { columns => [ @columns ] });
|
keepBuild($_, 0) foreach $db->resultset('Builds')->search({ finished => 0 }, { columns => [ @columns ] });
|
||||||
|
|
||||||
|
|
||||||
# Keep every build in every release of every project.
|
# Keep every build in every release of every project.
|
||||||
print STDERR "*** looking for release members\n";
|
print STDERR "*** looking for release members\n";
|
||||||
keepBuild $_ foreach $db->resultset('Builds')->search_literal(
|
keepBuild($_, 0) foreach $db->resultset('Builds')->search_literal(
|
||||||
"exists (select 1 from releasemembers where build = me.id)",
|
"exists (select 1 from releasemembers where build = me.id)",
|
||||||
{ order_by => ["project", "jobset", "job", "id"], columns => [ @columns ] });
|
{ order_by => ["project", "jobset", "job", "id"], columns => [ @columns ] });
|
||||||
|
|
||||||
|
@ -72,7 +74,7 @@ keepBuild $_ foreach $db->resultset('Builds')->search_literal(
|
||||||
print STDERR "*** looking for kept builds\n";
|
print STDERR "*** looking for kept builds\n";
|
||||||
my @buildsToKeep = $db->resultset('Builds')->search(
|
my @buildsToKeep = $db->resultset('Builds')->search(
|
||||||
{ finished => 1, keep => 1 }, { order_by => ["project", "jobset", "job", "id"], columns => [ @columns ] });
|
{ finished => 1, keep => 1 }, { order_by => ["project", "jobset", "job", "id"], columns => [ @columns ] });
|
||||||
keepBuild $_ foreach @buildsToKeep;
|
keepBuild($_, 0) foreach @buildsToKeep;
|
||||||
|
|
||||||
|
|
||||||
# Go over all projects.
|
# Go over all projects.
|
||||||
|
@ -107,9 +109,8 @@ foreach my $project ($db->resultset('Projects')->search({}, { order_by => ["name
|
||||||
, order_by => "id desc", rows => $keepnr });
|
, order_by => "id desc", rows => $keepnr });
|
||||||
}
|
}
|
||||||
|
|
||||||
keepBuild $_ foreach $jobset->builds->search(
|
keepBuild($_, 1) foreach $jobset->builds->search(
|
||||||
{ finished => 1, buildStatus => { -in => [0, 6] }
|
{ id => { -in => $db->resultset('JobsetEvalMembers')->search({ eval => { -in => [@evals] } }, { select => "build" })->as_query }
|
||||||
, id => { -in => $db->resultset('JobsetEvalMembers')->search({ eval => { -in => [@evals] } }, { select => "build" })->as_query }
|
|
||||||
},
|
},
|
||||||
{ order_by => ["job", "id"], columns => [ @columns ] });
|
{ order_by => ["job", "id"], columns => [ @columns ] });
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue