Bugzilla – Attachment 50703 Details for
Bug 15562
Make Koha more suitable for shared hosting with plack
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
bug_15562: Removed Koha::Cache->get_instance()
bug15562-Removed-KohaCache-getinstance.patch (text/plain), 27.17 KB, created by
Srdjan Jankovic
on 2016-04-26 03:55:17 UTC
(
hide
)
Description:
bug_15562: Removed Koha::Cache->get_instance()
Filename:
MIME Type:
Creator:
Srdjan Jankovic
Created:
2016-04-26 03:55:17 UTC
Size:
27.17 KB
patch
obsolete
>From bd5b36bebc7f5151352c82ab00a242494b90b581 Mon Sep 17 00:00:00 2001 >From: Srdjan <srdjan@catalyst.net.nz> >Date: Wed, 27 Jan 2016 16:57:18 +1300 >Subject: [PATCH] bug_15562: Removed Koha::Cache->get_instance() > >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
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 15562
:
47420
|
47421
|
47422
|
47838
|
47944
|
47945
|
47946
|
47947
|
49370
|
49371
|
49372
|
49373
|
49664
|
49665
|
49666
|
49667
|
49709
|
50702
|
50703
|
50713
|
50714
|
50715
|
50716
|
50870
|
51939
|
51940
|
53296
|
53297
|
55577
|
55578
|
60723
|
60724
|
60725
|
60726
|
66374
|
66375
|
66376
|
66377
|
76062