[Koha-patches] [PATCH] [SIGNED-OFF] Bug 6193 - Use memcached cache koha-conf.xml configuration variables

Federico Rinaudo frinaudo at infocpt.com.ar
Thu Sep 22 15:01:31 CEST 2011


From: Tomas Cohen Arazi <tomascohen at gmail.com>

Basically I add some code to Context.pm so it stores koha-conf.xml config vars
in memcached server. It is arguable whether this is an improvement or not,
tests are needed to conclude something about this.

Error handling was an issue with Cache::Memcached, I tried to do it the
simplest I could.

Note: As it was pointless to read the xml file to get the memcached
server info for accessing them for retreiving the info in the koha-conf.xml
file... I passed those values through apache's SetEnv. These variables
are set acordingly through the install scripts and commented out if koha
was setup not to use it.

Bug 6193 - Properly comment the code

Required by slef.

Regards
To+

Signed-off-by: Federico Rinaudo <frinaudo at infocpt.com.ar>
---
 C4/Context.pm       |   43 +++++++++++++++++++++++++++++++++++++++----
 etc/koha-httpd.conf |    4 ++++
 2 files changed, 43 insertions(+), 4 deletions(-)

diff --git a/C4/Context.pm b/C4/Context.pm
index 85d1c18..eed9270 100644
--- a/C4/Context.pm
+++ b/C4/Context.pm
@@ -18,7 +18,7 @@ package C4::Context;
 
 use strict;
 use warnings;
-use vars qw($VERSION $AUTOLOAD $context @context_stack);
+use vars qw($VERSION $AUTOLOAD $context @context_stack $servers $memcached $ismemcached);
 
 BEGIN {
 	if ($ENV{'HTTP_USER_AGENT'})	{
@@ -78,6 +78,22 @@ BEGIN {
 			$main::SIG{__DIE__} = \&CGI::Carp::confess;
 		}
     }  	# else there is no browser to send fatals to!
+
+    # Check if there are memcached servers set
+    $servers = $ENV{'MEMCACHED_SERVERS'};
+    if ($servers) {
+        # Load required libraries and create the memcached object
+	require Cache::Memcached;
+	$memcached = Cache::Memcached->new({
+		      servers => [ $servers ],
+		      debug   => 0,
+		      compress_threshold => 10_000,
+		      namespace => $ENV{'MEMCACHED_NAMESPACE'} || 'koha'
+		  });
+        # Verify memcached available (set a variable and test the output)
+	$ismemcached = $memcached->set('ismemcached','1');
+    }
+
 	$VERSION = '3.00.00.036';
 }
 
@@ -229,6 +245,11 @@ Returns undef in case of error.
 
 sub read_config_file {		# Pass argument naming config file to read
     my $koha = XMLin(shift, keyattr => ['id'], forcearray => ['listen', 'server', 'serverinfo'], suppressempty => '');
+
+    if ($ismemcached) {
+      $memcached->set('kohaconf',$koha);
+    }
+
     return $koha;			# Return value: ref-to-hash holding the configuration
 }
 
@@ -274,6 +295,10 @@ Allocates a new context. Initializes the context from the specified
 file, which defaults to either the file given by the C<$KOHA_CONF>
 environment variable, or F</etc/koha/koha-conf.xml>.
 
+It saves the koha-conf.xml values in the declared memcached server(s)
+if currently available and uses those values until them expire and
+re-reads them.
+
 C<&new> does not set this context as the new default context; for
 that, use C<&set_context>.
 
@@ -308,10 +333,20 @@ sub new {
             return undef;
         }
     }
-        # Load the desired config file.
-    $self = read_config_file($conf_fname);
-    $self->{"config_file"} = $conf_fname;
     
+    if ($ismemcached) {
+      # retreive from memcached
+      $self = $memcached->get('kohaconf');
+      if (not defined $self) {
+	# not in memcached yet
+	$self = read_config_file($conf_fname);
+      }
+    } else {
+      # non-memcached env, read from file
+      $self = read_config_file($conf_fname);
+    }
+
+    $self->{"config_file"} = $conf_fname;
     warn "read_config_file($conf_fname) returned undef" if !defined($self->{"config"});
     return undef if !defined($self->{"config"});
 
diff --git a/etc/koha-httpd.conf b/etc/koha-httpd.conf
index bf8cdc7..2b986ac 100644
--- a/etc/koha-httpd.conf
+++ b/etc/koha-httpd.conf
@@ -17,6 +17,8 @@
 #  TransferLog __LOG_DIR__/koha-opac-access_log
    SetEnv KOHA_CONF "__KOHA_CONF_DIR__/koha-conf.xml"
    SetEnv PERL5LIB "__PERL_MODULE_DIR__"
+   SetEnv MEMCACHED_SERVERS "__MEMCACHED_SERVERS__"
+   SetEnv MEMCACHED_NAMESPACE "__MEMCACHED_NAMESPACE__"
 
    <IfModule mod_gzip.c>
      mod_gzip_on yes
@@ -107,6 +109,8 @@
 #  TransferLog __LOG_DIR__/koha-access_log
    SetEnv KOHA_CONF "__KOHA_CONF_DIR__/koha-conf.xml"
    SetEnv PERL5LIB "__PERL_MODULE_DIR__"
+   SetEnv MEMCACHED_SERVERS "__MEMCACHED_SERVERS__"
+   SetEnv MEMCACHED_NAMESPACE "__MEMCACHED_NAMESPACE__"
    Options +FollowSymLinks
 
    ErrorDocument 400 /cgi-bin/koha/errors/400.pl
-- 
1.7.2.5



More information about the Koha-patches mailing list