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">
|
||||
<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>
|
||||
<tbody>
|
||||
[% FOREACH job IN jobs -%]
|
||||
<tr [% IF job.busy %]class="runningJob"[% END %] >
|
||||
<td>[% job.id %]</td>
|
||||
<td>[% job.priority %]</td>
|
||||
<td><tt>[% job.project.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", "", "", {});
|
||||
|
||||
$db->storage->dbh->do("PRAGMA synchronous = OFF;");
|
||||
|
||||
|
||||
sub isValidPath {
|
||||
my $path = shift;
|
||||
|
@ -124,7 +126,10 @@ sub buildJob {
|
|||
}
|
||||
|
||||
$job->delete;
|
||||
|
||||
});
|
||||
|
||||
print "STOP ", time, "\n";
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
#! @perl@ -w
|
||||
|
||||
use strict;
|
||||
use POSIX qw(dup2);
|
||||
use HydraFrontend::Schema;
|
||||
|
||||
|
||||
my $db = HydraFrontend::Schema->connect("dbi:SQLite:dbname=hydra.sqlite", "", "", {});
|
||||
|
||||
$db->storage->dbh->do("PRAGMA synchronous = OFF;");
|
||||
|
||||
|
||||
# Unlock jobs whose building process has died.
|
||||
$db->txn_do(sub {
|
||||
|
@ -22,8 +25,7 @@ $db->txn_do(sub {
|
|||
});
|
||||
|
||||
|
||||
while (1) {
|
||||
|
||||
sub checkJobs {
|
||||
print "looking for runnable jobs...\n";
|
||||
|
||||
my $job;
|
||||
|
@ -46,9 +48,20 @@ while (1) {
|
|||
# Start the job. We need to do this outside the transaction in
|
||||
# case it aborts or something.
|
||||
if (defined $job) {
|
||||
print "starting job ", $job->id, "\n";
|
||||
my $id = $job->id;
|
||||
print "starting job $id\n";
|
||||
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 ($@) {
|
||||
warn $@;
|
||||
|
@ -59,6 +72,14 @@ while (1) {
|
|||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
while (1) {
|
||||
eval {
|
||||
checkJobs;
|
||||
};
|
||||
warn $@ if $@;
|
||||
|
||||
print "sleeping...\n";
|
||||
sleep(10);
|
||||
|
|
|
@ -7,6 +7,8 @@ use HydraFrontend::Schema;
|
|||
|
||||
my $db = HydraFrontend::Schema->connect("dbi:SQLite:dbname=hydra.sqlite", "", "", {});
|
||||
|
||||
$db->storage->dbh->do("PRAGMA synchronous = OFF;");
|
||||
|
||||
|
||||
sub isValidPath {
|
||||
my $path = shift;
|
||||
|
@ -250,4 +252,8 @@ sub checkJobs {
|
|||
}
|
||||
|
||||
|
||||
checkJobs;
|
||||
while (1) {
|
||||
checkJobs;
|
||||
print "sleeping...\n";
|
||||
sleep 10;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue