@@ -, +, @@ --- C4/Context.pm | 41 +++++++++++++++++++++++++++++++++++++---- etc/koha-httpd.conf | 4 ++++ rewrite-config.PL | 5 +++++ 3 files changed, 46 insertions(+), 4 deletions(-) --- a/C4/Context.pm +++ a/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. +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"}); --- a/etc/koha-httpd.conf +++ a/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__" +__MEMCACHED_COMMENTED__ SetEnv MEMCACHED_SERVERS "__MEMCACHED_SERVERS__" +__MEMCACHED_COMMENTED__ SetEnv MEMCACHED_NAMESPACE "__MEMCACHED_NAMESPACE__" 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__" +__MEMCACHED_COMMENTED__ SetEnv MEMCACHED_SERVERS "__MEMCACHED_SERVERS__" +__MEMCACHED_COMMENTED__ SetEnv MEMCACHED_NAMESPACE "__MEMCACHED_NAMESPACE__" Options +FollowSymLinks ErrorDocument 400 /cgi-bin/koha/errors/400.pl --- a/rewrite-config.PL +++ a/rewrite-config.PL @@ -139,6 +139,7 @@ $prefix = $ENV{'INSTALL_BASE'} || "/usr"; "__USE_MEMCACHED__" => 'no', "__MEMCACHED_SERVERS__" => "", "__MEMCACHED_NAMESPACE__" => "", + "__MEMCACHED_COMMENTED__" => "#", ); # Override configuration from the environment @@ -155,6 +156,10 @@ if ($configuration{'__INSTALL_PAZPAR2__'} eq 'yes') { $configuration{'__PAZPAR2_TOGGLE_XML_POST__'} = ''; } +if ("__USE_MEMCACHED__" eq 'yes') { + $configuration{'__MEMCACHED_COMMENTED__'} => ''; +} + $fname = $ARGV[0]; $file = &read_file($fname); $file =~ s/__.*?__/exists $configuration{$&} ? $configuration{$&} : $&/seg; --