* Represent jobs explicitly in the DB.
[?]
Mar 13, 2009, 2:49 PM
S5PV6IIMKJ7PGWIFLLXERHYF3BCP2UEGFRZEZLD6UUBLVEZXJLUACDependencies
- [2]
D5QIOJGP* Move everything up one directory. - [3]
SHZLOM5M* eval-jobs -> hydra_eval_jobs. - [4]
GNIEG2GC* Disambiguate jobs by jobset name. I.e. jobs with the same name in - [5]
ZVTSOVHN* Support Subversion checkouts. - [6]
2T42QGZD* Register builds as GC roots so they don't get deleted. - [7]
PHX2HIVG* Store info about the build inputs in the build record. - [8]
EYNG4EL4* Regenerate the bindings from a clean sqlite database. - [9]
POPU2ATH* hydra_scheduler: use eval-jobs. - [10]
IN272KZW* Automatically keep all builds in the latest successful release in - [11]
AFTXA575* $HYDRA_DATA environment variable. - [12]
IK53RV4V - [13]
KOTB7BKV - [14]
S66BOMVU* Added authentication. - [15]
FEMR2C5W - [16]
FPK5LF53* Put the project-related actions in a separate controller. Put the - [17]
UMBR3VG3 - [18]
L2E6EVE2* Merged the Build and Job tables. - [19]
RU7AQO7U* Role-based access control. Only admins can create projects. Only - [20]
3ZCEPLNO - [21]
XNCWZ7OT* Get the job priority from the meta.schedulingPriority attribute. - [22]
R5D7DZPE - [23]
FDE3BJAP* Refactoring. - [24]
CMU3YKOU* Store the release name. - [25]
YAPITGB3* Boolean inputs. - [26]
X27GNHDV* Basic job info in the database. - [27]
ECBA3GQO* Make the schema class names match the case of the SQL table names. - [28]
7YBYT2LQ - [29]
SHBLLAVH* More global substitution. - [30]
B72GLND4 - [31]
M552HLIA* Support variant builds. - [32]
WYN733ST* Store build duration, handle cached builds. - [33]
BVOPAMLS - [34]
ABEOQU7T - [35]
CLJQCY2X* Store info about all the build actions and allow them to be - [36]
BHZXGT2H* Channels: provide an index page that lists all the packages in the - [37]
D3DIBMOK* For products that are directories (like manuals), allow a default - [38]
YTZOC7C5* Editing of jobset inputs. - [39]
TWVSALRL* Allow the maximum number of concurrent builds per platform to be - [40]
LCKWLQW3* In Sqlite "release" is now a keyword, so use "release_" instead. - [41]
37R34XJO* Negative caching: don't perform a build if a dependency already - [42]
V4RNHJNR* Add a link to each project's homepage. Suggested by karltk. - [43]
H7CNGK4O* Log evaluation errors etc. in the DB. - [44]
BD3GRK4B* Get rid of "positive failures" and separate log phases. - [45]
JLDUSNUO* Unify rendering of finished and scheduled builds. - [46]
3E6IP3R3* Add the name of the jobset to ReleaseSetJobs, otherwise we can't - [47]
ZEHSSVFG - [48]
6BLUKEQ2* Caching of "path" inputs, and fake a revision number for those. - [49]
GWCV3TQV* BuildInputs table: link to dependencies, include store paths. - [50]
VCOSLZRP - [51]
DVNWJXWW* Generic declaration of build products. - [52]
67P45PY4 - [53]
TQKGQ5R3 - [54]
FHF6IZJQ* Basic release management: releases are now dynamically computed as - [55]
VJHIHMEH* Store the meta.longDescription and meta.license attributes in the - [56]
J5UVLXOK* Start of a basic Catalyst web interface. - [57]
TLZ2SPBR - [*]
LBNVQXUB* Build the /build stuff in a separate controller. - [*]
2GK5DOU7* Downloading closures. - [*]
N22GPKYT* Put info about logs / build products in the DB.
Change contents
- replacement in src/lib/Hydra/Helper/CatalystUtils.pm at line 57
, job => $build->job, job => $build->get_column('job') - replacement in src/lib/Hydra/Helper/Nix.pm at line 127
{ job => $primaryJob->job, finished => 1 },{ job => $primaryJob->get_column('job'), finished => 1 }, - replacement in src/lib/Hydra/Helper/Nix.pm at line 157
{ job => $job->job, finished => 1 },{ job => $job->get_column('job'), finished => 1 }, - replacement in src/lib/Hydra/Schema/BuildInputs.pm at line 39
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9gWr8DPEeH2BjoHT3nt0Lw# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:uxfS8+GnU06sbx6nvWzTSQ - replacement in src/lib/Hydra/Schema/BuildProducts.pm at line 38
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:GsPyt1OUQHWN6z7mSpNW2g# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:wnnwDGQMGr2YAu++PYRSuA - replacement in src/lib/Hydra/Schema/BuildResultInfo.pm at line 38
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:zIpamqoL0AxNFDpQ/W1TVg# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:CGlUjhJozOA4VCYaFtyhqw - replacement in src/lib/Hydra/Schema/BuildSchedulingInfo.pm at line 30
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:McWRZEMJtjFIcR4LplCc9A# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:X+Pz2XzTBNU3XdEcg49RyQ - replacement in src/lib/Hydra/Schema/BuildSteps.pm at line 38
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:zuyAJq4T5Ynsq920Pd7hLg# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:TtcOwOIZHO0vLSJ1CXF1bA - edit in src/lib/Hydra/Schema/Builds.pm at line 47
__PACKAGE__->belongs_to("job","Hydra::Schema::Jobs",{ jobset => "jobset", name => "job", project => "project" },); - replacement in src/lib/Hydra/Schema/Builds.pm at line 84
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:6taCYZNB0HaY+fvDjUhrYQ# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:xqKyjCWVdoTyQJC28K3WXA - replacement in src/lib/Hydra/Schema/CachedPathInputs.pm at line 25
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Jhu1KxMfSF1Y1b4VGUqTzg# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Eo9F2GRzgzTGGx15JWBv6Q - replacement in src/lib/Hydra/Schema/CachedSubversionInputs.pm at line 23
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9aQa6Zo6z3lj/qFHNF5//w# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:KeKwcnnPNoVO4eNr9+y+1g - file addition: Jobs.pm[2.477]
package Hydra::Schema::Jobs;use strict;use warnings;use base 'DBIx::Class';__PACKAGE__->load_components("Core");__PACKAGE__->table("Jobs");__PACKAGE__->add_columns("project",{ data_type => "text", is_nullable => 0, size => undef },"jobset",{ data_type => "text", is_nullable => 0, size => undef },"name",{ data_type => "text", is_nullable => 0, size => undef },"active",{ data_type => "integer", is_nullable => 0, size => undef },"errormsg",{ data_type => "text", is_nullable => 0, size => undef },"firstevaltime",{ data_type => "integer", is_nullable => 0, size => undef },"lastevaltime",{ data_type => "integer", is_nullable => 0, size => undef },);__PACKAGE__->set_primary_key("project", "jobset", "name");__PACKAGE__->has_many("builds","Hydra::Schema::Builds",{"foreign.job" => "self.name","foreign.jobset" => "self.jobset","foreign.project" => "self.project",},);__PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project" });__PACKAGE__->belongs_to("jobset","Hydra::Schema::Jobsets",{ name => "jobset", project => "project" },);# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:wJFyUvUACQHpaW/ktaYtOQ# You can replace this text with custom content, and it will be preserved on regeneration1; - replacement in src/lib/Hydra/Schema/JobsetInputAlts.pm at line 34
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:fBv361MRwuWvAJQnOLZDIw# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:V8h/34X4hs4PKhxKsFgy9w - replacement in src/lib/Hydra/Schema/JobsetInputs.pm at line 46
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:S8AQqv8/GkLkXpPutV4N0A# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:1XdnQh4HnXU/iOyNvv8QWg - edit in src/lib/Hydra/Schema/Jobsets.pm at line 46
{"foreign.jobset" => "self.name","foreign.project" => "self.project",},);__PACKAGE__->has_many("jobs","Hydra::Schema::Jobs", - replacement in src/lib/Hydra/Schema/Jobsets.pm at line 61
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:xYDUCEXRPeVdFJBQnG/Wog# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:oZ81xw7qIjVkQKjRdOFW9A - edit in src/lib/Hydra/Schema/Projects.pm at line 37
"jobs","Hydra::Schema::Jobs",{ "foreign.project" => "self.name" },);__PACKAGE__->has_many( - replacement in src/lib/Hydra/Schema/Projects.pm at line 53
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9ZqA/21u40pt4t85YrYbeg# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:z+RXYaHk0RXJfFirBe175A - replacement in src/lib/Hydra/Schema/ReleaseSetJobs.pm at line 37
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Ta71pOzVsej/w0FoHIUMbg# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:iWBkyucz/pXtzI+s0iP0EA - replacement in src/lib/Hydra/Schema/ReleaseSets.pm at line 32
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:0DtIgm5jznjy1l3809b06Q# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:eeWkr8kYyCvFVDZ3YzpI1Q - replacement in src/lib/Hydra/Schema/SystemTypes.pm at line 19
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:WUSl5Uivcl6E1KLxiq+89A# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:z83sYSKRnt5mc2etYvH6Zg - replacement in src/lib/Hydra/Schema/UserRoles.pm at line 20
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:x/HXSH7s3bgPJSLK71hV9w# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:WRiW+nBfh/X+TMqYu0PI6g - replacement in src/lib/Hydra/Schema/Users.pm at line 33
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:uP86PxN/ZWgy5PRVU7Qgow# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Gw6X/Et2+whq/S7o63zF8Q - replacement in src/lib/Hydra/Schema.pm at line 11
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-12 17:44:15# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:oIv4qqdjLKRDgAYXHHTz8A# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-03-13 13:33:20# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:aJVSTLLx1pgutjETaqTWXA - replacement in src/root/build.tt at line 192
<a href="[% c.uri_for('/build' input.dependency.id) %]">Job <tt>[% input.dependency.project.name %]:[% input.dependency.job %]</tt> build [% input.dependency.id %]</a>Job [% PROCESS renderFullJobNameOfBuild build=input.dependency %] <a href="[% c.uri_for('/build' input.dependency.id) %]">build [% input.dependency.id %]</a> - replacement in src/root/build.tt at line 303
<td><a href="[% c.uri_for('/build' input.build.id) %]">Job <tt>[% input.build.project.name %]:[% input.build.job %]</tt> build [% input.build.id %]</a></td><td>Job [% PROCESS renderFullJobNameOfBuild build=input.build %] <a href="[% c.uri_for('/build' input.build.id) %]">build [% input.build.id %]</a></td> - edit in src/root/common.tt at line 40
[% BLOCK renderFullJobNameOfBuild %]<tt>[% PROCESS renderFullJobName project=build.get_column("project") jobset = build.get_column("jobset") job = build.get_column("job") %]</a>[% END %] - replacement in src/root/common.tt at line 89
[% PROCESS renderFullJobName project=build.get_column("project") jobset = build.get_column("jobset") job = build.job %][% PROCESS renderFullJobNameOfBuild %] - replacement in src/script/hydra_scheduler.pl at line 219[5.9403]→[5.9403:9525](∅→∅),[5.9525]→[5.5471:5535](∅→∅),[5.5535]→[5.9594:9604](∅→∅),[5.9594]→[5.9594:9604](∅→∅)
if (scalar($db->resultset('Builds')->search({ project => $project->name, jobset => $jobset->name, job => $jobName, outPath => $outPath })) > 0){# Mark this job as active in the database.my $jobInDB = $jobset->jobs->update_or_create({ name => $jobName, active => 1, lastevaltime => time});$jobInDB->update({firstevaltime => time})unless defined $jobInDB->firstevaltime;# Have we already done this build (in this job)?if (scalar($jobInDB->builds->search({outPath => $outPath})) > 0) { - edit in src/script/hydra_scheduler.pl at line 235
# Nope, so add it. - replacement in src/script/hydra_scheduler.pl at line 238
my $build = $db->resultset('Builds')->create(my $build = $jobInDB->builds->create( - edit in src/script/hydra_scheduler.pl at line 241
, project => $project->name, jobset => $jobset->name, job => $jobName - replacement in src/script/hydra_scheduler.pl at line 251[5.10442]→[5.5565:5620](∅→∅),[5.5620]→[5.12397:12428](∅→∅),[5.12397]→[5.12397:12428](∅→∅),[5.12428]→[5.226:262](∅→∅)
$db->resultset('BuildSchedulingInfo')->create({ id => $build->id, priority => $priority$build->buildschedulinginfoes->create({ priority => $priority - replacement in src/script/hydra_scheduler.pl at line 259[5.1302]→[5.5621:5672](∅→∅),[5.10545]→[5.5621:5672](∅→∅),[5.5672]→[5.12576:12614](∅→∅),[5.12576]→[5.12576:12614](∅→∅),[5.12614]→[5.1303:1342](∅→∅)
$db->resultset('BuildInputs')->create({ build => $build->id, name => $arg->{name}$build->buildinputs_builds->create({ name => $arg->{name} - edit in src/script/hydra_scheduler.pl at line 344
next if $job->{jobName} eq ""; - edit in src/script/hydra_scheduler.pl at line 348
# Mark all existing jobs that we haven't seen as inactive.my %jobNames;$jobNames{$_->{jobName}}++ foreach @{$jobs->{job}};my %failedJobNames;push @{$failedJobNames{$_->{location}}}, $_->{msg} foreach @{$jobs->{error}};$db->txn_do(sub {foreach my $jobInDB ($jobset->jobs->all) {print $jobInDB->name, "\n";$jobInDB->update({active => $jobNames{$jobInDB->name} || $failedJobNames{$jobInDB->name} ? 1 : 0}); - edit in src/script/hydra_scheduler.pl at line 361
if ($failedJobNames{$jobInDB->name}) {$jobInDB->update({errormsg => join '\n', @{$failedJobNames{$jobInDB->name}}});} else {$jobInDB->update({errormsg => undef});}}}); - replacement in src/sql/hydra.sql at line 30
foreign key (project, jobset) references Jobsets(project, name) -- ignored by sqliteforeign key (project, jobset) references Jobsets(project, name), -- ignored by sqliteforeign key (project, jobset, job) references Jobs(project, jobset, name) -- ignored by sqlite - edit in src/sql/hydra.sql at line 254
);create table Jobs (project text not null,jobset text not null,name text not null,-- `active' means the Nix expression for the jobset currently-- contains this job. Otherwise it's a job that has been removed-- from the expression.active integer not null default 1,errorMsg text, -- evalution error for this jobfirstEvalTime integer, -- first time the scheduler saw this joblastEvalTime integer, -- last time the scheduler saw this jobprimary key (project, jobset, name),foreign key (project) references Projects(name) on delete cascade, -- ignored by sqliteforeign key (project, jobset) references Jobsets(project, name) on delete cascade -- ignored by sqlite