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

Tomas Cohen Arazi tomascohen at gmail.com
Thu Apr 14 20:29:46 CEST 2011


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.
---
 C4/Context.pm       |   41 +++++++++++++++++++++++++++++++++++++----
 etc/koha-httpd.conf |    4 ++++
 2 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/C4/Context.pm b/C4/Context.pm
index 85d1c18..06c30b5 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,20 @@ BEGIN {
 			$main::SIG{__DIE__} = \&CGI::Carp::confess;
 		}
     }  	# else there is no browser to send fatals to!
+
+    # memcached stuff
+    $servers = $ENV{'MEMCACHED_SERVERS'};
+    if ($servers) {
+	require Cache::Memcached;
+	$memcached = Cache::Memcached->new({
+		      servers => [ $servers ],
+		      debug   => 0,
+		      compress_threshold => 10_000,
+		      namespace => $ENV{'MEMCACHED_NAMESPACE'} || 'koha'
+		  });
+	$ismemcached = $memcached->set('ismemcached','1');
+    }
+
 	$VERSION = '3.00.00.036';
 }
 
@@ -229,6 +243,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 +293,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 +331,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 bc2b4d8..1434b47 100644
--- a/etc/koha-httpd.conf
+++ b/etc/koha-httpd.conf
@@ -16,6 +16,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
@@ -106,6 +108,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.1



More information about the Koha-patches mailing list