Remove obsolete Builds columns and provide accurate "Running builds"
[?]
Oct 27, 2015, 2:37 PM
TPNHTE5VJ36IPKMFENDERDBFBHLYFXOVNDLV2QSC4G5STPPMBLMACDependencies
- [2]
36V375MDchange content type of logdiff to ->response->content_type('application/json'); - [3]
V3UMEC5JFix display of non-aggregate builds - [4]
J5ITV54PMake restartBuilds faster - [5]
MQQ5KZV3Status page: Show running builds rather than build steps - [6]
YF3HTIPFUse partial indexes - [7]
5JB5DKQLDon't repeat links to build step logs - [8]
VZCNKQSBRemove superfluous check - [9]
4CQWOODYDon't abort steps that have an unsupported system type - [10]
53IMJNBBAdd isChannel column and meta attribute. - [11]
T6KISLR6Fix indentation - [12]
WE5Q2NVIAllow build to be bumped to the front of the queue via the web interface - [13]
T5BIOVJEAdd support for tracking custom metrics - [14]
JTHWA6AMRename aggregate members to constituents - [15]
G2T4WAHIStore the inputs of each evaluation in the database - [16]
CMU3YKOU* Store the release name. - [17]
IK2UBDAURevive jobset scheduling - [18]
GS4SFHCPtemplates: Use uri_for to reference static paths. - [19]
E5DMQRPORemove unnecessary whitespace in the HTML output - [20]
FHF6IZJQ* Basic release management: releases are now dynamically computed as - [21]
SJLEZFC4check getHydraPath in stead of Envvar HYDRA_DBI directly - [22]
TQKGQ5R3 - [23]
WRIU3S5E* UI for cloning builds (not functional yet). - [24]
EX4FXA5THandle active build steps of aborted builds properly - [25]
LZVO64YGMerge in the first bits of the API work - [26]
CLJQCY2X* Store info about all the build actions and allow them to be - [27]
CS7T2XFI - [28]
YFYRNNQUUse <h3> for running/failed build steps - [29]
VG4QG336Remove tablesorter - [30]
UYWFRWQ6Sort constituents by job name - [31]
EYNG4EL4* Regenerate the bindings from a clean sqlite database. - [32]
MGOGOKQPadd tracker html code via HYDRA_TRACKER - [33]
QWB5ON4Dremove old line - [34]
ZI535LI6* hydra: 'new' UI for project/jobset/job/build - [35]
JARRBLZDBootstrapify the Hydra forms (except the project and jobset edit pages) - [36]
K22TMPH5Make the info tables less compressed - [37]
TLZ2SPBR - [38]
BIVZGPUTOptimise clickable rows - [39]
VJHIHMEH* Store the meta.longDescription and meta.license attributes in the - [40]
L2E6EVE2* Merged the Build and Job tables. - [41]
XJRJ4J7MAdd user registration - [42]
YTIDBFGUDrop unused "disabled" columns - [43]
NP7IOJ4QFlesh out the API a bit - [44]
S6OISBQ3* Mark the "current" builds in a jobset, i.e. those corresponding to - [45]
ODNCGFQ5* Improved the navigation bar: don't include all projects (since that - [46]
R6B5CAFFLet Builds.timestamp refer to the time the build was added - [47]
ZVTSOVHN* Support Subversion checkouts. - [48]
FPK5LF53* Put the project-related actions in a separate controller. Put the - [49]
VHV6GI4LAdd a jobset eval action to restart all aborted/cancelled builds - [50]
VBWHG272Re-add the history tab (store size and build time), now as lazy-loaded tab on build page. - [51]
U2X3Y53Gmake sure status images always display for a list of builds - [52]
24BMQDZAStart of single-process hydra-queue-runner - [53]
3XTHEUMP* Implemented the clone feature. - [54]
AHTEIK7G* Added a maintainers field to the Builds table. - [55]
R5D7DZPE - [56]
4SFOPTHWUse query_params instead of params - [57]
W74RIXTJShow inputs and input changes on the jobset eval page - [58]
62MQPRXCPass null values to libpqxx properly - [59]
SHBLLAVH* More global substitution. - [60]
BOAFFKUXActive build steps: Make the rows clickable - [61]
UJOSXBZIRecord which build a failed build step was propagated from - [62]
B3UW2ZRBRestart jobset evals efficiently - [63]
SHIENRALClean up root controller - [64]
BKOIYITRadded some json responses - [65]
LBNVQXUB* Build the /build stuff in a separate controller. - [66]
ZTQEU5QSHydra: Add support for maxSilent meta attribute (also already added timeout, but not implemented the actual timeout for the build yet) - [67]
RU7AQO7U* Role-based access control. Only admins can create projects. Only - [68]
FTPCV25MStore aggregate members in the database - [69]
ZIIXICG7Make the outputs' outpaths available via the Build JSON API - [70]
ZK76B5ZZLoad the queue in order of global priority - [71]
V4RNHJNR* Add a link to each project's homepage. Suggested by karltk. - [72]
S66BOMVU* Added authentication. - [73]
QNDXPVCI* Store the jobset's nixExprPath and nixExprInput fields in a build to - [74]
MMDLWWZ2automatic reload of tail log when build is running - [75]
HPJKBFZ4Handle concurrent finishing of the same build - [76]
IMQRX4MPhydra-eval-jobs: Use JSON instead of XML - [77]
6GEU36HWRemove obsolete CSS classes - [78]
U4TD3AIQAdd support for viewing jobset evaluations - [79]
PCKLFRT5Support push notification of repository changes - [80]
Y6AHH4THRemove the logfile and logSize columns from the database - [81]
CQTN62OHDie tabs die - [82]
SB2V735VKeep track of the database schema version - [83]
CEARA7OH* hydra: show running buildsteps on build page - [84]
YMNEN6YYQueue: Remove the scheduling priority - [85]
YLLP6LP7Remove the related builds tab - [86]
5AIYUMTBBasic remote building - [87]
O5DYTVGAAdd jobset/job menus on buid log pages - [88]
D3DIBMOK* For products that are directories (like manuals), allow a default - [89]
IK53RV4V - [90]
VQISTKOPhydra-queue-runner: Use substitutes - [91]
HTL6HIBMmachine-status: Read /etc/nix.machines instead of using the BuildMachines table - [92]
6BLUKEQ2* Caching of "path" inputs, and fake a revision number for those. - [93]
LCKWLQW3* In Sqlite "release" is now a keyword, so use "release_" instead. - [94]
TW5ZQX5Z* Move up the build products in the builds page, since they're more - [95]
ZLQL62FKOnly show "Running build steps" if there are running build steps - [96]
KAZWI5G4* hydra: buildpage, show changes since last build/successful build - [97]
N2ZF5JULUse a different icon for aborted builds - [98]
36M6DGITShow the runtime/build dependencies in the build page - [99]
GNIEG2GC* Disambiguate jobs by jobset name. I.e. jobs with the same name in - [100]
3E6IP3R3* Add the name of the jobset to ReleaseSetJobs, otherwise we can't - [101]
K42RSSSI - [102]
KOTB7BKV - [103]
HN3V252LOn the build page, show how many aggregate constituents failed - [104]
HRAFVVOEmake logo configurable via HYDRA_LOGO env var - [105]
PZL3SZM3Give every page a consistent title - [106]
S5PV6IIM* Represent jobs explicitly in the DB. - [107]
B72GLND4 - [108]
OS2MRE4JRestore build and eval IDs. - [109]
H7CNGK4O* Log evaluation errors etc. in the DB. - [110]
Z6MDQIGO* A quick (non-Web 2.0) interface to manually add builds to a release. - [111]
76LYER47Hide build IDs from build lists - [112]
WOHG5MJDhydra: catalyst plain view doesn;t work with data => 0, so put some whitespace around it - [113]
2DHE2ZAKAllow Hydra to run as a private instance by requiring a login. - [114]
37R34XJO* Negative caching: don't perform a build if a dependency already - [115]
6QRHXIM3* Speed up the jobset index page. Especially the query to get the - [116]
SHYRGAWZhydra: when no external url is given for diff's of git/hg input, revert to a diff done on a local available clone - [117]
R2PON6R7Allow non-admin users to see the machine status page - [118]
YAPITGB3* Boolean inputs. - [119]
2DGIP6L4Cleanup build serialization - [120]
BD3GRK4B* Get rid of "positive failures" and separate log phases. - [121]
2GUAKGTBFix indentation of build.tt - [122]
TWVSALRL* Allow the maximum number of concurrent builds per platform to be - [123]
JM3DPYOMgenerated schema with new dbix class schema loader, grrrrrr - [124]
BB2KXLXZMove the build time chart to the job page - [125]
3SQCOHZN* minor performance tweaks - [126]
MHVIT4JYSplit hydra-queue-runner.cc more - [127]
TH674WKJadd log diff to compare logs to previous builds - [128]
JYZEGF56Create Builds with iscurrent set - [129]
YR2IM6Y5Temporarily disable machines after a connection failure - [130]
OEPUOUNBUsing twitter bootstrap for more consistent looks for Hydra - [131]
BCDHO4OUSet propagatedFrom for cached failed build steps - [132]
HPEG2RHVMerge the BuildResultInfo table into the Builds table - [133]
3466DZDElogdiff now support bzipped logs for logdiff - [134]
FQQRJUO4Mark builds as busy - [135]
ECBA3GQO* Make the schema class names match the case of the SQL table names. - [136]
HH3LID6LRe-implement log size limits - [137]
4CELXP7PRemove the longDescription field - [138]
XHK7IGYI* hdyra: show last succeeded build and changes since on build status summary if build has failed - [139]
PMNWRTGJAdd multiple output support - [140]
MOX7XJ2EMerge the BuildSchedulingInfo table into the Builds table - [141]
3PNG7NIBRemove trailing whitespace - [142]
R7MDDCB2Some unnecessary job names - [143]
EFWN7JBV* Added a status page that shows all the currently executing build steps. - [144]
3ZCEPLNO - [145]
BHZXGT2H* Channels: provide an index page that lists all the packages in the - [146]
4QCXGR4WTabify the eval page - [147]
6KIJX24RGet rid of unnecessary [%- and -%] tags - [148]
J5UVLXOK* Start of a basic Catalyst web interface. - [149]
4S5JF5JPUse latest DBIx::Class::Schema::Loader - [150]
YTZOC7C5* Editing of jobset inputs. - [151]
4WZQW2N6Fix indentation and get rid of some unnecessary whitespace in the output - [152]
N45RZUQ6Reduce I/O in build listings by only fetching required columns - [*]
OOQ2D3KC* Refactoring: move fetchInput out of hydra_scheduler into a separate - [*]
2GK5DOU7* Downloading closures. - [*]
N22GPKYT* Put info about logs / build products in the DB. - [*]
D5QIOJGP* Move everything up one directory.
Change contents
- replacement in src/hydra-queue-runner/builder.cc at line 113
building. Also, mark the selected build as busy. */building. */ - edit in src/hydra-queue-runner/builder.cc at line 117
txn.parameterized("update Builds set busy = 1 where id = $1")(build->id).exec(); - replacement in src/hydra-queue-runner/builder.cc at line 343
("update Builds set finished = 1, busy = 0, buildStatus = $2, startTime = $3, stopTime = $4, isCachedBuild = $5 where id = $1 and finished = 0")("update Builds set finished = 1, buildStatus = $2, startTime = $3, stopTime = $4, isCachedBuild = $5 where id = $1 and finished = 0") - edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 162
txn.exec("update Builds set busy = 0 where finished = 0 and busy = 1"); - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 311
("update Builds set finished = 1, busy = 0, buildStatus = $2, startTime = $3, stopTime = $4, size = $5, closureSize = $6, releaseName = $7, isCachedBuild = $8 where id = $1")("update Builds set finished = 1, buildStatus = $2, startTime = $3, stopTime = $4, size = $5, closureSize = $6, releaseName = $7, isCachedBuild = $8 where id = $1") - replacement in src/hydra-queue-runner/queue-monitor.cc at line 128
("update Builds set finished = 1, busy = 0, buildStatus = $2, startTime = $3, stopTime = $3, errorMsg = $4 where id = $1 and finished = 0")("update Builds set finished = 1, buildStatus = $2, startTime = $3, stopTime = $3, errorMsg = $4 where id = $1 and finished = 0") - replacement in src/hydra-queue-runner/queue-monitor.cc at line 204
("update Builds set finished = 1, busy = 0, buildStatus = $2, startTime = $3, stopTime = $3, isCachedBuild = 1 where id = $1 and finished = 0")("update Builds set finished = 1, buildStatus = $2, startTime = $3, stopTime = $3, isCachedBuild = 1 where id = $1 and finished = 0") - edit in src/lib/Hydra/Controller/API.pm at line 41
$result->{'busy'} = $build->get_column("busy"); - replacement in src/lib/Hydra/Controller/API.pm at line 116
my @builds = $c->model('DB::Builds')->search({finished => 0}, {rows => $nr, order_by => ["busy DESC", "priority DESC", "id"]});my @builds = $c->model('DB::Builds')->search({finished => 0}, {rows => $nr, order_by => ["priority DESC", "id"]}); - edit in src/lib/Hydra/Controller/API.pm at line 133[11.35]→[11.4459:4508](∅→∅),[11.324]→[11.4459:4508](∅→∅),[11.4459]→[11.4459:4508](∅→∅),[11.4508]→[11.1486:1487](∅→∅),[11.1487]→[11.4508:4596](∅→∅),[11.4508]→[11.4508:4596](∅→∅),[11.4596]→[11.325:486](∅→∅)
};$c->forward('Hydra::View::Plain');}sub nrrunning : Chained('api') PathPart('nrrunning') Args(0) {my ($self, $c) = @_;my $nrRunningBuilds = $c->model('DB::Builds')->search({finished => 0, busy => 1 })->count();$c->stash->{'plain'} = {data => "$nrRunningBuilds" - edit in src/lib/Hydra/Controller/API.pm at line 204[11.153]→[11.153:198](∅→∅),[11.198]→[11.2705:2781](∅→∅),[11.2781]→[11.150:173](∅→∅),[11.150]→[11.150:173](∅→∅),[11.173]→[11.6138:6139](∅→∅),[11.230]→[11.6138:6139](∅→∅),[11.6138]→[11.6138:6139](∅→∅),[11.6139]→[11.231:418](∅→∅),[11.418]→[11.2782:2783](∅→∅),[11.2783]→[11.418:806](∅→∅),[11.418]→[11.418:806](∅→∅),[11.806]→[11.2784:2958](∅→∅),[11.2958]→[11.1028:1127](∅→∅),[11.1028]→[11.1028:1127](∅→∅),[11.1127]→[2.0:48](∅→∅),[2.48]→[11.1127:1228](∅→∅),[11.1127]→[11.1127:1228](∅→∅),[11.1228]→[11.239:243](∅→∅)
sub readNormalizedLog {my ($file) = @_;my $pipe = (-f "$file.bz2" ? "cat $file.bz2 | bzip2 -d" : "cat $file");my $res = `$pipe`;$res =~ s/\/nix\/store\/[a-z0-9]*-/\/nix\/store\/...-/g;$res =~ s/nix-build-[a-z0-9]*-/nix-build-...-/g;$res =~ s/[0-9]{2}:[0-9]{2}:[0-9]{2}/00:00:00/g;return $res;}sub logdiff : Chained('api') PathPart('logdiff') Args(2) {my ($self, $c, $buildid1, $buildid2) = @_;my $diff = "";my $build1 = getBuild($c, $buildid1);notFound($c, "Build with ID $buildid1 doesn't exist.")if !defined $build1;my $build2 = getBuild($c, $buildid2);notFound($c, "Build with ID $buildid2 doesn't exist.")if !defined $build2;if (-f $build1->logfile && -f $build2->logfile) {my $logtext1 = readNormalizedLog($build1->logfile);my $logtext2 = readNormalizedLog($build2->logfile);$diff = diff \$logtext1, \$logtext2;} else {$c->response->status(404);}$c->response->content_type('text/x-diff');$c->stash->{'plain'} = { data => (scalar $diff) || " " };$c->forward('Hydra::View::Plain');} - replacement in src/lib/Hydra/Controller/Build.pm at line 170
$c->stash->{reload} = !$c->stash->{build}->finished && $c->stash->{build}->busy;$c->stash->{reload} = !$c->stash->{build}->finished; - replacement in src/lib/Hydra/Controller/Root.pm at line 47
$c->stash->{nrRunningBuilds} = $c->model('DB::Builds')->search({ finished => 0, busy => 1 }, {})->count();$c->stash->{nrRunningBuilds} = $c->model('DB::Builds')->search({ finished => 0, 'buildsteps.busy' => 1 },{ join => 'buildsteps', select => ["id"], distinct => 1 })->count(); - replacement in src/lib/Hydra/Controller/Root.pm at line 94
entity => [$c->model('DB::Builds')->search({finished => 0}, { order_by => ["globalpriority desc", "id"]})]entity => [$c->model('DB::Builds')->search({ finished => 0 },{ order_by => ["globalpriority desc", "id"],, columns => [@buildListColumns]})] - replacement in src/lib/Hydra/Controller/Root.pm at line 109
entity => [$c->model('DB::Builds')->search({finished => 0, busy => 1}, { order_by => ["priority DESC", "id"]})]entity => [$c->model('DB::Builds')->search({ finished => 0, "buildsteps.busy" => 1 },{ order_by => ["globalpriority DESC", "id"],join => "buildsteps",columns => [@buildListColumns]})] - replacement in src/lib/Hydra/Controller/Root.pm at line 140
{ finished => 0, 'me.busy' => 1, 'build.busy' => 1, },{ finished => 0, 'me.busy' => 1, }, - edit in src/lib/Hydra/Helper/AddBuilds.pm at line 453
, busy => 0, locker => "" - replacement in src/lib/Hydra/Helper/CatalystUtils.pm at line 32
Readonly our @buildListColumns => ('id', 'finished', 'timestamp', 'stoptime', 'project', 'jobset', 'job', 'nixname', 'system', 'priority', 'busy', 'buildstatus', 'releasename');Readonly our @buildListColumns => ('id', 'finished', 'timestamp', 'stoptime', 'project', 'jobset', 'job', 'nixname', 'system', 'buildstatus', 'releasename'); - edit in src/lib/Hydra/Helper/Nix.pm at line 458
, busy => 0, locker => "" - replacement in src/lib/Hydra/Schema/Builds.pm at line 123
is_nullable: 1is_nullable: 0 - edit in src/lib/Hydra/Schema/Builds.pm at line 148
data_type: 'integer'default_value: 0is_nullable: 0=head2 busy - edit in src/lib/Hydra/Schema/Builds.pm at line 152
=head2 lockerdata_type: 'text'is_nullable: 1=head2 logfile - edit in src/lib/Hydra/Schema/Builds.pm at line 153[11.8727]→[11.8010:8030](∅→∅),[11.8030]→[11.8768:8785](∅→∅),[11.8768]→[11.8768:8785](∅→∅),[11.4553]→[11.4553:4554](∅→∅)
data_type: 'text'is_nullable: 1 - replacement in src/lib/Hydra/Schema/Builds.pm at line 233
{ data_type => "integer", default_value => 0, is_nullable => 1 },{ data_type => "integer", default_value => 0, is_nullable => 0 }, - edit in src/lib/Hydra/Schema/Builds.pm at line 243
{ data_type => "integer", default_value => 0, is_nullable => 0 },"busy", - edit in src/lib/Hydra/Schema/Builds.pm at line 244[11.4819]→[11.4819:4831](∅→∅),[11.4831]→[11.9077:9122](∅→∅),[11.240]→[11.9077:9122](∅→∅),[11.9122]→[11.4832:4890](∅→∅)
"locker",{ data_type => "text", is_nullable => 1 },"logfile",{ data_type => "text", is_nullable => 1 }, - replacement in src/lib/Hydra/Schema/Builds.pm at line 547
# Created by DBIx::Class::Schema::Loader v0.07043 @ 2015-09-10 17:34:23# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:JRelp13Cyfi+QVxC92xuqQ# Created by DBIx::Class::Schema::Loader v0.07043 @ 2015-10-27 13:54:16# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:iN9vwO5i3dURKOTgaPTHxw - edit in src/lib/Hydra/Schema/Builds.pm at line 628
'busy', - replacement in src/root/build.tt at line 7
[% isAggregate = constituents.size > 0 %][%isAggregate = constituents.size > 0;steps = build.buildsteps;busy = 0;FOR step IN steps; IF step.busy; busy = 1; END; END;%] - replacement in src/root/build.tt at line 26
[% FOREACH step IN build.buildsteps.reverse %][% FOREACH step IN steps.reverse %] - replacement in src/root/build.tt at line 122
[% IF build.buildsteps %]<li><a href="#tabs-buildsteps" data-toggle="tab">Build steps</a></li>[% END %][% IF steps %]<li><a href="#tabs-buildsteps" data-toggle="tab">Build steps</a></li>[% END %] - replacement in src/root/build.tt at line 146
[% INCLUDE renderStatus build=build icon=0 %][% INCLUDE renderStatus build=build icon=0 busy=busy %] - replacement in src/root/build.tt at line 237
[% IF build.busy %][% IF busy %] - replacement in src/root/build.tt at line 244
[% IF build.buildsteps && build.buildstatus != 0 && build.buildstatus != 6 %][% IF steps && build.buildstatus != 0 && build.buildstatus != 6 %] - replacement in src/root/build.tt at line 431
[% IF build.buildsteps %][% IF steps %] - replacement in src/root/common.tt at line 101
[% INCLUDE renderBuildStatusIcon size=16 busy=(showSchedulingInfo ? 1 : 0) buildstatus=build.buildstatus %][% INCLUDE renderBuildStatusIcon size=16 buildstatus=build.buildstatus %] - replacement in src/root/common.tt at line 105
<td>[% IF build.busy %]<span class="label label-success">Started</span>[% ELSE %]<span class="label">Queued</span>[% END %]</td><td>[% IF busy %]<span class="label label-success">Started</span>[% ELSE %]<span class="label">Queued</span>[% END %]</td> - edit in src/root/common.tt at line 192
busy = busy != undef ? busy : build.busy; - replacement in src/root/common.tt at line 213[11.4574]→[11.4574:4590](∅→∅),[11.4590]→[11.796:897](∅→∅),[11.897]→[11.4231:4244](∅→∅),[11.1069]→[11.4231:4244](∅→∅),[11.1075]→[11.4231:4244](∅→∅),[11.4244]→[11.898:1004](∅→∅)
ELSIF busy %]<img src="[% c.uri_for("/static/images/help_${size}.png") %]" alt="Busy" class="build-status" />[% ELSE %]<img src="[% c.uri_for("/static/images/help_${size}.png") %]" alt="Scheduled" class="build-status" />ELSE %]<img src="[% c.uri_for("/static/images/help_${size}.png") %]" alt="Queued" class="build-status" /> - replacement in src/root/common.tt at line 243[11.4783]→[11.4783:4805](∅→∅),[11.4805]→[11.2850:2889](∅→∅),[11.6385]→[11.2850:2889](∅→∅),[11.2850]→[11.2850:2889](∅→∅),[11.2889]→[11.4806:4871](∅→∅)
ELSIF build.busy %]<strong>Build in progress</strong>since [% INCLUDE renderDateTime timestamp = build.starttime;ELSIF busy %]<strong>Build in progress</strong>[%- - replacement in src/root/jobset-eval.tt at line 94
hideProjectName=1 hideJobsetName=1 %]hideProjectName=1 hideJobsetName=1 busy=0 %] - replacement in src/root/status.tt at line 10
[% INCLUDE renderBuildList builds=resource showSchedulingInfo=1 hideResultInfo=1 %][% INCLUDE renderBuildList builds=resource showSchedulingInfo=1 hideResultInfo=1 busy=1 %] - edit in src/sql/hydra.sql at line 175[11.3588]→[11.9515:9516](∅→∅),[11.9515]→[11.9515:9516](∅→∅),[11.9516]→[11.20177:20235](∅→∅),[11.20235]→[11.9516:9609](∅→∅),[11.9516]→[11.9516:9609](∅→∅),[11.9609]→[11.7741:7819](∅→∅)
-- FIXME: remove (obsolete with the new queue runner)busy integer not null default 0, -- true means someone is building this job nowlocker text, -- !!! hostname/pid of the process building this job? - edit in src/sql/hydra.sql at line 176
logfile text, -- if busy, the path of the logfile - edit in src/sql/hydra.sql at line 638
create index IndexBuildsOnFinishedBusy on Builds(finished, busy) where finished = 0; - file addition: upgrade-43.sql[157.3004]
alter table Builds drop column busy, drop column locker, drop column logfile;drop index IndexBuildsOnFinishedBusy;