* Add some DB indices to make the /releases page much faster.

[?]
Mar 23, 2009, 1:52 PM
T2232OBSNVDGHY46RY5BBB2IET5LV5OLKSSBDYUF7KAEDBUOTC7QC

Dependencies

  • [2] 7Z3YOKCV * PROCESS -> INCLUDE in most cases. INCLUDE does proper scoping of
  • [3] RI4S7SYT * Job status: show the active jobs.
  • [4] H5REHM3M
  • [5] VSVQIXAA * Allow `-' in release set names.
  • [6] JK2QWPH6
  • [7] G6HJY2V4
  • [8] TQKGQ5R3
  • [9] UQ6K57MS * Include nix-prefetch-svn in the Hydra binary distribution.
  • [10] ECBA3GQO * Make the schema class names match the case of the SQL table names.
  • [11] IN272KZW * Automatically keep all builds in the latest successful release in
  • [12] AFTXA575 * $HYDRA_DATA environment variable.
  • [13] 3E6IP3R3 * Add the name of the jobset to ReleaseSetJobs, otherwise we can't
  • [14] UWVMQIAC * Refactoring.
  • [15] PBFZEQLZ
  • [16] 4S4ZMFJK * Links on trs.
  • [17] BSYM6IUT
  • [18] AKAZKCR6 * At top-level and for each project, provide two channels: "latest"
  • [19] FHF6IZJQ * Basic release management: releases are now dynamically computed as
  • [20] NDL67SQT * XHTML validity.
  • [21] S66BOMVU * Added authentication.
  • [22] JFZNAYJX * Showing releases.
  • [23] FEMR2C5W
  • [24] E6IC7YIK * Release sets: need to include the jobset name to disambiguate
  • [25] FPK5LF53 * Put the project-related actions in a separate controller. Put the
  • [26] TMP2FRIW
  • [27] GNIEG2GC * Disambiguate jobs by jobset name. I.e. jobs with the same name in
  • [28] 5IK6NYKF
  • [29] HKWIDRO6 * I love untyped databases...
  • [30] 5NO7NCKT * Refactoring.
  • [31] T4LLYESZ * Nix expression for building Hydra.
  • [32] HCKFTNQ6
  • [33] KR7QIG6Z
  • [34] 3MDDGGSN * Install the manual.
  • [35] ZNFDFJHG * Provide a redirect to the latest successful release in a release set
  • [36] 2AUODJBT
  • [37] 2AIIYGI5 * Show job status and all builds for a project.
  • [38] K2NXFFKH
  • [39] DEMSSSB2 * Controller for jobs which inherits all actions in ListBuilds. So
  • [40] S5PV6IIM * Represent jobs explicitly in the DB.
  • [41] JLDUSNUO * Unify rendering of finished and scheduled builds.
  • [*] J5UVLXOK * Start of a basic Catalyst web interface.
  • [*] LBNVQXUB * Build the /build stuff in a separate controller.
  • [*] 2GK5DOU7 * Downloading closures.
  • [*] IK53RV4V
  • [*] N22GPKYT * Put info about logs / build products in the DB.

Change contents

  • replacement in release.nix at line 108
    [6.76][6.1744:1798](),[6.381][6.1744:1798](),[6.1744][6.1744:1798]()
    --set HYDRA_HOME $out/libexec/hydra
    [6.381]
    [6.1798]
    --set HYDRA_HOME $out/libexec/hydra \
    --set HYDRA_RELEASE ${tarball.version}
  • replacement in src/lib/Hydra/Base/Controller/ListBuilds.pm at line 37
    [6.882][6.882:981]()
    {finished => 1}, {order_by => "timestamp DESC", rows => $resultsPerPage, page => $page})];
    [6.882]
    [6.981]
    { finished => 1 },
    { join => 'resultInfo'
    , '+select' => ["resultInfo.buildstatus", "resultInfo.releasename"]
    , '+as' => ["buildstatus", "releasename"]
    , order_by => "timestamp DESC"
    , rows => $resultsPerPage
    , page => $page })];
  • edit in src/lib/Hydra/Controller/Root.pm at line 18
    [6.44]
    [43.1351]
    $c->stash->{version} = $ENV{"HYDRA_RELEASE"} || "<devel>";
  • replacement in src/lib/Hydra/Controller/Root.pm at line 82
    [6.605][6.72:140]()
    die "Project $projectName doesn't exist." if !defined $project;
    [6.605]
    [6.1136]
    notFound($c, "Project $projectName doesn't exist.") if !defined $project;
  • replacement in src/lib/Hydra/Controller/Root.pm at line 86
    [6.90][6.140:218](),[6.140][6.140:218]()
    die "Release set $releaseSetName doesn't exist." if !defined $releaseSet;
    [6.90]
    [6.904]
    notFound($c, "Release set $releaseSetName doesn't exist.") if !defined $releaseSet;
  • replacement in src/lib/Hydra/Controller/Root.pm at line 105
    [6.429][5.0:102]()
    die "Invalid release set name: $releaseSetName" unless $releaseSetName =~ /^[[:alpha:]][\w\-]*$/;
    [6.429]
    [6.527]
    error($c, "Invalid release set name: $releaseSetName")
    unless $releaseSetName =~ /^[[:alpha:]][\w\-]*$/;
  • replacement in src/lib/Hydra/Controller/Root.pm at line 142
    [6.736][6.736:847]()
    die "There must be one primary job." if $releaseSet->releasesetjobs->search({isprimary => 1})->count != 1;
    [6.736]
    [6.0]
    error($c, "There must be one primary job.")
    if $releaseSet->releasesetjobs->search({isprimary => 1})->count != 1;
  • replacement in src/lib/Hydra/Controller/Root.pm at line 190
    [6.387][6.387:455]()
    die "Project $projectName doesn't exist." if !defined $project;
    [6.387]
    [6.1174]
    error($c, "Project $projectName doesn't exist.") if !defined $project;
  • replacement in src/lib/Hydra/Controller/Root.pm at line 228
    [6.2500][6.2500:2602](),[6.2602][6.2824:2902]()
    { join => 'resultInfo', '+select' => ["resultInfo.releasename"], '+as' => ["releasename"] });
    error($c, "Release $releaseId doesn't exist.") if !defined $primaryBuild;
    [6.2500]
    [4.89]
    { join => 'resultInfo',
    , '+select' => ["resultInfo.releasename", "resultInfo.buildstatus"]
    , '+as' => ["releasename", "buildstatus"] })
    or error($c, "Release $releaseId doesn't exist.");
  • replacement in src/lib/Hydra/Helper/CatalystUtils.pm at line 58
    [3.1072][3.1072:1156]()
    { join => 'resultInfo', order_by => 'timestamp DESC', rows => 1 });
    [3.1072]
    [3.1156]
    { join => 'resultInfo', order_by => 'timestamp DESC', rows => 1
    , '+select' => ["resultInfo.releasename", "resultInfo.buildstatus"]
    , '+as' => ["releasename", "buildstatus"]
    });
  • replacement in src/lib/Hydra/Helper/Nix.pm at line 133
    [6.1648][6.1648:1724]()
    , '+select' => ["resultInfo.releasename"], '+as' => ["releasename"]
    [6.1648]
    [6.1724]
    , '+select' => ["resultInfo.releasename", "resultInfo.buildstatus"]
    , '+as' => ["releasename", "buildstatus"]
  • replacement in src/lib/Hydra/Helper/Nix.pm at line 162
    [6.2478][6.607:712]()
    { jobset => $job->get_column('jobset'), job => $job->get_column('job'), finished => 1 },
    [6.2478]
    [6.2536]
    { project => $job->get_column('project'), jobset => $job->get_column('jobset')
    , job => $job->get_column('job'), finished => 1 },
  • edit in src/lib/Hydra/Helper/Nix.pm at line 167
    [6.2710]
    [6.2710]
    , '+select' => ["resultInfo.buildstatus"], '+as' => ["buildstatus"]
  • replacement in src/lib/Hydra/Helper/Nix.pm at line 174
    [6.2874][6.2874:2939]()
    } elsif ($thisBuild->resultInfo->buildstatus != 0) {
    [6.2874]
    [6.2939]
    } elsif ($thisBuild->get_column('buildstatus') != 0) {
  • replacement in src/root/common.tt at line 83
    [6.1290][6.1290:1347]()
    [% IF build.resultInfo.buildstatus == 0 %]
    [6.1290]
    [6.1015]
    [% IF build.get_column('buildstatus') == 0 %]
  • replacement in src/root/common.tt at line 97
    [6.1159][6.307:408](),[6.1383][6.307:408](),[6.4114][6.307:408](),[6.4688][6.307:408](),[6.1981][6.307:408]()
    <td>[% build.resultInfo.releasename ? build.resultInfo.releasename : build.nixname %]</td>
    [6.4688]
    [6.1981]
    <td>[% build.get_column('releasename') ? build.get_column('releasename') : build.nixname %]</td>
  • replacement in src/root/layout.tt at line 149
    [6.4834][2.1452:1505]()
    Generated on [% INCLUDE renderDateTime %].
    [6.4834]
    [6.4708]
    <em>Hydra [% HTML.escape(version) %].</em>
    Page generated on [% INCLUDE renderDateTime %].
  • replacement in src/root/releases.tt at line 51
    [6.9661][6.9661:9724]()
    [% IF job.build.resultInfo.buildstatus == 0 %]
    [6.9661]
    [6.9724]
    [% IF job.build.get_column('buildstatus') == 0 %]
  • edit in src/sql/hydra.sql at line 404
    [6.13513]
    -- Some indices.
    create index IndexBuildInputsByBuild on BuildInputs(build);
    create index IndexBuildInputsByDependency on BuildInputs(dependency);