From c51564b7432445041d66703ab4eab7c70acb8dac Mon Sep 17 00:00:00 2001 From: Chris Cormack Date: Fri, 10 Oct 2014 05:03:01 +1300 Subject: [PATCH] Bug 12005 : Creating a new zebra connection for each time we need one Zebra is not designed to have persistent connections, under cgi this didn't matter the scripts would get a new connection each time, but under plack we try to use dead connections This patch changes it so plack works the same way that cgi did. To test: Apply this patch Do some searches Check everything still works --- C4/Context.pm | 35 +++++++---------------------------- 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/C4/Context.pm b/C4/Context.pm index 63e8ebe..bc212c3 100644 --- a/C4/Context.pm +++ b/C4/Context.pm @@ -672,9 +672,7 @@ sub AUTOLOAD $Zconn = C4::Context->Zconn -Returns a connection to the Zebra database for the current -context. If no connection has yet been made, this method -creates one and connects. +Returns a connection to the Zebra database C<$self> @@ -682,32 +680,14 @@ C<$server> one of the servers defined in the koha-conf.xml file C<$async> whether this is a asynchronous connection -C<$auth> whether this connection has rw access (1) or just r access (0 or NULL) - - =cut sub Zconn { - my ($self, $server, $async, $auth, $piggyback, $syntax) = @_; - #TODO: We actually just ignore the auth and syntax parameter - #It also looks like we are not passing auth, piggyback, syntax anywhere - - my $cache_key = join ('::', (map { $_ // '' } ($server, $async, $auth, $piggyback, $syntax))); - if ( defined($context->{"Zconn"}->{$cache_key}) && (0 == $context->{"Zconn"}->{$cache_key}->errcode()) ) { - return $context->{"Zconn"}->{$cache_key}; - # No connection object or it died. Create one. - }else { - # release resources if we're closing a connection and making a new one - # FIXME: this needs to be smarter -- an error due to a malformed query or - # a missing index does not necessarily require us to close the connection - # and make a new one, particularly for a batch job. However, at - # first glance it does not look like there's a way to easily check - # the basic health of a ZOOM::Connection - $context->{"Zconn"}->{$cache_key}->destroy() if defined($context->{"Zconn"}->{$cache_key}); - - $context->{"Zconn"}->{$cache_key} = &_new_Zconn( $server, $async, $piggyback ); - return $context->{"Zconn"}->{$cache_key}; - } + my ($self, $server, $async ) = @_; + my $cache_key = join ('::', (map { $_ // '' } ($server, $async ))); + $context->{"Zconn"}->{$cache_key}->destroy() if defined($context->{"Zconn"}->{$cache_key}); #destroy old connection before making a new one + $context->{"Zconn"}->{$cache_key} = &_new_Zconn( $server, $async ); + return $context->{"Zconn"}->{$cache_key}; } =head2 _new_Zconn @@ -725,7 +705,7 @@ C<$auth> whether this connection has rw access (1) or just r access (0 or NULL) =cut sub _new_Zconn { - my ( $server, $async, $piggyback ) = @_; + my ( $server, $async ) = @_; my $tried=0; # first attempt my $Zconn; # connection object @@ -761,7 +741,6 @@ sub _new_Zconn { $o->option(user => $user) if $user && $password; $o->option(password => $password) if $user && $password; $o->option(async => 1) if $async; - $o->option(count => $piggyback) if $piggyback; $o->option(cqlfile=> $context->{"server"}->{$server}->{"cql2rpn"}); $o->option(cclfile=> $context->{"serverinfo"}->{$server}->{"ccl2rpn"}); $o->option(preferredRecordSyntax => $syntax); -- 1.9.1