forked from lix-project/hydra
Open the DB using Hydra::Model::DB->new
This gets rid of the openHydraDB function and ensures that we open the database in a consistent way. Also drop the PostgreSQL sequence hacks. They don't seem to be necessary anymore.
This commit is contained in:
parent
914c5e248a
commit
179b012a8e
|
@ -6,6 +6,7 @@ use XML::Simple;
|
||||||
use POSIX qw(strftime);
|
use POSIX qw(strftime);
|
||||||
use IPC::Run;
|
use IPC::Run;
|
||||||
use Nix::Store;
|
use Nix::Store;
|
||||||
|
use Hydra::Model::DB;
|
||||||
use Hydra::Helper::Nix;
|
use Hydra::Helper::Nix;
|
||||||
use Digest::SHA qw(sha256_hex);
|
use Digest::SHA qw(sha256_hex);
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
|
@ -22,7 +23,7 @@ our @EXPORT = qw(
|
||||||
|
|
||||||
|
|
||||||
sub scmPath {
|
sub scmPath {
|
||||||
return getHydraPath . "/scm" ;
|
return Hydra::Model::DB::getHydraPath . "/scm" ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,23 +5,17 @@ use Exporter;
|
||||||
use File::Path;
|
use File::Path;
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
use Hydra::Helper::CatalystUtils;
|
use Hydra::Helper::CatalystUtils;
|
||||||
|
use Hydra::Model::DB;
|
||||||
|
|
||||||
our @ISA = qw(Exporter);
|
our @ISA = qw(Exporter);
|
||||||
our @EXPORT = qw(
|
our @EXPORT = qw(
|
||||||
getHydraPath getHydraHome getHydraDBPath openHydraDB getHydraConf txn_do
|
getHydraHome getHydraConf txn_do
|
||||||
registerRoot getGCRootsDir gcRootFor
|
registerRoot getGCRootsDir gcRootFor
|
||||||
getPrimaryBuildsForView
|
getPrimaryBuildsForView
|
||||||
getPrimaryBuildTotal
|
getPrimaryBuildTotal
|
||||||
getViewResult getLatestSuccessfulViewResult jobsetOverview removeAsciiEscapes);
|
getViewResult getLatestSuccessfulViewResult jobsetOverview removeAsciiEscapes);
|
||||||
|
|
||||||
|
|
||||||
sub getHydraPath {
|
|
||||||
my $dir = $ENV{"HYDRA_DATA"} || "/var/lib/hydra";
|
|
||||||
die "The HYDRA_DATA directory ($dir) does not exist!\n" unless -d $dir;
|
|
||||||
return $dir;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub getHydraHome {
|
sub getHydraHome {
|
||||||
my $dir = $ENV{"HYDRA_HOME"} or die "The HYDRA_HOME directory does not exist!\n";
|
my $dir = $ENV{"HYDRA_HOME"} or die "The HYDRA_HOME directory does not exist!\n";
|
||||||
return $dir;
|
return $dir;
|
||||||
|
@ -29,33 +23,12 @@ sub getHydraHome {
|
||||||
|
|
||||||
|
|
||||||
sub getHydraConf {
|
sub getHydraConf {
|
||||||
my $conf = $ENV{"HYDRA_CONFIG"} || (getHydraPath . "/hydra.conf");
|
my $conf = $ENV{"HYDRA_CONFIG"} || (Hydra::Model::DB::getHydraPath . "/hydra.conf");
|
||||||
die "The HYDRA_CONFIG file ($conf) does not exist!\n" unless -f $conf;
|
die "The HYDRA_CONFIG file ($conf) does not exist!\n" unless -f $conf;
|
||||||
return $conf;
|
return $conf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub getHydraDBPath {
|
|
||||||
my $db = $ENV{"HYDRA_DBI"};
|
|
||||||
if ( defined $db ) {
|
|
||||||
return $db ;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
my $path = getHydraPath . '/hydra.sqlite';
|
|
||||||
die "The Hydra database ($path) not exist!\n" unless -f $path;
|
|
||||||
return "dbi:SQLite:$path";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub openHydraDB {
|
|
||||||
my $db = Hydra::Schema->connect(getHydraDBPath, "", "", {});
|
|
||||||
$db->storage->dbh->do("PRAGMA synchronous = OFF;")
|
|
||||||
if defined $ENV{'HYDRA_NO_FSYNC'};
|
|
||||||
return $db;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Awful hack to handle timeouts in SQLite: just retry the transaction.
|
# Awful hack to handle timeouts in SQLite: just retry the transaction.
|
||||||
# DBD::SQLite *has* a 30 second retry window, but apparently it
|
# DBD::SQLite *has* a 30 second retry window, but apparently it
|
||||||
# doesn't work.
|
# doesn't work.
|
||||||
|
|
|
@ -2,7 +2,20 @@ package Hydra::Model::DB;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use base 'Catalyst::Model::DBIC::Schema';
|
use base 'Catalyst::Model::DBIC::Schema';
|
||||||
use Hydra::Helper::Nix;
|
|
||||||
|
sub getHydraPath {
|
||||||
|
my $dir = $ENV{"HYDRA_DATA"} || "/var/lib/hydra";
|
||||||
|
die "The HYDRA_DATA directory ($dir) does not exist!\n" unless -d $dir;
|
||||||
|
return $dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub getHydraDBPath {
|
||||||
|
my $db = $ENV{"HYDRA_DBI"};
|
||||||
|
return $db if defined $db;
|
||||||
|
my $path = getHydraPath . '/hydra.sqlite';
|
||||||
|
die "The Hydra database ($path) not exist!\n" unless -f $path;
|
||||||
|
return "dbi:SQLite:$path";
|
||||||
|
}
|
||||||
|
|
||||||
__PACKAGE__->config(
|
__PACKAGE__->config(
|
||||||
schema_class => 'Hydra::Schema',
|
schema_class => 'Hydra::Schema',
|
||||||
|
|
|
@ -156,16 +156,4 @@ __PACKAGE__->belongs_to(
|
||||||
# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43
|
# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43
|
||||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:yaqa9gcGx9Z+Nfr3xgX28g
|
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:yaqa9gcGx9Z+Nfr3xgX28g
|
||||||
|
|
||||||
use Hydra::Helper::Nix;
|
|
||||||
|
|
||||||
sub addSequence {
|
|
||||||
my $hydradbi = getHydraDBPath ;
|
|
||||||
if ($hydradbi =~ m/^dbi:Pg/) {
|
|
||||||
__PACKAGE__->sequence('builds_id_seq');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addSequence ;
|
|
||||||
|
|
||||||
# You can replace this text with custom content, and it will be preserved on regeneration
|
|
||||||
1;
|
1;
|
||||||
|
|
|
@ -432,8 +432,6 @@ __PACKAGE__->has_many(
|
||||||
# Created by DBIx::Class::Schema::Loader v0.07014 @ 2012-02-29 18:56:22
|
# Created by DBIx::Class::Schema::Loader v0.07014 @ 2012-02-29 18:56:22
|
||||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:w16c86FRReLPdA8H0yTIRg
|
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:w16c86FRReLPdA8H0yTIRg
|
||||||
|
|
||||||
use Hydra::Helper::Nix;
|
|
||||||
|
|
||||||
__PACKAGE__->has_many(
|
__PACKAGE__->has_many(
|
||||||
"dependents",
|
"dependents",
|
||||||
"Hydra::Schema::BuildInputs",
|
"Hydra::Schema::BuildInputs",
|
||||||
|
@ -456,13 +454,6 @@ __PACKAGE__->has_one(
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
sub addSequence {
|
|
||||||
my $hydradbi = getHydraDBPath;
|
|
||||||
if ($hydradbi =~ m/^dbi:Pg/) {
|
|
||||||
__PACKAGE__->sequence('builds_id_seq');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub makeSource {
|
sub makeSource {
|
||||||
my ($name, $query) = @_;
|
my ($name, $query) = @_;
|
||||||
my $source = __PACKAGE__->result_source_instance();
|
my $source = __PACKAGE__->result_source_instance();
|
||||||
|
@ -526,8 +517,6 @@ QUERY
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
addSequence;
|
|
||||||
|
|
||||||
makeQueries('', "");
|
makeQueries('', "");
|
||||||
makeQueries('ForProject', "and project = ?");
|
makeQueries('ForProject', "and project = ?");
|
||||||
makeQueries('ForJobset', "and project = ? and jobset = ?");
|
makeQueries('ForJobset', "and project = ? and jobset = ?");
|
||||||
|
|
|
@ -145,14 +145,6 @@ __PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project
|
||||||
# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43
|
# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43
|
||||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:eQtF5bcR/qZ625LxWBc7ug
|
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:eQtF5bcR/qZ625LxWBc7ug
|
||||||
|
|
||||||
use Hydra::Helper::Nix;
|
|
||||||
|
|
||||||
# !!! Ugly, should be generated.
|
|
||||||
my $hydradbi = getHydraDBPath;
|
|
||||||
if ($hydradbi =~ m/^dbi:Pg/) {
|
|
||||||
__PACKAGE__->sequence('jobsetevals_id_seq');
|
|
||||||
}
|
|
||||||
|
|
||||||
__PACKAGE__->has_many(
|
__PACKAGE__->has_many(
|
||||||
"buildIds",
|
"buildIds",
|
||||||
"Hydra::Schema::JobsetEvalMembers",
|
"Hydra::Schema::JobsetEvalMembers",
|
||||||
|
|
|
@ -86,12 +86,4 @@ __PACKAGE__->belongs_to("author", "Hydra::Schema::Users", { username => "author"
|
||||||
# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43
|
# Created by DBIx::Class::Schema::Loader v0.07014 @ 2011-12-05 14:15:43
|
||||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:YRMh0QI4JezFLj7nywGu6Q
|
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:YRMh0QI4JezFLj7nywGu6Q
|
||||||
|
|
||||||
use Hydra::Helper::Nix;
|
|
||||||
|
|
||||||
# !!! Ugly, should be generated.
|
|
||||||
my $hydradbi = getHydraDBPath;
|
|
||||||
if ($hydradbi =~ m/^dbi:Pg/) {
|
|
||||||
__PACKAGE__->sequence('newsitems_id_seq');
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
|
@ -6,6 +6,7 @@ use File::stat;
|
||||||
use Nix::Store;
|
use Nix::Store;
|
||||||
use Hydra::Schema;
|
use Hydra::Schema;
|
||||||
use Hydra::Helper::Nix;
|
use Hydra::Helper::Nix;
|
||||||
|
use Hydra::Model::DB;
|
||||||
use Hydra::Helper::AddBuilds;
|
use Hydra::Helper::AddBuilds;
|
||||||
use Email::Sender::Simple qw(sendmail);
|
use Email::Sender::Simple qw(sendmail);
|
||||||
use Email::Sender::Transport::SMTP;
|
use Email::Sender::Transport::SMTP;
|
||||||
|
@ -21,7 +22,7 @@ use feature qw/switch/;
|
||||||
|
|
||||||
STDOUT->autoflush();
|
STDOUT->autoflush();
|
||||||
|
|
||||||
my $db = openHydraDB;
|
my $db = Hydra::Model::DB->new();
|
||||||
|
|
||||||
|
|
||||||
my %config = new Config::General(getHydraConf)->getall;
|
my %config = new Config::General(getHydraConf)->getall;
|
||||||
|
|
|
@ -5,8 +5,8 @@ use feature 'switch';
|
||||||
use Hydra::Schema;
|
use Hydra::Schema;
|
||||||
use Hydra::Helper::Nix;
|
use Hydra::Helper::Nix;
|
||||||
use Hydra::Helper::AddBuilds;
|
use Hydra::Helper::AddBuilds;
|
||||||
|
use Hydra::Model::DB;
|
||||||
use Digest::SHA qw(sha256_hex);
|
use Digest::SHA qw(sha256_hex);
|
||||||
|
|
||||||
use Email::Sender::Simple qw(sendmail);
|
use Email::Sender::Simple qw(sendmail);
|
||||||
use Email::Sender::Transport::SMTP;
|
use Email::Sender::Transport::SMTP;
|
||||||
use Email::Simple;
|
use Email::Simple;
|
||||||
|
@ -17,7 +17,7 @@ use Data::Dump qw(dump);
|
||||||
|
|
||||||
STDOUT->autoflush();
|
STDOUT->autoflush();
|
||||||
|
|
||||||
my $db = openHydraDB;
|
my $db = Hydra::Model::DB->new();
|
||||||
my %config = new Config::General(getHydraConf)->getall;
|
my %config = new Config::General(getHydraConf)->getall;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,11 +3,12 @@
|
||||||
use strict;
|
use strict;
|
||||||
use Hydra::Schema;
|
use Hydra::Schema;
|
||||||
use Hydra::Helper::Nix;
|
use Hydra::Helper::Nix;
|
||||||
|
use Hydra::Model::DB;
|
||||||
use File::Slurp;
|
use File::Slurp;
|
||||||
use SQL::SplitStatement;
|
use SQL::SplitStatement;
|
||||||
use List::Util qw(max);
|
use List::Util qw(max);
|
||||||
|
|
||||||
my $db = openHydraDB;
|
my $db = Hydra::Model::DB->new();
|
||||||
my $dbh = $db->storage->dbh;
|
my $dbh = $db->storage->dbh;
|
||||||
$dbh->{RaiseError} = 1;
|
$dbh->{RaiseError} = 1;
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,12 @@ use File::Basename;
|
||||||
use POSIX qw(dup2 :sys_wait_h);
|
use POSIX qw(dup2 :sys_wait_h);
|
||||||
use Hydra::Schema;
|
use Hydra::Schema;
|
||||||
use Hydra::Helper::Nix;
|
use Hydra::Helper::Nix;
|
||||||
|
use Hydra::Model::DB;
|
||||||
use IO::Handle;
|
use IO::Handle;
|
||||||
use Nix::Store;
|
use Nix::Store;
|
||||||
|
|
||||||
chdir getHydraPath or die;
|
chdir Hydra::Model::DB::getHydraPath or die;
|
||||||
my $db = openHydraDB;
|
my $db = Hydra::Model::DB->new();
|
||||||
|
|
||||||
STDOUT->autoflush();
|
STDOUT->autoflush();
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,10 @@ use File::Basename;
|
||||||
use Nix::Store;
|
use Nix::Store;
|
||||||
use Hydra::Schema;
|
use Hydra::Schema;
|
||||||
use Hydra::Helper::Nix;
|
use Hydra::Helper::Nix;
|
||||||
|
use Hydra::Model::DB;
|
||||||
use POSIX qw(strftime);
|
use POSIX qw(strftime);
|
||||||
|
|
||||||
my $db = openHydraDB;
|
my $db = Hydra::Model::DB->new();
|
||||||
|
|
||||||
|
|
||||||
my %roots;
|
my %roots;
|
||||||
|
@ -75,7 +76,7 @@ foreach my $project ($db->resultset('Projects')->search({}, { order_by => ["name
|
||||||
|
|
||||||
# If the jobset has been disabled for more than one week, than
|
# If the jobset has been disabled for more than one week, than
|
||||||
# don't keep its builds anymore.
|
# don't keep its builds anymore.
|
||||||
if ($jobset->enabled == 0 && (time() - $jobset->lastcheckedtime > (7 * 24 * 3600))) {
|
if ($jobset->enabled == 0 && (time() - ($jobset->lastcheckedtime || 0) > (7 * 24 * 3600))) {
|
||||||
print STDERR "*** skipping disabled jobset ", $project->name, ":", $jobset->name, "\n";
|
print STDERR "*** skipping disabled jobset ", $project->name, ":", $jobset->name, "\n";
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue