* Speed up the jobset index page. Especially the query to get the
[?]
Feb 9, 2010, 1:47 PM
6QRHXIM3XHCDLSIIBEGETDV67V6LTV55QMHC64ZPBMLTAECM5N3QCDependencies
- [2]
ID277UG3 - [3]
AKAXJDMW* Disable the statistics on the project, jobset and job pages for now - [4]
TJPIS3UPhydra: minor improvements in hydra ui - [5]
S6OISBQ3* Mark the "current" builds in a jobset, i.e. those corresponding to - [6]
3HZY24CX* Make jobsets viewable under - [7]
RAKTHYAI* In the job status and error pages, show when the status of a job - [8]
A6FXZPKE* Another essential index. - [9]
RH37XKJ2 - [10]
Z4KRJX4Q* In the last succeeded / job status queries, use the Builds.isCurrent - [11]
RBNQKATL* Adding persistant releases. A release is a named set of builds. - [12]
ODNCGFQ5* Improved the navigation bar: don't include all projects (since that - [13]
KN3VYE5P* Cleaned up the foreign key constraints. - [14]
MI4IMCD3 - [15]
SJN2QPWH* Big speed-up of the job status page and the channel generation (such - [16]
ZI535LI6* hydra: 'new' UI for project/jobset/job/build - [17]
SLWFKMU5extra indexes - [18]
T2232OBS* Add some DB indices to make the /releases page much faster. - [19]
SFUSIKUY* Use isCurrent to determine the inactive jobs. - [*]
N22GPKYT* Put info about logs / build products in the DB.
Change contents
- edit in src/lib/Hydra/Controller/Jobset.pm at line 29
my $projectName = $c->stash->{project}->name;my $jobsetName = $c->stash->{jobset}->name;# Get the active / inactive jobs in this jobset.my @jobs = $c->stash->{jobset}->jobs->search({ },{ select => ["name",\("exists (select 1 from builds where project = '$projectName' and jobset = '$jobsetName' and job = me.name and isCurrent = 1) as active")], as => ["name", "active"], order_by => ["name"] }); - replacement in src/lib/Hydra/Controller/Jobset.pm at line 43
$c->stash->{activeJobs} = [$c->stash->{jobset}->builds->search({isCurrent => 1},{select => ["job"], order_by => ["job"], distinct => 1})];$c->stash->{inactiveJobs} = [$c->stash->{jobset}->builds->search({},{select => ["job"], order_by => ["job"], group_by => ["job"], having => { 'sum(isCurrent)' => 0 }})];$c->stash->{activeJobs} = [];$c->stash->{inactiveJobs} = [];foreach my $job (@jobs) {print STDERR $job->get_column('active'), "\n";if ($job->get_column('active')) {push @{$c->stash->{activeJobs}}, $job->name;} else {push @{$c->stash->{inactiveJobs}}, $job->name;}} - replacement in src/lib/Hydra/Controller/Jobset.pm at line 63
my @select = ();my @as = ();push(@select, "job"); push(@as, "job");foreach my $system (@systems) {push(@select, "(SELECT buildstatus FROM BuildResultInfo bri NATURAL JOIN Builds b WHERE b.id = (SELECT MAX(id) FROM Builds t WHERE t.project = me.project AND t.jobset = me.jobset AND t.job = me.job AND t.system = '$system'))");push(@as, $system);push(@select, "(SELECT b.id FROM BuildResultInfo bri NATURAL JOIN Builds b WHERE b.id = (SELECT MAX(id) FROM Builds t WHERE t.project = me.project AND t.jobset = me.jobset AND t.job = me.job AND t.system = '$system'))");push(@as, $system."-build");}$c->stash->{activeJobsStatus} = [$c->model('DB')->resultset('ActiveJobsForJobset')->search( {}, { bind => [$c->stash->{project}->name, $c->stash->{jobset}->name], select => \@select, as => \@as, order_by => ["job"]})];}my @select = ();my @as = ();push(@select, "job"); push(@as, "job");foreach my $system (@systems) {push(@select, "(SELECT buildstatus FROM BuildResultInfo bri NATURAL JOIN Builds b WHERE b.id = (SELECT MAX(id) FROM Builds t WHERE t.project = me.project AND t.jobset = me.jobset AND t.job = me.job AND t.system = '$system'))");push(@as, $system);push(@select, "(SELECT b.id FROM BuildResultInfo bri NATURAL JOIN Builds b WHERE b.id = (SELECT MAX(id) FROM Builds t WHERE t.project = me.project AND t.jobset = me.jobset AND t.job = me.job AND t.system = '$system'))");push(@as, $system."-build");}$c->stash->{activeJobsStatus} =[ $c->model('DB')->resultset('ActiveJobsForJobset')->search({},{ bind => [$c->stash->{project}->name, $c->stash->{jobset}->name], select => \@select, as => \@as, order_by => ["job"]})];} - replacement in src/root/jobset.tt at line 241
[% FOREACH j IN activeJobs %] [% INCLUDE renderJobName project=project.name jobset=jobset.name job=j.get_column('job') %] [% END %][% FOREACH j IN activeJobs %] [% INCLUDE renderJobName project=project.name jobset=jobset.name job=j %] [% END %] - replacement in src/root/jobset.tt at line 244
- replacement in src/root/jobset.tt at line 249
[% FOREACH j IN inactiveJobs %] [% INCLUDE renderJobName project=project.name jobset=jobset.name job=j.get_column('job') %] [% END %][% FOREACH j IN inactiveJobs %] [% INCLUDE renderJobName project=project.name jobset=jobset.name job=j %] [% END %] - replacement in src/sql/hydra.sql at line 425[5.2228]→[5.2228:2358](∅→∅),[5.2358]→[5.3337:3395](∅→∅),[5.2984]→[5.1204:1262](∅→∅),[5.1262]→[5.0:56](∅→∅),[5.56]→[2.0:258](∅→∅)
create index IndexBuildInputsByBuild on BuildInputs(build);create index IndexBuildInputsByDependency on BuildInputs(dependency);create index IndexBuildsByTimestamp on Builds(timestamp);create index IndexBuildsByIsCurrent on Builds(isCurrent);create index IndexBuildsByFinished on Builds(finished);create index IndexBuildsByProject on Builds(project);create index IndexBuildsByJobset on Builds(project, jobset);create index IndexBuildsByJob on Builds(project, jobset, job);create index IndexBuildsByJobAndSystem on Builds(project, jobset, job, system);create index IndexBuildInputsOnBuild on BuildInputs(build);create index IndexBuildInputsOnDependency on BuildInputs(dependency);create index IndexBuildProducstOnBuildAndType on BuildProducts(build, type);create index IndexBuildProductsOnBuild on BuildProducts(build); - replacement in src/sql/hydra.sql at line 430
create index IndexBuildSchedulingInfoByBuild on BuildSchedulingInfo(id); -- idemcreate index IndexBuildProductsByBuild on BuildProducts(build);create index IndexBuildProducstByBuildAndType on BuildProducts(build, type);create index IndexBuildStepsByBuild on BuildSteps(build);create index IndexBuildSchedulingInfoOnBuild on BuildSchedulingInfo(id); -- idemcreate index IndexBuildStepsOnBuild on BuildSteps(build);create index IndexBuildsOnFinished on Builds(finished);create index IndexBuildsOnIsCurrent on Builds(isCurrent);create index IndexBuildsOnJob on Builds(project, jobset, job);create index IndexBuildsOnJobAndIsCurrent on Builds(project, jobset, job, isCurrent);create index IndexBuildsOnJobAndSystem on Builds(project, jobset, job, system);create index IndexBuildsOnJobset on Builds(project, jobset);create index IndexBuildsOnProject on Builds(project);create index IndexBuildsOnTimestamp on Builds(timestamp);create index IndexJobsetAltsOnJobset on JobsetInputAlts(project, jobset);