Use triggers for all notifications on Builds table changes

[?]
Jul 8, 2015, 10:05 AM
H4KMCXGUC5MA7AZUN33GQQWCP66UP7T6IYGJB6HY5AUSKVS32YZAC

Dependencies

  • [2] RYFOZU2Z Don't wake up the queue runner for cached evals
  • [3] RVHBV3B3 Notify the queue runner when a build is deleted
  • [4] DDGBLKEN Update isCurrent properly
  • [5] ATJ54SPX Use PostgreSQL notifications for queue events
  • [6] PHX2HIVG * Store info about the build inputs in the build record.
  • [7] 4FGKYUTN Allow cancelling builds marked as busy
  • [8] CLJQCY2X * Store info about all the build actions and allow them to be
  • [9] 2IQRXLWE Support cancelling builds
  • [10] VHV6GI4L Add a jobset eval action to restart all aborted/cancelled builds
  • [11] UOINKJ2J Add an action to cancel all builds in a jobset eval
  • [12] DDMYFZ5X Fix the jobset unchanged check
  • [13] RYTQLATY Keep track of failed paths in the Hydra database
  • [*] 2GK5DOU7 * Downloading closures.
  • [*] N22GPKYT * Put info about logs / build products in the DB.

Change contents

  • edit in src/lib/Hydra/Helper/Nix.pm at line 436
    [4.1589][4.1204:1262]()
    $db->storage->dbh->do("notify builds_cancelled");
  • edit in src/lib/Hydra/Helper/Nix.pm at line 472
    [4.3072][4.1743:1802]()
    $db->storage->dbh->do("notify builds_restarted");
  • edit in src/script/hydra-evaluator at line 237
    [4.51][2.0:59]()
    $db->storage->dbh->do("notify builds_added");
  • edit in src/sql/hydra.sql at line 206
    [3.135]
    [3.135]
    create function notifyBuildsAdded() returns trigger as 'begin notify builds_added; return null; end;' language plpgsql;
    create trigger BuildsAdded after insert on Builds execute procedure notifyBuildsAdded();
  • replacement in src/sql/hydra.sql at line 210
    [3.136][3.136:285]()
    create function notifyBuildDeleted() returns trigger as $$
    begin
    execute 'notify builds_deleted';
    return null;
    end;
    $$ language plpgsql;
    [3.136]
    [3.285]
    create function notifyBuildsDeleted() returns trigger as 'begin notify builds_deleted; return null; end;' language plpgsql;
    create trigger BuildsDeleted after delete on Builds execute procedure notifyBuildsDeleted();
    create function notifyBuildRestarted() returns trigger as 'begin notify builds_restarted; return null; end;' language plpgsql;
    create trigger BuildRestarted after update on Builds for each row
    when (old.finished = 1 and new.finished = 0) execute procedure notifyBuildRestarted();
  • replacement in src/sql/hydra.sql at line 217
    [3.286][3.286:394]()
    create trigger BuildDeleted after delete on Builds
    for each row
    execute procedure notifyBuildDeleted();
    [3.286]
    [3.394]
    create function notifyBuildCancelled() returns trigger as 'begin notify builds_cancelled; return null; end;' language plpgsql;
    create trigger BuildCancelled after update on Builds for each row
    when (old.finished = 0 and new.finished = 1 and new.buildStatus = 4) execute procedure notifyBuildCancelled();
  • replacement in src/sql/upgrade-35.sql at line 1
    [3.404][3.405:554]()
    create function notifyBuildDeleted() returns trigger as $$
    begin
    execute 'notify builds_deleted';
    return null;
    end;
    $$ language plpgsql;
    [3.404]
    [3.554]
    create function notifyBuildsAdded() returns trigger as 'begin notify builds_added; return null; end;' language plpgsql;
    create trigger BuildsAdded after insert on Builds execute procedure notifyBuildsAdded();
    create function notifyBuildsDeleted() returns trigger as 'begin notify builds_deleted; return null; end;' language plpgsql;
    create trigger BuildsDeleted after delete on Builds execute procedure notifyBuildsDeleted();
    create function notifyBuildRestarted() returns trigger as 'begin notify builds_restarted; return null; end;' language plpgsql;
    create trigger BuildRestarted after update on Builds for each row
    when (old.finished = 1 and new.finished = 0) execute procedure notifyBuildRestarted();
  • replacement in src/sql/upgrade-35.sql at line 11
    [3.555][3.555:663]()
    create trigger BuildDeleted after delete on Builds
    for each row
    execute procedure notifyBuildDeleted();
    [3.555]
    create function notifyBuildCancelled() returns trigger as 'begin notify builds_cancelled; return null; end;' language plpgsql;
    create trigger BuildCancelled after update on Builds for each row
    when (old.finished = 0 and new.finished = 1 and new.buildStatus = 4) execute procedure notifyBuildCancelled();