From 25778fdc5effa0654866c51ed8862761dd31e9cf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Joonas=20Kylm=C3=A4l=C3=A4?= Date: Mon, 16 Sep 2019 10:26:01 +0000 Subject: [PATCH] Bug 13193: Make Memcached usage fork safe When a high enough number of forks try to access for example system preferences with Koha::Cache using memcached as backend the results of different cache requests get mixed up. The problem is fixed by using Cache::Memcached::Fast::Safe that is a fork safe version of Cache::Memcached::Fast. Sponsored-by: The National Library of Finland Signed-off-by: David Cook Works as described, and solves an insidious difficult to debug problem in Koha. Signed-off-by: Martin Renvoize Signed-off-by: Joy Nelson --- C4/Installer/PerlDependencies.pm | 7 ++++++- Koha/Cache.pm | 6 +++--- koha-tmpl/intranet-tmpl/prog/en/modules/about.tt | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/C4/Installer/PerlDependencies.pm b/C4/Installer/PerlDependencies.pm index d26b842e31..32b68faa3e 100644 --- a/C4/Installer/PerlDependencies.pm +++ b/C4/Installer/PerlDependencies.pm @@ -265,7 +265,12 @@ our $PERL_DEPS = { 'Cache::Memcached::Fast' => { 'usage' => 'Caching', 'required' => '0', - 'min_ver' => '0.17' + 'min_ver' => '0.19' + }, + 'Cache::Memcached::Fast::Safe' => { + 'usage' => 'Caching', + 'required' => '0', + 'min_ver' => '0.06' }, 'Cache::FastMmap' => { 'usage' => 'Caching', diff --git a/Koha/Cache.pm b/Koha/Cache.pm index cf77257825..95d0e6ba1b 100644 --- a/Koha/Cache.pm +++ b/Koha/Cache.pm @@ -87,7 +87,7 @@ sub new { $self->{namespace} .= ":$subnamespace:"; if ( $self->{'default_type'} eq 'memcached' - && can_load( modules => { 'Cache::Memcached::Fast' => undef } ) + && can_load( modules => { 'Cache::Memcached::Fast::Safe' => undef } ) && _initialize_memcached($self, @servers) && defined( $self->{'memcached_cache'} ) ) { @@ -120,9 +120,9 @@ sub _initialize_memcached { . join( ', ', @servers ) . " with " . $self->{'namespace'}; - # Cache::Memcached::Fast doesn't allow a default expire time to be set + # Cache::Memcached::Fast::Safe doesn't allow a default expire time to be set # so we force it on setting. - my $memcached = Cache::Memcached::Fast->new( + my $memcached = Cache::Memcached::Fast::Safe->new( { servers => \@servers, compress_threshold => 10_000, diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/about.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/about.tt index 1c94254b6c..ee0489cf3b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/about.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/about.tt @@ -102,7 +102,7 @@ [% CASE # nowhere %] Nowhere Note that the right place to define the memcached config is in your $KOHA_CONF file. Currently you do not have a valid memcached configuration defined. [% END %] - [% IF effective_caching_method != 'Cache::Memcached::Fast' %] + [% IF effective_caching_method != 'Cache::Memcached::Fast::Safe' %] | Effective caching method: [% effective_caching_method | html %] [% END %] -- 2.39.5