forked from lix-project/hydra
* Perform builds in parallel.
* Turn off sqlite's synchronous mode because fsync() performance *really* sucks on ext3 (it syncs the entire filesystem). See https://bugzilla.mozilla.org/show_bug.cgi?id=421482
This commit is contained in:
parent
8f5e7c319c
commit
0f24c11292
|
@ -5,11 +5,12 @@
|
||||||
|
|
||||||
<table class="tablesorter">
|
<table class="tablesorter">
|
||||||
<thead>
|
<thead>
|
||||||
<tr><th>Priority</th><th>Project</th><th>Job</th><th>System</th><th>Timestamp</th><th>Description</th></tr>
|
<tr><th>#</th><th>Priority</th><th>Project</th><th>Job</th><th>System</th><th>Timestamp</th><th>Description</th></tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
[% FOREACH job IN jobs -%]
|
[% FOREACH job IN jobs -%]
|
||||||
<tr [% IF job.busy %]class="runningJob"[% END %] >
|
<tr [% IF job.busy %]class="runningJob"[% END %] >
|
||||||
|
<td>[% job.id %]</td>
|
||||||
<td>[% job.priority %]</td>
|
<td>[% job.priority %]</td>
|
||||||
<td><tt>[% job.project.name %]</tt></td>
|
<td><tt>[% job.project.name %]</tt></td>
|
||||||
<td><tt>[% job.jobset.name %]</tt></td>
|
<td><tt>[% job.jobset.name %]</tt></td>
|
||||||
|
|
|
@ -7,6 +7,8 @@ use HydraFrontend::Schema;
|
||||||
|
|
||||||
my $db = HydraFrontend::Schema->connect("dbi:SQLite:dbname=hydra.sqlite", "", "", {});
|
my $db = HydraFrontend::Schema->connect("dbi:SQLite:dbname=hydra.sqlite", "", "", {});
|
||||||
|
|
||||||
|
$db->storage->dbh->do("PRAGMA synchronous = OFF;");
|
||||||
|
|
||||||
|
|
||||||
sub isValidPath {
|
sub isValidPath {
|
||||||
my $path = shift;
|
my $path = shift;
|
||||||
|
@ -124,7 +126,10 @@ sub buildJob {
|
||||||
}
|
}
|
||||||
|
|
||||||
$job->delete;
|
$job->delete;
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
print "STOP ", time, "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
#! @perl@ -w
|
#! @perl@ -w
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
use POSIX qw(dup2);
|
||||||
use HydraFrontend::Schema;
|
use HydraFrontend::Schema;
|
||||||
|
|
||||||
|
|
||||||
my $db = HydraFrontend::Schema->connect("dbi:SQLite:dbname=hydra.sqlite", "", "", {});
|
my $db = HydraFrontend::Schema->connect("dbi:SQLite:dbname=hydra.sqlite", "", "", {});
|
||||||
|
|
||||||
|
$db->storage->dbh->do("PRAGMA synchronous = OFF;");
|
||||||
|
|
||||||
|
|
||||||
# Unlock jobs whose building process has died.
|
# Unlock jobs whose building process has died.
|
||||||
$db->txn_do(sub {
|
$db->txn_do(sub {
|
||||||
|
@ -22,8 +25,7 @@ $db->txn_do(sub {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
while (1) {
|
sub checkJobs {
|
||||||
|
|
||||||
print "looking for runnable jobs...\n";
|
print "looking for runnable jobs...\n";
|
||||||
|
|
||||||
my $job;
|
my $job;
|
||||||
|
@ -46,9 +48,20 @@ while (1) {
|
||||||
# Start the job. We need to do this outside the transaction in
|
# Start the job. We need to do this outside the transaction in
|
||||||
# case it aborts or something.
|
# case it aborts or something.
|
||||||
if (defined $job) {
|
if (defined $job) {
|
||||||
print "starting job ", $job->id, "\n";
|
my $id = $job->id;
|
||||||
|
print "starting job $id\n";
|
||||||
eval {
|
eval {
|
||||||
system("perl -I HydraFrontend/lib -w ./build.pl " . $job->id);
|
my $child = fork();
|
||||||
|
die unless defined $child;
|
||||||
|
if ($child == 0) {
|
||||||
|
open LOG, ">logs/$id" or die;
|
||||||
|
POSIX::dup2(fileno(LOG), 1) or die;
|
||||||
|
POSIX::dup2(fileno(LOG), 2) or die;
|
||||||
|
exec("perl", "-IHydraFrontend/lib", "-w",
|
||||||
|
"./build.pl", $id);
|
||||||
|
warn "cannot start job " . $id;
|
||||||
|
_exit(1);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
if ($@) {
|
if ($@) {
|
||||||
warn $@;
|
warn $@;
|
||||||
|
@ -59,6 +72,14 @@ while (1) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
eval {
|
||||||
|
checkJobs;
|
||||||
|
};
|
||||||
|
warn $@ if $@;
|
||||||
|
|
||||||
print "sleeping...\n";
|
print "sleeping...\n";
|
||||||
sleep(10);
|
sleep(10);
|
||||||
|
|
|
@ -7,6 +7,8 @@ use HydraFrontend::Schema;
|
||||||
|
|
||||||
my $db = HydraFrontend::Schema->connect("dbi:SQLite:dbname=hydra.sqlite", "", "", {});
|
my $db = HydraFrontend::Schema->connect("dbi:SQLite:dbname=hydra.sqlite", "", "", {});
|
||||||
|
|
||||||
|
$db->storage->dbh->do("PRAGMA synchronous = OFF;");
|
||||||
|
|
||||||
|
|
||||||
sub isValidPath {
|
sub isValidPath {
|
||||||
my $path = shift;
|
my $path = shift;
|
||||||
|
@ -250,4 +252,8 @@ sub checkJobs {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
checkJobs;
|
while (1) {
|
||||||
|
checkJobs;
|
||||||
|
print "sleeping...\n";
|
||||||
|
sleep 10;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue