* Store jobset evaluations in the database explicitly. This includes

[?]
Mar 5, 2010, 3:41 PM
RFE6T5LGBFFNEPHZOPF4UNMFC2L4CGD5TPAMOXDLRPH3TZJ43UBAC

Dependencies

  • [2] VVOAXWH4 fix wrong dbix:class:loader generation
  • [3] DVNWJXWW * Generic declaration of build products.
  • [4] 3ZCEPLNO
  • [5] ZEHSSVFG
  • [6] BD3GRK4B * Get rid of "positive failures" and separate log phases.
  • [7] IWHFLFVV * Randomly permute the order in which builds are added. This is
  • [8] A63IHCMX * Register GC roots properly.
  • [9] D3DIBMOK * For products that are directories (like manuals), allow a default
  • [10] GWCV3TQV * BuildInputs table: link to dependencies, include store paths.
  • [11] ECBA3GQO * Make the schema class names match the case of the SQL table names.
  • [12] AHTEIK7G * Added a maintainers field to the Builds table.
  • [13] WYN733ST * Store build duration, handle cached builds.
  • [14] KOTB7BKV
  • [15] J5UVLXOK * Start of a basic Catalyst web interface.
  • [16] 6BLUKEQ2 * Caching of "path" inputs, and fake a revision number for those.
  • [17] YAPITGB3 * Boolean inputs.
  • [18] TWURROKC
  • [19] UUGBVEGY * Development notes.
  • [20] KN3VYE5P * Cleaned up the foreign key constraints.
  • [21] S6OISBQ3 * Mark the "current" builds in a jobset, i.e. those corresponding to
  • [22] D5QIOJGP * Move everything up one directory.
  • [23] P5X4P6VK * Renaming "release sets" to "views" (not finished yet). Having
  • [24] IK53RV4V
  • [25] BHZXGT2H * Channels: provide an index page that lists all the packages in the
  • [26] KXGOUX7P * Creating releases.
  • [27] 7YBYT2LQ
  • [28] ZVTSOVHN * Support Subversion checkouts.
  • [29] SJLEZFC4 check getHydraPath in stead of Envvar HYDRA_DBI directly
  • [30] YTZOC7C5 * Editing of jobset inputs.
  • [31] H7CNGK4O * Log evaluation errors etc. in the DB.
  • [32] GNIEG2GC * Disambiguate jobs by jobset name. I.e. jobs with the same name in
  • [33] V4RNHJNR * Add a link to each project's homepage. Suggested by karltk.
  • [34] S66BOMVU * Added authentication.
  • [35] TWVSALRL * Allow the maximum number of concurrent builds per platform to be
  • [36] L2E6EVE2 * Merged the Build and Job tables.
  • [37] SHZLOM5M * eval-jobs -> hydra_eval_jobs.
  • [38] OG7BEM57
  • [39] 37R34XJO * Negative caching: don't perform a build if a dependency already
  • [40] RBNQKATL * Adding persistant releases. A release is a named set of builds.
  • [41] 3HCBU2FA
  • [42] JTRG7RDQ add support for git as jobinput
  • [43] TIOBBINA * Some renaming.
  • [44] JM3DPYOM generated schema with new dbix class schema loader, grrrrrr
  • [45] PHX2HIVG * Store info about the build inputs in the build record.
  • [46] 5SHCWE7X * Prevent repeated evaluation of a jobset with the same inputs. This
  • [47] OOQ2D3KC * Refactoring: move fetchInput out of hydra_scheduler into a separate
  • [48] RAKTHYAI * In the job status and error pages, show when the status of a job
  • [49] 3XTHEUMP * Implemented the clone feature.
  • [50] FDE3BJAP * Refactoring.
  • [51] X27GNHDV * Basic job info in the database.
  • [52] POPU2ATH * hydra_scheduler: use eval-jobs.
  • [53] R5D7DZPE
  • [54] RU7AQO7U * Role-based access control. Only admins can create projects. Only
  • [55] LCKWLQW3 * In Sqlite "release" is now a keyword, so use "release_" instead.
  • [56] S5PV6IIM * Represent jobs explicitly in the DB.
  • [57] FHF6IZJQ * Basic release management: releases are now dynamically computed as
  • [58] IXCUNELF * Don't bother with the Jobs.active column anymore.
  • [59] JJT5QG3K remove revision from cached cvs inputs, and added missing files
  • [60] FYO6NECE hydra
  • [61] B72GLND4
  • [62] M552HLIA * Support variant builds.
  • [63] N22GPKYT * Put info about logs / build products in the DB.
  • [64] FD76WVTQ missing file
  • [65] 67P45PY4
  • [66] QNDXPVCI * Store the jobset's nixExprPath and nixExprInput fields in a build to
  • [67] TQKGQ5R3
  • [68] BTOXLRG3 * Record the input containing the Nix expression (release.nix) in the
  • [69] CMU3YKOU * Store the release name.
  • [70] YFPZ46YK * hydra: added variant of build input type, 'build output (same system)' to allow better continous integration in one jobset for multiple system. it makes sure that the system of the build that is passed as input for a job has the same system as the job.
  • [71] CLJQCY2X * Store info about all the build actions and allow them to be
  • [72] VCOSLZRP
  • [73] BVOPAMLS
  • [74] 4D4U5IPY * Allow jobsets to be disabled.
  • [75] VJHIHMEH * Store the meta.longDescription and meta.license attributes in the
  • [76] SHBLLAVH * More global substitution.
  • [77] TLZ2SPBR
  • [78] EYNG4EL4 * Regenerate the bindings from a clean sqlite database.
  • [79] 3E6IP3R3 * Add the name of the jobset to ReleaseSetJobs, otherwise we can't
  • [*] ZDENAYQI * email notification of evaluation errors to project owner (if desired)
  • [*] 7ZHHVD6Q * Inputs of type "build" must now be declared explicitly.

Change contents

  • edit in doc/dev-notes.txt at line 48
    [3.3266]
    [3.3266]
    * Changing the priority of all builds for a jobset:
    update buildschedulinginfo set priority = 20 where id in (select id from builds where finished = 0 and project = 'nixpkgs' and jobset = 'trunk');
  • edit in doc/dev-notes.txt at line 109
    [3.101]
    [3.339]
    # Adding JobsetEvals.
    drop table JobsetInputHashes;
    (add JobsetEvals, JobsetEvalMembers)
  • replacement in doc/dev-notes.txt at line 149
    [3.144][3.144:272]()
    $ nix-env -p /nix/var/nix/profiles/per-user/eelco/hydra-deps -f deps.nix -i \* --arg pkgs 'import /home/eelco/Dev/nixpkgs {}'
    [3.144]
    [3.272]
    $ nix-env -p $NIX_USER_PROFILE_DIR/hydra-deps -f deps.nix -i \* --arg pkgs 'import /etc/nixos/nixpkgs {}'
  • edit in doc/dev-notes.txt at line 165
    [3.75]
    * Find the builds with the highest number of build steps:
    select id, (select count(*) from buildsteps where build = x.id) as n from builds x order by n desc;
  • replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 77
    [3.4777][3.4777:4844]()
    {srcpath => $uri, lastseen => {">", $timestamp - 60}},
    [3.4777]
    [3.4844]
    {srcpath => $uri, lastseen => {">", $timestamp - 30}},
  • replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 508
    [3.5079][3.5079:5145]()
    $currentBuilds->{$_->id} = 1 foreach @previousBuilds;
    [3.5079]
    [3.5145]
    $currentBuilds->{$_->id} = 0 foreach @previousBuilds;
  • replacement in src/lib/Hydra/Schema/BuildSchedulingInfo.pm at line 47
    [3.4806][3.4806:4838]()
    default_value: (empty string)
    [3.4806]
    [3.4838]
    default_value: ''
  • replacement in src/lib/Hydra/Schema/BuildSchedulingInfo.pm at line 88
    [3.4219][3.5149:5230]()
    { data_type => "text", default_value => "", is_nullable => 0, size => undef },
    [3.4219]
    [3.4279]
    { data_type => "text", default_value => "''", is_nullable => 0, size => undef },
  • replacement in src/lib/Hydra/Schema/BuildSchedulingInfo.pm at line 121
    [3.4617][3.5403:5545]()
    # Created by DBIx::Class::Schema::Loader v0.05003 @ 2010-02-25 10:29:41
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:yEhHeANRynKf72dp5URvZA
    [3.4617]
    [3.5545]
    # Created by DBIx::Class::Schema::Loader v0.05000 @ 2010-03-05 13:07:46
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:qOU/YGv3fgPynBXovV6gfg
  • edit in src/lib/Hydra/Schema/Builds.pm at line 423
    [3.6193]
    [3.6193]
    =head2 jobsetevalmembers
  • replacement in src/lib/Hydra/Schema/Builds.pm at line 425
    [3.6194][2.0:142]()
    # Created by DBIx::Class::Schema::Loader v0.05003 @ 2010-02-25 11:19:24
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:oCkX9bughWPZg6JKaOxDJA
    [3.6194]
    [3.62]
    Type: has_many
    Related object: L<Hydra::Schema::JobsetEvalMembers>
    =cut
    __PACKAGE__->has_many(
    "jobsetevalmembers",
    "Hydra::Schema::JobsetEvalMembers",
    { "foreign.build" => "self.id" },
    );
  • edit in src/lib/Hydra/Schema/Builds.pm at line 437
    [3.63]
    [3.63]
    # Created by DBIx::Class::Schema::Loader v0.05000 @ 2010-03-05 13:07:46
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:sE2/zTcfETC8Eahh6NQDZA
  • file addition: JobsetEvalMembers.pm (----------)
    [3.477]
    package Hydra::Schema::JobsetEvalMembers;
    # Created by DBIx::Class::Schema::Loader
    # DO NOT MODIFY THE FIRST PART OF THIS FILE
    use strict;
    use warnings;
    use base 'DBIx::Class::Core';
    =head1 NAME
    Hydra::Schema::JobsetEvalMembers
    =cut
    __PACKAGE__->table("JobsetEvalMembers");
    =head1 ACCESSORS
    =head2 eval
    data_type: integer
    default_value: undef
    is_foreign_key: 1
    is_nullable: 0
    size: undef
    =head2 build
    data_type: integer
    default_value: undef
    is_foreign_key: 1
    is_nullable: 0
    size: undef
    =head2 isnew
    data_type: integer
    default_value: undef
    is_nullable: 0
    size: undef
    =cut
    __PACKAGE__->add_columns(
    "eval",
    {
    data_type => "integer",
    default_value => undef,
    is_foreign_key => 1,
    is_nullable => 0,
    size => undef,
    },
    "build",
    {
    data_type => "integer",
    default_value => undef,
    is_foreign_key => 1,
    is_nullable => 0,
    size => undef,
    },
    "isnew",
    {
    data_type => "integer",
    default_value => undef,
    is_nullable => 0,
    size => undef,
    },
    );
    __PACKAGE__->set_primary_key("eval", "build");
    =head1 RELATIONS
    =head2 eval
    Type: belongs_to
    Related object: L<Hydra::Schema::JobsetEvals>
    =cut
    __PACKAGE__->belongs_to("eval", "Hydra::Schema::JobsetEvals", { id => "eval" }, {});
    =head2 build
    Type: belongs_to
    Related object: L<Hydra::Schema::Builds>
    =cut
    __PACKAGE__->belongs_to("build", "Hydra::Schema::Builds", { id => "build" }, {});
    # Created by DBIx::Class::Schema::Loader v0.05000 @ 2010-03-05 13:07:46
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:vwefi8q3HolhFCkB9aEVWw
    # You can replace this text with custom content, and it will be preserved on regeneration
    1;
  • file move: JobsetInputHashes.pm (----------)JobsetEvals.pm (----------)
    [3.477]
    [3.65]
  • replacement in src/lib/Hydra/Schema/JobsetEvals.pm at line 1
    [3.65][3.66:108]()
    package Hydra::Schema::JobsetInputHashes;
    [3.65]
    [3.108]
    package Hydra::Schema::JobsetEvals;
  • replacement in src/lib/Hydra/Schema/JobsetEvals.pm at line 14
    [3.16007][3.16007:16040]()
    Hydra::Schema::JobsetInputHashes
    [3.16007]
    [3.16040]
    Hydra::Schema::JobsetEvals
  • replacement in src/lib/Hydra/Schema/JobsetEvals.pm at line 18
    [3.16047][3.285:326](),[3.285][3.285:326]()
    __PACKAGE__->table("JobsetInputHashes");
    [3.16047]
    [3.16048]
    __PACKAGE__->table("JobsetEvals");
  • edit in src/lib/Hydra/Schema/JobsetEvals.pm at line 21
    [3.16066]
    [3.16066]
    =head2 id
  • edit in src/lib/Hydra/Schema/JobsetEvals.pm at line 24
    [3.16067]
    [3.16067]
    data_type: integer
    default_value: undef
    is_auto_increment: 1
    is_nullable: 0
    size: undef
  • replacement in src/lib/Hydra/Schema/JobsetEvals.pm at line 46
    [3.16284][3.16284:16296]()
    =head2 hash
    [3.16284]
    [3.16296]
    =head2 timestamp
    data_type: integer
    default_value: undef
    is_nullable: 0
    size: undef
    =head2 checkouttime
    data_type: integer
    default_value: undef
    is_nullable: 0
    size: undef
    =head2 evaltime
  • replacement in src/lib/Hydra/Schema/JobsetEvals.pm at line 62
    [3.16297][3.16297:16315]()
    data_type: text
    [3.16297]
    [3.16315]
    data_type: integer
  • replacement in src/lib/Hydra/Schema/JobsetEvals.pm at line 67
    [3.16370][3.16370:16387]()
    =head2 timestamp
    [3.16370]
    [3.16387]
    =head2 hasnewbuilds
  • edit in src/lib/Hydra/Schema/JobsetEvals.pm at line 70
    [3.16409]
    [3.16409]
    default_value: undef
    is_nullable: 0
    size: undef
    =head2 hash
    data_type: text
  • edit in src/lib/Hydra/Schema/JobsetEvals.pm at line 84
    [3.352]
    [3.352]
    "id",
    {
    data_type => "integer",
    default_value => undef,
    is_auto_increment => 1,
    is_nullable => 0,
    size => undef,
    },
  • replacement in src/lib/Hydra/Schema/JobsetEvals.pm at line 108
    [3.633][3.633:643]()
    "hash",
    [3.633]
    [3.643]
    "timestamp",
    {
    data_type => "integer",
    default_value => undef,
    is_nullable => 0,
    size => undef,
    },
    "checkouttime",
  • replacement in src/lib/Hydra/Schema/JobsetEvals.pm at line 117
    [3.647][3.647:672]()
    data_type => "text",
    [3.647]
    [3.672]
    data_type => "integer",
  • replacement in src/lib/Hydra/Schema/JobsetEvals.pm at line 122
    [3.746][3.746:761]()
    "timestamp",
    [3.746]
    [3.761]
    "evaltime",
    {
    data_type => "integer",
    default_value => undef,
    is_nullable => 0,
    size => undef,
    },
    "hasnewbuilds",
  • edit in src/lib/Hydra/Schema/JobsetEvals.pm at line 136
    [3.867]
    [3.867]
    "hash",
    {
    data_type => "text",
    default_value => undef,
    is_nullable => 0,
    size => undef,
    },
  • replacement in src/lib/Hydra/Schema/JobsetEvals.pm at line 144
    [3.870][3.870:929]()
    __PACKAGE__->set_primary_key("project", "jobset", "hash");
    [3.870]
    [3.16471]
    __PACKAGE__->set_primary_key("id");
  • edit in src/lib/Hydra/Schema/JobsetEvals.pm at line 171
    [3.16754]
    [3.1126]
    );
    =head2 jobsetevalmembers
    Type: has_many
    Related object: L<Hydra::Schema::JobsetEvalMembers>
    =cut
    __PACKAGE__->has_many(
    "jobsetevalmembers",
    "Hydra::Schema::JobsetEvalMembers",
    { "foreign.eval" => "self.id" },
  • edit in src/lib/Hydra/Schema/JobsetEvals.pm at line 186
    [3.1129]
    [3.1129]
  • edit in src/lib/Hydra/Schema/JobsetEvals.pm at line 188
    [3.1130]
    [3.1130]
    # Created by DBIx::Class::Schema::Loader v0.05000 @ 2010-03-05 13:33:51
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:QD7ZMOLp9HpK0mAYkk0d/Q
  • replacement in src/lib/Hydra/Schema/JobsetEvals.pm at line 191
    [3.1131][3.16755:16897]()
    # Created by DBIx::Class::Schema::Loader v0.05003 @ 2010-02-25 10:29:41
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:dK9vFHXInejDW/rl1i/kFA
    [3.1131]
    [3.1277]
    use Hydra::Helper::Nix;
    # !!! Ugly, should be generated.
    my $hydradbi = getHydraDBPath;
    if ($hydradbi =~ m/^dbi:Pg/) {
    __PACKAGE__->sequence('jobsetevals_id_seq');
    }
  • edit in src/lib/Hydra/Schema/JobsetEvals.pm at line 199
    [3.1278]
    [3.1368]
    # You can replace this text with custom content, and it will be preserved on regeneration
  • replacement in src/lib/Hydra/Schema/Jobsets.pm at line 256
    [3.19550][3.19550:19575]()
    =head2 jobsetinputhashes
    [3.19550]
    [3.19575]
    =head2 jobsetevals
  • replacement in src/lib/Hydra/Schema/Jobsets.pm at line 260
    [3.19592][3.19592:19644]()
    Related object: L<Hydra::Schema::JobsetInputHashes>
    [3.19592]
    [3.19644]
    Related object: L<Hydra::Schema::JobsetEvals>
  • replacement in src/lib/Hydra/Schema/Jobsets.pm at line 265
    [3.3042][3.3042:3103]()
    "jobsetinputhashes",
    "Hydra::Schema::JobsetInputHashes",
    [3.3042]
    [3.3103]
    "jobsetevals",
    "Hydra::Schema::JobsetEvals",
  • replacement in src/lib/Hydra/Schema/Jobsets.pm at line 274
    [3.3196][3.19652:19794]()
    # Created by DBIx::Class::Schema::Loader v0.05003 @ 2010-02-25 10:29:41
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ORCZ73BJrscvmyf/4ds0UQ
    [3.3196]
    [3.3135]
    # Created by DBIx::Class::Schema::Loader v0.05000 @ 2010-03-05 13:07:46
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Z0HutYxnzYVuQc3W51mq5Q
  • replacement in src/lib/Hydra/Schema/Projects.pm at line 219
    [3.21228][3.21228:21253]()
    =head2 jobsetinputhashes
    [3.21228]
    [3.21253]
    =head2 jobsetevals
  • replacement in src/lib/Hydra/Schema/Projects.pm at line 223
    [3.21270][3.21270:21322]()
    Related object: L<Hydra::Schema::JobsetInputHashes>
    [3.21270]
    [3.21322]
    Related object: L<Hydra::Schema::JobsetEvals>
  • replacement in src/lib/Hydra/Schema/Projects.pm at line 228
    [3.1762][3.1762:1823]()
    "jobsetinputhashes",
    "Hydra::Schema::JobsetInputHashes",
    [3.1762]
    [3.1823]
    "jobsetevals",
    "Hydra::Schema::JobsetEvals",
  • replacement in src/lib/Hydra/Schema/Projects.pm at line 234
    [3.3685][3.21330:21472]()
    # Created by DBIx::Class::Schema::Loader v0.05003 @ 2010-02-25 10:29:41
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:yH/9hz6FH09kgusRNWrqPg
    [3.3685]
    [3.3827]
    # Created by DBIx::Class::Schema::Loader v0.05000 @ 2010-03-05 13:07:45
    # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:SXJ+FzgNDad87OKSBH2qrg
  • edit in src/script/hydra_scheduler.pl at line 22
    [81.484]
    [3.1424]
  • edit in src/script/hydra_scheduler.pl at line 103
    [3.2152]
    [82.1664]
    my $checkoutStart = time;
  • edit in src/script/hydra_scheduler.pl at line 105
    [82.1712]
    [3.4018]
    my $checkoutStop = time;
  • replacement in src/script/hydra_scheduler.pl at line 113
    [3.2335][3.2335:2400]()
    if ($jobset->jobsetinputhashes->find({hash => $argsHash})) {
    [3.2335]
    [3.2400]
    if ($jobset->jobsetevals->find({hash => $argsHash})) {
  • edit in src/script/hydra_scheduler.pl at line 122
    [3.2226]
    [3.6997]
    my $evalStart = time;
  • replacement in src/script/hydra_scheduler.pl at line 124
    [3.1303][3.7781:7782](),[3.4252][3.7781:7782](),[3.7096][3.7781:7782](),[3.7781][3.7781:7782](),[3.8110][3.2818:2866](),[3.2866][3.5157:5180](),[3.5180][3.234:282](),[3.2866][3.234:282](),[3.282][3.5847:5886](),[3.2906][3.5847:5886](),[3.5886][3.2906:2965](),[3.2906][3.2906:2965](),[3.2965][3.7097:7191](),[3.759][3.7080:7086](),[3.1182][3.7080:7086](),[3.2785][3.7080:7086](),[3.3020][3.7080:7086](),[3.4650][3.7080:7086](),[3.5268][3.7080:7086](),[3.6444][3.7080:7086](),[3.7191][3.7080:7086](),[3.7080][3.7080:7086]()
    # Schedule each successfully evaluated job.
    my %currentBuilds;
    foreach my $job (permute @{$jobs->{job}}) {
    next if $job->{jobName} eq "";
    print "considering job " . $job->{jobName} . "\n";
    checkBuild($db, $project, $jobset, $inputInfo, $nixExprInput, $job, \%currentBuilds);
    }
    [3.7096]
    [3.5887]
    my $evalStop = time;
  • edit in src/script/hydra_scheduler.pl at line 128
    [3.5278]
    [3.136]
    # Schedule each successfully evaluated job.
    my %currentBuilds;
    foreach my $job (permute @{$jobs->{job}}) {
    next if $job->{jobName} eq "";
    print "considering job " . $job->{jobName} . "\n";
    checkBuild($db, $project, $jobset, $inputInfo, $nixExprInput, $job, \%currentBuilds);
    }
  • edit in src/script/hydra_scheduler.pl at line 155
    [3.5839]
    [3.5839]
    }
    my $hasNewBuilds = 0;
    while (my ($id, $new) = each %currentBuilds) {
    $hasNewBuilds = 1 if $new;
  • replacement in src/script/hydra_scheduler.pl at line 162
    [3.2572][3.2572:2656](),[3.2656][3.6621:6630](),[3.5849][3.6621:6630](),[3.6621][3.6621:6630]()
    $jobset->jobsetinputhashes->create({hash => $argsHash, timestamp => time});
    [3.2572]
    [3.5850]
    my $ev = $jobset->jobsetevals->create(
    { hash => $argsHash
    , timestamp => time
    , checkouttime => abs($checkoutStop - $checkoutStart)
    , evaltime => abs($evalStop - $evalStart)
    , hasnewbuilds => $hasNewBuilds
    });
    if ($hasNewBuilds) {
    while (my ($id, $new) = each %currentBuilds) {
    $ev->jobsetevalmembers->create({ build => $id, isnew => $new });
    }
    }
  • replacement in src/sql/hydra.sql at line 406
    [3.2662][3.2662:3162]()
    -- This table is used to prevent repeated Nix expression evaluation
    -- for the same set of inputs for a jobset. In the scheduler, after
    -- obtaining the current inputs for a jobset, we hash the inputs
    -- together, and if the resulting hash already appears in this table,
    -- we can skip the jobset. Otherwise it's added to the table, and the
    -- Nix expression for the jobset is evaluated. The hash is computed
    -- over the command-line arguments to hydra_eval_jobs.
    create table JobsetInputHashes (
    [3.2662]
    [3.3162]
    create table JobsetEvals (
    #ifdef POSTGRESQL
    id serial primary key not null,
    #else
    id integer primary key autoincrement not null,
    #endif
  • edit in src/sql/hydra.sql at line 415
    [3.3228]
    [3.3228]
    timestamp integer not null, -- when this entry was added
    checkoutTime integer not null, -- how long obtaining the inputs took (in seconds)
    evalTime integer not null, -- how long evaluation took (in seconds)
    -- If 0, then the evaluation of this jobset did not cause any new
    -- builds to be added to the database. Otherwise, *all* the
    -- builds resulting from the evaluation of the jobset (including
    -- existing ones) can be found in the JobsetEvalMembers table.
    hasNewBuilds integer not null,
    -- Used to prevent repeated Nix expression evaluation for the same
    -- set of inputs for a jobset. In the scheduler, after obtaining
    -- the current inputs for a jobset, we hash the inputs together,
    -- and if the resulting hash already appears in this table, we can
    -- skip the jobset. Otherwise we proceed. The hash is computed
    -- over the command-line arguments to hydra_eval_jobs.
  • replacement in src/sql/hydra.sql at line 433
    [3.3261][3.3261:3340]()
    timestamp integer not null,
    primary key (project, jobset, hash),
    [3.3261]
    [3.3340]
  • edit in src/sql/hydra.sql at line 436
    [3.3537]
    [3.5020]
    );
    create table JobsetEvalMembers (
    eval integer not null references JobsetEvals(id) on delete cascade,
    build integer not null references Builds(id) on delete cascade,
    isNew integer not null,
    primary key (eval, build)