Restart jobset evals efficiently

[?]
Oct 27, 2015, 12:43 PM
B3UW2ZRBXXRT4CVGLNPQJG63PQNTEY47N2C3WS56U6SDMIZKJ7HAC

Dependencies

  • [2] MR4QK7CE Restart: Clear failed dependencies
  • [3] VHV6GI4L Add a jobset eval action to restart all aborted/cancelled builds
  • [4] J5ITV54P Make restartBuilds faster
  • [5] RYTQLATY Keep track of failed paths in the Hydra database
  • [6] GSMOFPKF Fix restarting a build
  • [7] UOINKJ2J Add an action to cancel all builds in a jobset eval
  • [8] MBRAFK6F Register restarted derivations as GC roots
  • [*] 2GK5DOU7 * Downloading closures.

Change contents

  • edit in src/lib/Hydra/Helper/Nix.pm at line 445
    [3.788][3.0:18]()
    my @buildIds;
  • replacement in src/lib/Hydra/Helper/Nix.pm at line 446
    [3.804][3.804:826](),[3.826][2.0:19]()
    txn_do($db, sub {
    my %paths;
    [3.804]
    [3.845]
    $builds = $builds->search({ finished => 1 });
  • replacement in src/lib/Hydra/Helper/Nix.pm at line 448
    [3.846][3.846:900]()
    $builds = $builds->search({ finished => 1 });
    [3.846]
    [3.19]
    foreach my $build ($builds->search({}, { columns => ["drvpath"] })) {
    next if !isValidPath($build->drvpath);
    registerRoot $build->drvpath;
    }
  • replacement in src/lib/Hydra/Helper/Nix.pm at line 453
    [3.20][3.900:994](),[3.900][3.900:994](),[3.994][2.20:160](),[3.69][3.21:61](),[2.160][3.21:61](),[3.1036][3.21:61](),[3.61][3.1:43](),[3.1][3.1:43](),[3.43][3.62:72]()
    foreach my $build ($builds->all) {
    next if !isValidPath($build->drvpath);
    $paths{$_->path} = 1 foreach $build->buildoutputs->all;
    $paths{$_->path} = 1 foreach $build->buildstepoutputs->all;
    push @buildIds, $build->id;
    registerRoot $build->drvpath;
    }
    [3.20]
    [3.1101]
    my $nrRestarted = 0;
  • replacement in src/lib/Hydra/Helper/Nix.pm at line 455
    [3.1102][3.73:145]()
    $db->resultset('Builds')->search({ id => \@buildIds })->update(
    [3.1102]
    [3.145]
    txn_do($db, sub {
    $nrRestarted = $builds->update(
  • replacement in src/lib/Hydra/Helper/Nix.pm at line 465
    [3.386][3.386:516]()
    $db->resultset('JobsetEvals')->search({ build => \@buildIds }, { join => 'buildIds' })->update({ nrsucceeded => undef });
    [3.386]
    [3.1492]
    $db->resultset('JobsetEvals')->search(
    { id => { -in => $builds->search({}, { join => { 'jobsetevalmembers' => 'eval' }, select => "jobsetevalmembers.eval", as => "eval", distinct => 1 })->as_query }
    })->update({ nrsucceeded => undef });
  • replacement in src/lib/Hydra/Helper/Nix.pm at line 471
    [3.1577][2.161:244]()
    $db->resultset('FailedPaths')->search({ path => [ keys %paths ]})->delete;
    [3.1577]
    [3.1608]
    my $cleared = $db->resultset('FailedPaths')->search(
    { path => { -in => $builds->search({}, { join => "buildoutputs", select => "buildoutputs.path", as => "path", distinct => 1 })->as_query }
    })->delete;
    $cleared += $db->resultset('FailedPaths')->search(
    { path => { -in => $builds->search({}, { join => "buildstepoutputs", select => "buildstepoutputs.path", as => "path", distinct => 1 })->as_query }
    })->delete;
    print STDERR "cleared $cleared failed paths\n";
  • replacement in src/lib/Hydra/Helper/Nix.pm at line 480
    [3.1640][3.517:547]()
    return scalar(@buildIds);
    [3.1640]
    [3.1616]
    return $nrRestarted;