summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDylan William Hardison <dylan@hardison.net>2018-06-21 17:07:50 +0200
committerGitHub <noreply@github.com>2018-06-21 17:07:50 +0200
commit1024d9b797217682cba6d89e484620782a7bb327 (patch)
treec3ab86a5590eecf30e7e2f901574004e3b5759af
parent454a5dcf66f9b3eafb61badc6ce61c8ebe52dd96 (diff)
downloadbugzilla-1024d9b797217682cba6d89e484620782a7bb327.tar.gz
bugzilla-1024d9b797217682cba6d89e484620782a7bb327.tar.xz
Bug 1461379 - use DBIx::Connector to manage database connections
-rw-r--r--.circleci/config.yml2
-rw-r--r--Bugzilla.pm1
-rw-r--r--Bugzilla/DB.pm19
-rw-r--r--Bugzilla/ModPerl.pm2
-rw-r--r--Dockerfile2
-rwxr-xr-xMakefile.PL1
-rwxr-xr-xtoken.cgi2
7 files changed, 11 insertions, 18 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 341b48062..a70ea3ca6 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -7,7 +7,7 @@ version: 2
defaults:
bmo_slim_image: &bmo_slim_image
- image: mozillabteam/bmo-slim:20180518.1
+ image: mozillabteam/bmo-slim:20180523.1
user: app
mysql_image: &mysql_image
diff --git a/Bugzilla.pm b/Bugzilla.pm
index 9df38138d..427dd3aea 100644
--- a/Bugzilla.pm
+++ b/Bugzilla.pm
@@ -893,7 +893,6 @@ sub _cleanup {
foreach my $dbh ($main, $shadow) {
next if !$dbh;
$dbh->bz_rollback_transaction() if $dbh->bz_in_transaction;
- $dbh->disconnect;
}
clear_request_cache();
diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm
index 893c9235e..33801e989 100644
--- a/Bugzilla/DB.pm
+++ b/Bugzilla/DB.pm
@@ -11,6 +11,8 @@ use 5.10.1;
use Moo;
use DBI;
+use DBIx::Connector;
+our %Connector;
has 'dbh' => (
is => 'lazy',
@@ -213,7 +215,6 @@ sub bz_check_server_version {
my ($self, $db, $output) = @_;
my $sql_vers = $self->bz_server_version;
- $self->disconnect;
my $sql_want = $db->{db_version};
my $version_ok = vers_cmp($sql_vers, $sql_want) > -1 ? 1 : 0;
@@ -269,7 +270,6 @@ sub bz_create_database {
}
}
- $dbh->disconnect;
}
# A helper for bz_create_database and bz_check_requirements.
@@ -278,6 +278,7 @@ sub _get_no_db_connection {
my $dbh;
my %connect_params = %{ Bugzilla->localconfig };
$connect_params{db_name} = '';
+ local %Connector = ();
my $conn_success = eval {
$dbh = _connect(\%connect_params);
};
@@ -1261,7 +1262,7 @@ sub _build_dbh {
# set up default attributes used to connect to the database
# (may be overridden by DB driver implementations)
- my $attributes = { RaiseError => 0,
+ my $attributes = { RaiseError => 1,
AutoCommit => 1,
PrintError => 0,
ShowErrorStatement => 1,
@@ -1286,17 +1287,9 @@ sub _build_dbh {
}
}
- # connect using our known info to the specified db
- my $dbh = DBI->connect($dsn, $user, $pass, $attributes)
- or die "\nCan't connect to the database.\nError: $DBI::errstr\n"
- . " Is your database installed and up and running?\n Do you have"
- . " the correct username and password selected in localconfig?\n\n";
+ my $connector = $Connector{"$user.$dsn"} //= DBIx::Connector->new($dsn, $user, $pass, $attributes);
- # RaiseError was only set to 0 so that we could catch the
- # above "die" condition.
- $dbh->{RaiseError} = 1;
-
- return $dbh;
+ return $connector->dbh;
}
#####################################################################
diff --git a/Bugzilla/ModPerl.pm b/Bugzilla/ModPerl.pm
index 89eca9585..19cd1128f 100644
--- a/Bugzilla/ModPerl.pm
+++ b/Bugzilla/ModPerl.pm
@@ -74,7 +74,7 @@ __DATA__
# every process, and Perl has another. (Various Perl modules still use
# the built-in rand(), even though we never use it in Bugzilla itself,
# so we need to srand() both of them.)
-PerlChildInitHandler "sub { Bugzilla::RNG::srand(); srand(); }"
+PerlChildInitHandler "sub { Bugzilla::RNG::srand(); srand(); eval { Bugzilla->dbh->ping } }"
PerlInitHandler Bugzilla::ModPerl::Hostage
PerlAccessHandler Bugzilla::ModPerl::BlockIP
diff --git a/Dockerfile b/Dockerfile
index 3ac320937..c86a92b0f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM mozillabteam/bmo-slim:20180518.1
+FROM mozillabteam/bmo-slim:20180523.1
ARG CI
ARG CIRCLE_SHA1
diff --git a/Makefile.PL b/Makefile.PL
index 484e66d3d..46228ab56 100755
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -42,6 +42,7 @@ my %requires = (
'CPAN::Meta::Requirements' => '2.121',
'Class::XSAccessor' => '1.18',
'DBI' => '1.614',
+ 'DBIx::Connector' => 0,
'Data::Password::passwdqc' => '0.08',
'Date::Format' => '2.23',
'DateTime' => '0.75',
diff --git a/token.cgi b/token.cgi
index 51ed93977..990040050 100755
--- a/token.cgi
+++ b/token.cgi
@@ -23,7 +23,7 @@ use Date::Format;
use Date::Parse;
use JSON qw( decode_json );
-my $dbh = Bugzilla->dbh;
+local our $dbh = Bugzilla->dbh;
local our $cgi = Bugzilla->cgi;
local our $template = Bugzilla->template;
local our $vars = {};