[Koha-patches] [PATCH] bug_15562: Removed Koha::Cache->get_instance()
Srdjan
srdjan at catalyst.net.nz
Tue Apr 26 05:55:19 CEST 2016
There should be no cache singleton, full stop. If Koha is to move away
from .pl scripts that is.
As an interim measure Koha::Cache->get_instance() is replaced with
C4::Context->cache, in the vein of C4::Context->memcached. In that
respect it will continue to work in the singleton-ish way if context is
used as a singleton, but supports cache-per-context.
Koha::Handler::Plack->app_per_host() cache sysprefs using Context memcached.
https://bugs.koha-community.org/show_bug.cgi?id=15562
---
C4/Biblio.pm | 4 +-
C4/Calendar.pm | 15 ++--
C4/Context.pm | 123 ++++++++++++++++++++------------
C4/External/OverDrive.pm | 6 +-
C4/Koha.pm | 3 +-
C4/Utils/DataTables/ColumnsSettings.pm | 3 +-
Koha/Cache.pm | 17 -----
Koha/Calendar.pm | 5 +-
Koha/Handler/Plack.pm | 41 ++++++++++-
Koha/Handler/Plack/CGI.pm | 2 +-
Koha/Template/Plugin/Cache.pm | 3 +-
admin/biblio_framework.pl | 3 +-
admin/koha2marclinks.pl | 2 +-
admin/marc_subfields_structure.pl | 2 +-
admin/marctagstructure.pl | 5 +-
opac/svc/report | 5 +-
svc/report | 4 +-
t/Cache.t | 4 +-
t/Calendar.t | 4 +-
t/Context.t | 28 +++++++-
t/Koha_Template_Plugin_Cache.t | 4 +-
t/db_dependent/Context.t | 8 +--
t/db_dependent/Filter_MARC_ViewPolicy.t | 2 +-
tools/newHolidays.pl | 4 +-
24 files changed, 180 insertions(+), 117 deletions(-)
diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index 9a7c86d..74c2198 100644
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -37,8 +37,8 @@ use C4::ClassSource;
use C4::Charset;
use C4::Linker;
use C4::OAI::Sets;
+use C4::Context;
-use Koha::Cache;
use Koha::Authority::Types;
use Koha::Acquisition::Currencies;
@@ -1119,7 +1119,7 @@ sub GetMarcStructure {
$frameworkcode = "" unless $frameworkcode;
$forlibrarian = $forlibrarian ? 1 : 0;
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
my $cache_key = "MarcStructure-$forlibrarian-$frameworkcode";
my $cached = $cache->get_from_cache($cache_key);
return $cached if $cached;
diff --git a/C4/Calendar.pm b/C4/Calendar.pm
index 852bdd7..5d2b753 100644
--- a/C4/Calendar.pm
+++ b/C4/Calendar.pm
@@ -23,7 +23,6 @@ use Carp;
use Date::Calc qw( Date_to_Days Today);
use C4::Context;
-use Koha::Cache;
use constant ISO_DATE_FORMAT => "%04d-%02d-%02d";
@@ -276,7 +275,7 @@ sub insert_single_holiday {
# changed the 'single_holidays' table, lets force/reset its cache
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
$cache->clear_from_cache( 'single_holidays') ;
return $self;
@@ -320,7 +319,7 @@ sub insert_exception_holiday {
$self->{'exception_holidays'}->{"$options{year}/$options{month}/$options{day}"}{description} = $options{description};
# changed the 'single_holidays' table, lets force/reset its cache
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
$cache->clear_from_cache( 'single_holidays') ;
return $self;
@@ -420,7 +419,7 @@ UPDATE special_holidays SET title = ?, description = ?
$self->{'single_holidays'}->{"$options{year}/$options{month}/$options{day}"}{description} = $options{description};
# changed the 'single_holidays' table, lets force/reset its cache
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
$cache->clear_from_cache( 'single_holidays') ;
return $self;
@@ -462,7 +461,7 @@ UPDATE special_holidays SET title = ?, description = ?
$self->{'exception_holidays'}->{"$options{year}/$options{month}/$options{day}"}{description} = $options{description};
# changed the 'single_holidays' table, lets force/reset its cache
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
$cache->clear_from_cache( 'single_holidays') ;
return $self;
@@ -542,7 +541,7 @@ sub delete_holiday {
}
# changed the 'single_holidays' table, lets force/reset its cache
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
$cache->clear_from_cache( 'single_holidays') ;
return $self;
@@ -572,7 +571,7 @@ sub delete_holiday_range {
$sth->execute($self->{branchcode}, $options{day}, $options{month}, $options{year});
# changed the 'single_holidays' table, lets force/reset its cache
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
$cache->clear_from_cache( 'single_holidays') ;
}
@@ -625,7 +624,7 @@ sub delete_exception_holiday_range {
$sth->execute($self->{branchcode}, $options{day}, $options{month}, $options{year});
# changed the 'single_holidays' table, lets force/reset its cache
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
$cache->clear_from_cache( 'single_holidays') ;
}
diff --git a/C4/Context.pm b/C4/Context.pm
index 63a71d6..486266d 100644
--- a/C4/Context.pm
+++ b/C4/Context.pm
@@ -18,7 +18,7 @@ package C4::Context;
use strict;
use warnings;
-use vars qw($AUTOLOAD $context @context_stack $servers $memcached $ismemcached);
+use vars qw($AUTOLOAD $context @context_stack $memcached_servers);
BEGIN {
if ($ENV{'HTTP_USER_AGENT'}) {
require CGI::Carp;
@@ -88,20 +88,9 @@ BEGIN {
} # 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,
- expire_time => 600,
- namespace => $ENV{'MEMCACHED_NAMESPACE'} || 'koha'
- });
- # Verify memcached available (set a variable and test the output)
- $ismemcached = $memcached->set('ismemcached','1');
- }
+ $memcached_servers = $ENV{'MEMCACHED_SERVERS'};
+ # Load required libraries and create the memcached object
+ require Cache::Memcached if $memcached_servers;
}
@@ -219,29 +208,57 @@ sub current {
return $context;
}
-=head2 ismemcached
+sub _new_memcached {
+ my $namespace = shift or die "No memcached namespace";
+
+ return unless $memcached_servers;
+ return Cache::Memcached->new({
+ servers => [ $memcached_servers ],
+ debug => 0,
+ compress_threshold => 10_000,
+ expire_time => 600,
+ namespace => $namespace || $ENV{'MEMCACHED_NAMESPACE'} || 'koha'
+ });
+}
+# Verify memcached available (test the output)
+sub _ping_memcached {
+ my $memcached = shift or croak "No memcached";
-Returns the value of the $ismemcached variable (0/1)
+ return $memcached->set('ismemcached','1');
+}
+
+=head2 cache
+
+Returns the cache object or undef
=cut
-sub ismemcached {
- return $ismemcached;
+sub cache {
+ my $self = shift;
+ $self = $context unless ref ($self);
+
+ return $self->{cache};
}
=head2 memcached
-If $ismemcached is true, returns the $memcache variable.
-Returns undef otherwise
+Returns the memcached object or undef
+
+=head2 ismemcached
=cut
sub memcached {
- if ($ismemcached) {
- return $memcached;
- } else {
- return;
- }
+ my $self = shift;
+ $self = $context unless ref ($self);
+
+ my $memcached = $self->{memcached} or return;
+ return _ping_memcached($memcached) ? $memcached : undef;
+}
+
+sub ismemcached {
+ my $self = shift;
+ return $self->memcached;
}
sub db_driver {
@@ -285,10 +302,14 @@ sub import {
# default context already exists?
return if $context;
- if ($ismemcached) {
+ return if $config_file && $config_file eq ":no_config";
+
+ my $memcached = _new_memcached($ENV{'MEMCACHED_NAMESPACE'} || 'koha');
+ if ($memcached) {
# retrieve from memcached
- if (my $self = $memcached->get('kohaconf')) {
- $context = $self;
+ if ($context = $memcached->get('kohaconf')) {
+ $context->{memcached} = $memcached;
+ $context->{cache} = Koha::Cache->new({namespace => $context->{namespace}});
return;
}
}
@@ -315,15 +336,12 @@ sub import {
}
# no ? so load it!
- return if $config_file && $config_file eq ":no_config";
- my $new_ctx = __PACKAGE__->new($config_file);
- return unless $new_ctx;
-
- # if successfully loaded, use it by default
- $context = $new_ctx;
-
- if ($ismemcached) {
- $memcached->set('kohaconf',$new_ctx);
+ $context = $pkg->_new($config_file) or return;
+ if ( $memcached && _ping_memcached($memcached) ) {
+ $memcached->set('kohaconf',$context);
+ # Canot serialize cache objects
+ $context->{memcached} = $memcached;
+ $context->{cache} = Koha::Cache->new({namespace => $context->{namespace}});
}
}
@@ -366,6 +384,21 @@ sub new {
my $conf_fname = shift or croak "No conf";
my $namespace = shift;
+ my $self = $class->_new($conf_fname, $namespace);
+
+ if ($memcached_servers) {
+ $self->{memcached} = _new_memcached($namespace);
+ }
+ $self->{cache} = Koha::Cache->new({namespace => $namespace});
+
+ return $self;
+}
+
+sub _new {
+ my $class = shift;
+ my $conf_fname = shift or croak "No conf";
+ my $namespace = shift;
+
my $self = XMLin(
$conf_fname,
keyattr => ['id'],
@@ -378,7 +411,6 @@ sub new {
$self->{config_file} = $conf_fname;
$self->{namespace} = $namespace;
$self->{use_syspref_cache} = 1;
- $self->{syspref_cache} = Koha::Cache->new({namespace => $namespace});
$self->{"Zconn"} = undef; # Zebra Connections
$self->{"marcfromkohafield"} = undef; # the hash with relations between koha table fields and MARC field/subfield
@@ -559,7 +591,7 @@ sub preference {
if defined $ENV{"OVERRIDE_SYSPREF_$var"};
my $cached_var = $self->{use_syspref_cache}
- ? $self->{syspref_cache}->get_from_cache("syspref_$var")
+ ? $self->cache->get_from_cache("syspref_$var")
: undef;
return $cached_var if defined $cached_var;
@@ -568,7 +600,8 @@ sub preference {
my $value = $syspref ? $syspref->value() : undef;
if ( $self->{use_syspref_cache} ) {
- $self->{syspref_cache}->set_in_cache("syspref_$var", $value);
+ $self->cache->set_in_cache("syspref_$var", $value);
+ $self->{sysprefs}{$var} = $value if $self;
}
return $value;
}
@@ -609,8 +642,8 @@ used with Plack and other persistent environments.
sub disable_syspref_cache {
my ($self) = @_;
$self = $context unless ref $self;
- $self->{use_syspref_cache} = 0;
$self->clear_syspref_cache();
+ $self->{use_syspref_cache} = 0;
}
=head2 clear_syspref_cache
@@ -627,7 +660,7 @@ sub clear_syspref_cache {
my ($self) = @_;
$self = $context unless ref $self;
return unless $self->{use_syspref_cache};
- $self->{syspref_cache}->flush_all;
+ $self->cache->flush_all;
}
=head2 set_preference
@@ -680,7 +713,7 @@ sub set_preference {
}
if ( $self->{use_syspref_cache} ) {
- $self->{syspref_cache}->set_in_cache( "syspref_$variable", $value );
+ $self->cache->set_in_cache( "syspref_$variable", $value );
}
return $syspref;
@@ -702,7 +735,7 @@ sub delete_preference {
if ( Koha::Config::SysPrefs->find( $var )->delete ) {
if ( $self->{use_syspref_cache} ) {
- $self->{syspref_cache}->clear_from_cache("syspref_$var");
+ $self->cache->clear_from_cache("syspref_$var");
}
return 1;
diff --git a/C4/External/OverDrive.pm b/C4/External/OverDrive.pm
index 12135c5..0e71707 100644
--- a/C4/External/OverDrive.pm
+++ b/C4/External/OverDrive.pm
@@ -22,7 +22,7 @@ use warnings;
use Koha;
use JSON;
-use Koha::Cache;
+use C4::Context;
use HTTP::Request;
use HTTP::Request::Common;
use LWP::Authen::Basic;
@@ -97,9 +97,7 @@ sub GetOverDriveToken {
return unless ( $key && $secret ) ;
- my $cache;
-
- eval { $cache = Koha::Cache->get_instance() };
+ my $cache = C4::Context->cache;
my $token;
$cache and $token = $cache->get_from_cache( "overdrive_token" ) and return $token;
diff --git a/C4/Koha.pm b/C4/Koha.pm
index 7fe07f1..3a67e7f 100644
--- a/C4/Koha.pm
+++ b/C4/Koha.pm
@@ -25,7 +25,6 @@ use strict;
use C4::Context;
use C4::Branch; # Can be removed?
-use Koha::Cache;
use Koha::DateUtils qw(dt_from_string);
use Koha::Libraries;
use DateTime::Format::MySQL;
@@ -1017,7 +1016,7 @@ sub GetAuthorisedValues {
C4::Context->userenv ? C4::Context->userenv->{"branch"} : "";
my $cache_key =
"AuthorisedValues-$category-$opac-$branch_limit";
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
my $result = $cache->get_from_cache($cache_key);
return $result if $result;
diff --git a/C4/Utils/DataTables/ColumnsSettings.pm b/C4/Utils/DataTables/ColumnsSettings.pm
index a107886..31068b4 100644
--- a/C4/Utils/DataTables/ColumnsSettings.pm
+++ b/C4/Utils/DataTables/ColumnsSettings.pm
@@ -5,11 +5,10 @@ use List::Util qw( first );
use YAML;
use C4::Context;
use Koha::Database;
-use Koha::Cache;
sub get_yaml {
my $yml_path = C4::Context->config('intranetdir') . '/admin/columns_settings.yml';
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
my $yaml = $cache->get_from_cache('ColumnsSettingsYaml');
unless ($yaml) {
diff --git a/Koha/Cache.pm b/Koha/Cache.pm
index a403836..5c8c9e4 100644
--- a/Koha/Cache.pm
+++ b/Koha/Cache.pm
@@ -49,23 +49,6 @@ __PACKAGE__->mk_ro_accessors(
our %L1_cache;
-=head2 get_instance
-
- my $cache = Koha::Cache->get_instance();
-
-This gets a shared instance of the cache, set up in a very default way. This is
-the recommended way to fetch a cache object. If possible, it'll be
-persistent across multiple instances.
-
-=cut
-
-our $singleton_cache;
-sub get_instance {
- my ($class) = @_;
- $singleton_cache = $class->new() unless $singleton_cache;
- return $singleton_cache;
-}
-
=head2 new
Create a new Koha::Cache object. This is required for all cache-related functionality.
diff --git a/Koha/Calendar.pm b/Koha/Calendar.pm
index 7095aca..7d15d06 100644
--- a/Koha/Calendar.pm
+++ b/Koha/Calendar.pm
@@ -7,7 +7,6 @@ use DateTime;
use DateTime::Set;
use DateTime::Duration;
use C4::Context;
-use Koha::Cache;
use Carp;
sub new {
@@ -57,7 +56,7 @@ sub _init {
# lists breaks persistance engines. As of 2013-12-10, the RM
# is allowing this with the expectation that prior to release of
# 3.16, bug 8089 will be fixed and we can switch the caching over
-# to Koha::Cache.
+# to external cache
our $exception_holidays;
@@ -92,7 +91,7 @@ sub exception_holidays {
sub single_holidays {
my ( $self, $date ) = @_;
my $branchcode = $self->{branchcode};
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
my $single_holidays = $cache->get_from_cache('single_holidays');
# $single_holidays looks like:
diff --git a/Koha/Handler/Plack.pm b/Koha/Handler/Plack.pm
index af3f6cb..bce66ac 100644
--- a/Koha/Handler/Plack.pm
+++ b/Koha/Handler/Plack.pm
@@ -69,6 +69,7 @@ use Plack::App::URLMap;
hostname => 'koha1.com',
app => $app1,
context => $context1,
+ shared_context => 1
},
{
hostname => ['koha2.com', 'www.koha2.com'],
@@ -78,13 +79,16 @@ use Plack::App::URLMap;
...
C<hostname> is mandatory.
+ If C<shared_context> is set to true, some Context properties will be preserved across
+ forked processes. Useful if both OPAC and Intranet apps are served here, so no restart
+ is needed when Context cached properties cnamge values. Needs memcached.
koha.psgi:
use Plack::Builder;
use Plack::App::CGIBin;
- use C4::Context;
+ use C4::Context ":no_config";
my $opac_app = builder {
enable "Plack::Middleware::Static",
@@ -137,6 +141,8 @@ use Plack::App::URLMap;
=cut
+# We cannot store whole Context object, may contain non-serializable things
+my @CONTEXT_SHARED_PROPERTIES = qw(sysprefs);
sub app_per_host {
my $class = shift;
my $sites = shift or die "No sites spec";
@@ -148,12 +154,43 @@ sub app_per_host {
my $app = $site_params->{app} or croak "No app";
my $context = $site_params->{context} or croak "No Koha Context";
+ my $shared_context = $site_params->{shared_context};
+ my $cache = $context->memcached;
+ if ($shared_context) {
+ if ($cache) {
+ foreach (@CONTEXT_SHARED_PROPERTIES) {
+ # Clean slate
+ $cache->delete($_);
+ }
+ }
+ else {
+ warn "shared_context works only with memcached";
+ }
+ }
foreach my $host (@$hosts) {
$map->map("http://$host/" => sub {
my $env = shift;
- return $context->run_within_context(sub { $app->($env) });
+ # may have stopped meanwhile or whatever
+ my $cache = $context->memcached;
+ if ($shared_context && $cache) {
+ foreach (@CONTEXT_SHARED_PROPERTIES) {
+ if (my $shared = $cache->get($_)) {
+ $context->{$_} = $shared;
+ }
+ }
+ }
+
+ my $ret = $context->run_within_context(sub { $app->($env) });
+
+ if ($shared_context && $cache) {
+ foreach (@CONTEXT_SHARED_PROPERTIES) {
+ $cache->set($_, $context->{$_});
+ }
+ }
+
+ $ret;
});
}
}
diff --git a/Koha/Handler/Plack/CGI.pm b/Koha/Handler/Plack/CGI.pm
index 36c6907..9892562 100644
--- a/Koha/Handler/Plack/CGI.pm
+++ b/Koha/Handler/Plack/CGI.pm
@@ -73,7 +73,7 @@ use Plack::App::CGIBin;
use parent "Koha::Handler::Plack";
-use C4::Context;
+use C4::Context ":no_config";
=head1 CLASS METHODS
diff --git a/Koha/Template/Plugin/Cache.pm b/Koha/Template/Plugin/Cache.pm
index dbb1c82..085f977 100644
--- a/Koha/Template/Plugin/Cache.pm
+++ b/Koha/Template/Plugin/Cache.pm
@@ -34,8 +34,7 @@ sub new {
$cache = delete $params->{cache};
}
else {
- require Koha::Cache;
- $cache = Koha::Cache->get_instance();
+ $cache = $context->cache;
}
my $self = bless {
CACHE => $cache,
diff --git a/admin/biblio_framework.pl b/admin/biblio_framework.pl
index 79a0db1..79f7060 100755
--- a/admin/biblio_framework.pl
+++ b/admin/biblio_framework.pl
@@ -26,12 +26,11 @@ use C4::Output;
use Koha::Biblios;
use Koha::BiblioFramework;
use Koha::BiblioFrameworks;
-use Koha::Cache;
my $input = new CGI;
my $frameworkcode = $input->param('frameworkcode') || q||;
my $op = $input->param('op') || q|list|;
-my $cache = Koha::Cache->get_instance();
+my $cache = C4::Context->cache;
my @messages;
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
diff --git a/admin/koha2marclinks.pl b/admin/koha2marclinks.pl
index 9ccca37..68f1e55 100755
--- a/admin/koha2marclinks.pl
+++ b/admin/koha2marclinks.pl
@@ -59,7 +59,7 @@ else {
}
my $dbh = C4::Context->dbh;
-my $cache = Koha::Cache->get_instance();
+my $cache = C4::Context->cache;
################## ADD_FORM ##################################
# called by default. Used to create form to add or modify a record
diff --git a/admin/marc_subfields_structure.pl b/admin/marc_subfields_structure.pl
index 979d7ec..8c1c7ab8 100755
--- a/admin/marc_subfields_structure.pl
+++ b/admin/marc_subfields_structure.pl
@@ -77,7 +77,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
debug => 1,
}
);
-my $cache = Koha::Cache->get_instance();
+my $cache = C4::Context->cache;
my $op = $input->param('op') || "";
$tagfield =~ s/\,//g;
diff --git a/admin/marctagstructure.pl b/admin/marctagstructure.pl
index 7728687..26406f4 100755
--- a/admin/marctagstructure.pl
+++ b/admin/marctagstructure.pl
@@ -25,9 +25,6 @@ use C4::Auth;
use C4::Koha;
use C4::Context;
use C4::Output;
-use C4::Context;
-
-use Koha::Cache;
# retrieve parameters
my $input = new CGI;
@@ -46,7 +43,7 @@ my $pagesize = 20;
my $script_name = "/cgi-bin/koha/admin/marctagstructure.pl";
my $dbh = C4::Context->dbh;
-my $cache = Koha::Cache->get_instance();
+my $cache = C4::Context->cache;
# open template
my ($template, $loggedinuser, $cookie)
diff --git a/opac/svc/report b/opac/svc/report
index bfc84e5..98d2aeb 100755
--- a/opac/svc/report
+++ b/opac/svc/report
@@ -23,12 +23,11 @@
use Modern::Perl;
+use C4::Context;
use C4::Reports::Guided;
use JSON;
use CGI qw ( -utf8 );
-use Koha::Cache;
-
my $query = CGI->new();
my $report_id = $query->param('id');
my $report_name = $query->param('name');
@@ -41,7 +40,7 @@ die "Sorry this report is not public\n" unless $report_rec->{public};
my @sql_params = $query->param('sql_params');
-my $cache = Koha::Cache->get_instance();
+my $cache = C4::Context->cache;
my $cache_active = $cache->is_cache_active;
my ($cache_key, $json_text);
if ($cache_active) {
diff --git a/svc/report b/svc/report
index da1b9b3..d380090 100755
--- a/svc/report
+++ b/svc/report
@@ -25,7 +25,7 @@ use C4::Reports::Guided;
use JSON;
use CGI qw ( -utf8 );
-use Koha::Cache;
+use C4::Context;
my $query = CGI->new();
@@ -48,7 +48,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
}
);
-my $cache = Koha::Cache->get_instance();
+my $cache = C4::Context->cache;
my $cache_active = $cache->is_cache_active;
my ($cache_key, $json_text);
if ($cache_active) {
diff --git a/t/Cache.t b/t/Cache.t
index 5a5c248..fc4b495 100644
--- a/t/Cache.t
+++ b/t/Cache.t
@@ -31,7 +31,7 @@ SKIP: {
# Set a special namespace for testing, to avoid breaking
# if test is run with a different user than Apache's.
$ENV{ MEMCACHED_NAMESPACE } = 'unit_tests';
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
skip "Cache not enabled", 33
unless ( $cache->is_cache_active() && defined $cache );
@@ -213,7 +213,7 @@ SKIP: {
END {
SKIP: {
$ENV{ MEMCACHED_NAMESPACE } = 'unit_tests';
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
skip "Cache not enabled", 1
unless ( $cache->is_cache_active() );
is( $destructorcount, 1, 'Destructor run exactly once' );
diff --git a/t/Calendar.t b/t/Calendar.t
index 37f11f4..720d5c0 100755
--- a/t/Calendar.t
+++ b/t/Calendar.t
@@ -22,7 +22,7 @@ use Test::MockModule;
use DateTime;
use DateTime::Duration;
-use Koha::Cache;
+use C4::Context;
use Koha::DateUtils;
use Module::Load::Conditional qw/check_install/;
@@ -88,7 +88,7 @@ fixtures_ok [
],
], "add fixtures";
-my $cache = Koha::Cache->get_instance();
+my $cache = C4::Context->cache;
$cache->clear_from_cache( 'single_holidays') ;
# 'MPL' branch is arbitrary, is not used at all but is needed for initialization
diff --git a/t/Context.t b/t/Context.t
index e2c1825..d737509 100755
--- a/t/Context.t
+++ b/t/Context.t
@@ -2,7 +2,7 @@
use Modern::Perl;
use DBI;
-use Test::More tests => 26;
+use Test::More tests => 29;
use Test::MockModule;
BEGIN {
@@ -62,3 +62,29 @@ is(C4::Context->interface, 'opac', 'interface still opac');
#Bug 14751
is( C4::Context->interface( 'SiP' ), 'sip', 'interface SiP' );
is( C4::Context->interface( 'COMMANDLINE' ), 'commandline', 'interface commandline uc' );
+
+my $DUMMY_KOHA_CONF = "<yazgfs><config><kohasite>TEST</kohasite></config></yazgfs>";
+my $ctx_a = C4::Context->new($DUMMY_KOHA_CONF, "a");
+my $ctx_b = C4::Context->new($DUMMY_KOHA_CONF, "b");
+my $cache_key = "test_C4::Context";
+
+SKIP: {
+ skip "No cache", 3 unless $ctx_a->cache->is_cache_active && $ctx_b->cache->is_cache_active;
+
+ # Light warm up
+ C4::Context->cache->set_in_cache($cache_key, 'c');
+ $ctx_a->cache->set_in_cache($cache_key, 'a');
+ $ctx_b->cache->set_in_cache($cache_key, 'b');
+ is(C4::Context->cache->get_from_cache($cache_key), 'c', "Correct default cache value");
+ is($ctx_a->cache->get_from_cache($cache_key), 'a', "Correct cache 'a' value");
+ is($ctx_b->cache->get_from_cache($cache_key), 'b', "Correct cache 'b' value");
+
+ # A bit more extravagant
+ # Cannot run atm, fails due to no database in config
+# $ctx_a->run_within_context( sub {
+# $ctx_b->cache->set_in_cache($cache_key, 'bb');
+# C4::Context->cache->set_in_cache($cache_key, 'aa');
+# } );
+# is($ctx_a->cache->get_from_cache($cache_key), 'aa', "Correct cache 'a' value");
+# is($ctx_b->cache->get_from_cache($cache_key), 'bb', "Correct cache 'b' value");
+}
diff --git a/t/Koha_Template_Plugin_Cache.t b/t/Koha_Template_Plugin_Cache.t
index da20f61..15ee048 100644
--- a/t/Koha_Template_Plugin_Cache.t
+++ b/t/Koha_Template_Plugin_Cache.t
@@ -1,6 +1,8 @@
use Modern::Perl;
use Test::More tests => 2;
+use C4::Context;
+
use_ok('Koha::Template::Plugin::Cache');
-ok(my $cache = Koha::Template::Plugin::Cache->new());
+ok(my $cache = Koha::Template::Plugin::Cache->new(C4::Context->current));
diff --git a/t/db_dependent/Context.t b/t/db_dependent/Context.t
index c3f6066..b35f83d 100755
--- a/t/db_dependent/Context.t
+++ b/t/db_dependent/Context.t
@@ -12,14 +12,8 @@ use Koha::Database;
BEGIN {
$debug = $ENV{DEBUG} || 0;
-
- # Note: The overall number of tests may vary by configuration.
- # First we need to check your environmental variables
- for (qw(KOHA_CONF PERL5LIB)) {
- ok( $ret = $ENV{$_}, "ENV{$_} = $ret" );
- }
- use_ok('C4::Context');
}
+use_ok('C4::Context');
ok($dbh = C4::Context->dbh(), 'Getting dbh from C4::Context');
diff --git a/t/db_dependent/Filter_MARC_ViewPolicy.t b/t/db_dependent/Filter_MARC_ViewPolicy.t
index ba446bc..a0123ec 100644
--- a/t/db_dependent/Filter_MARC_ViewPolicy.t
+++ b/t/db_dependent/Filter_MARC_ViewPolicy.t
@@ -71,7 +71,7 @@ sub run_hiding_tests {
$sth->execute($hidden_value);
- my $cache = Koha::Cache->get_instance();
+ my $cache = Koha::Cache->new();
$cache->flush_all(); # easy way to ensure DB is queried again.
my $processor = Koha::RecordProcessor->new(
diff --git a/tools/newHolidays.pl b/tools/newHolidays.pl
index eda4c1b..38f290c 100755
--- a/tools/newHolidays.pl
+++ b/tools/newHolidays.pl
@@ -10,7 +10,7 @@ use CGI qw ( -utf8 );
use C4::Auth;
use C4::Output;
-use Koha::Cache;
+use C4::Context;
use C4::Calendar;
use DateTime;
@@ -129,6 +129,6 @@ sub add_holiday {
}
}
# we updated the single_holidays table, so wipe its cache
- my $cache = Koha::Cache->get_instance();
+ my $cache = C4::Context->cache;
$cache->clear_from_cache( 'single_holidays') ;
}
--
2.5.0
More information about the Koha-patches
mailing list