my $_db_params;
sub db_Handles {
- return ($master_db, @slave_dbs);
+ return map { DBI->connect_cached($_) } ($master_db, @slave_dbs);
}
sub child_init {
$log->debug("Attempting to connect to $$master{db} at $$master{host}", INFO);
try {
- $master_db = DBI->connect(
+ $master_db = [
"dbi:Pg:".
"host=$$master{host};".
"port=$$master{port};".
($$master{application_name} ? ";application_name='$$master{application_name}'": ""),
$$master{user},
$$master{pw},
- \%attrs)
- || do { sleep(1);
- DBI->connect(
- "dbi:Pg:".
- "host=$$master{host};".
- "port=$$master{port};".
- "dbname=$$master{db}".
- ($$master{application_name} ? ";application_name='$$master{application_name}'": ""),
- $$master{user},
- $$master{pw},
- \%attrs) }
- || throw OpenSRF::EX::ERROR
+ \%attrs
+ ];
+
+ DBI->connect_cached( @$master_db ) || do {
+ sleep(1); DBI->connect_cached( @$master_db );
+ } || throw OpenSRF::EX::ERROR
("Couldn't connect to $$master{db}".
" on $$master{host}::$$master{port}".
" as $$master{user}!!");
$log->debug("Connected to MASTER db $$master{db} at $$master{host}", INFO);
- $master_db->do("SET NAMES '$$master{client_encoding}';") if ($$master{client_encoding});
+ DBI->connect_cached( @$master_db )->do("SET NAMES '$$master{client_encoding}';") if ($$master{client_encoding});
for my $db (@$_db_params) {
try {
- push @slave_dbs, DBI->connect("dbi:Pg:host=$$db{host};port=$$db{port};dbname=$$db{db}". ($$db{application_name} ? ";application_name='$$db{application_name}'" : ""),$$db{user},$$db{pw}, \%attrs)
- || do { sleep(1); DBI->connect("dbi:Pg:host=$$db{host};port=$$db{port};dbname=$$db{db}". ($$db{application_name} ? ";application_name='$$db{application_name}'" : ""),$$db{user},$$db{pw}, \%attrs) }
+ push @slave_dbs, ["dbi:Pg:host=$$db{host};port=$$db{port};dbname=$$db{db}",$$db{user},$$db{pw}, \%attrs];
+ DBI->connect_cached( @{ $slave_dbs[-1] } )
+ || do { sleep(1); DBI->connect_cached( @{ $slave_dbs[-1] } ) }
|| throw OpenSRF::EX::ERROR
("Couldn't connect to $$db{db}".
" on $$db{host}::$$db{port}".
throw $e;
};
- $slave_dbs[-1]->do("SET NAMES '$$db{client_encoding}';") if ($$master{client_encoding});
+ DBI->connect_cached( @{ $slave_dbs[-1] } )->do("SET NAMES '$$db{client_encoding}';") if ($$master{client_encoding});
$log->debug("Connected to MASTER db '$$master{db} at $$master{host}", INFO);
}
sub db_Main {
my $self = shift;
- return $master_db if ($self->current_xact_session || $OpenILS::Application::Storage::WRITE);
- return $master_db unless (@slave_dbs);
- return ($master_db, @slave_dbs)[rand(scalar(@slave_dbs))];
+ return DBI->connect_cached( @$master_db ) if ($self->current_xact_session || $OpenILS::Application::Storage::WRITE);
+ return DBI->connect_cached( @$master_db ) unless (@slave_dbs);
+ return DBI->connect_cached( @{ ($master_db, @slave_dbs)[rand(scalar(@slave_dbs))] } );
}
sub quote {