If a build step fail, immediately fail all queued builds that depend on it

[?]
May 3, 2013, 4:30 PM
MNZ67UXOZ427J4FLNA5STC6EB567WU65PJE7B5IOLM4UICU3RFNQC

Dependencies

  • [2] XYBSTHMJ fix for buildsteps starting at 0, probably something changed in catalyst
  • [3] PMNWRTGJ Add multiple output support
  • [4] FYO6NECE hydra
  • [5] G5A7TZVI * Don't discard old build steps when restarting a build.
  • [6] MPGVCHVF * Fix an apparent incompatibility with recent DBIx::Class.
  • [7] FLPZ3YCK Remove debug line
  • [8] CLJQCY2X * Store info about all the build actions and allow them to be
  • [9] A63IHCMX * Register GC roots properly.
  • [10] 2IEFMER5 * Add --fallback to prevent problems with obsolete substitutes.
  • [11] BOFOHCPK removed debug print, added last 50 lines in failure emails
  • [*] 7YBYT2LQ
  • [*] OG7BEM57
  • [*] L2E6EVE2 * Merged the Build and Job tables.
  • [*] AS5PAYLI

Change contents

  • edit in src/script/hydra-build at line 215
    [3.15979]
    [3.15979]
    }
    sub nextFreeStepNr {
    my ($build) = @_;
    my $max = $build->buildsteps->find(
    {}, {select => {max => 'stepnr + 1'}, as => ['max']});
    return (defined $max && defined $max->get_column('max')) ? $max->get_column('max') : 1;
  • edit in src/script/hydra-build at line 224
    [3.15981]
    [14.871]
    sub failDependents {
    my ($drvPath, $errorMsg) = @_;
    # Get the referrer closure of $drvPath.
    my @dependentDrvs = computeFSClosure(1, 0, $drvPath);
    my $time = time();
    txn_do($db, sub {
  • edit in src/script/hydra-build at line 236
    [14.872]
    [3.15982]
    my @dependentBuilds = $db->resultset('Builds')->search(
    { drvpath => [ @dependentDrvs ], finished => 0, busy => 0 });
  • edit in src/script/hydra-build at line 239
    [3.15983]
    [15.7330]
    for my $d (@dependentBuilds) {
    print STDERR "failing dependent build ", $d->id, " of ", $d->project->name, ":", $d->jobset->name, ":", $d->job->name, "\n";
    $d->update(
    { finished => 1
    , logfile => ''
    , timestamp => time # !!! Why change the timestamp?
    , iscachedbuild => 0
    , buildstatus => $drvPath eq $d->drvpath ? 1 : 2
    , starttime => $time
    , stoptime => $time
    , errormsg => undef
    });
    my $step = $d->buildsteps->create(
    { stepnr => nextFreeStepNr($d)
    , type => 0 # = build
    , drvpath => $drvPath
    , busy => 0
    , status => 1
    , starttime => time
    , stoptime => time
    , errormsg => $errorMsg
    });
    addBuildStepOutputs($step);
    }
    });
    }
  • edit in src/script/hydra-build at line 305
    [3.16261][4.405:406](),[4.1163][4.405:406](),[4.406][4.4:115](),[4.4924][4.4:115](),[4.1][4.4:115](),[4.115][2.0:107]()
    my $max = $build->buildsteps->find(
    {}, {select => {max => 'stepnr + 1'}, as => ['max']});
    my $buildStepNr = (defined $max && defined $max->get_column('max')) ? $max->get_column('max') : 1;
  • edit in src/script/hydra-build at line 306
    [4.5141]
    [4.144]
    my $buildStepNr = nextFreeStepNr($build);
  • edit in src/script/hydra-build at line 379
    [16.649]
    [16.649]
    # Immediately fail all builds that depend on this derivation.
    failDependents($drvPathStep, $errorMsg);