Bug 15333: Use Koha::Cache to cache exception_holidays instead of a package variable
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Wed, 4 May 2016 19:35:39 +0000 (20:35 +0100)
committerJulian Maurice <julian.maurice@biblibre.com>
Thu, 9 Jun 2016 07:32:46 +0000 (09:32 +0200)
On the same way as bug 14522, we should use Koha::Cache to cache
exception_holidays.
It's not safe to use a package variable if running under Plack.

There is not test plan, just make sure the changes make sense.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Brendan Gallagher <brendan@bywatersolutions.com>
(cherry picked from commit cbd375fab76a89b75f3795c9ebafe434bf79c878)
Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>

C4/Calendar.pm
Koha/Calendar.pm

index 99b0c3a..c4da37b 100644 (file)
@@ -278,6 +278,7 @@ sub insert_single_holiday {
     # changed the 'single_holidays' table, lets force/reset its cache
     my $cache = Koha::Cache->get_instance();
     $cache->clear_from_cache( 'single_holidays') ;
+    $cache->clear_from_cache( 'exception_holidays') ;
 
     return $self;
 
@@ -322,6 +323,7 @@ sub insert_exception_holiday {
     # changed the 'single_holidays' table, lets force/reset its cache
     my $cache = Koha::Cache->get_instance();
     $cache->clear_from_cache( 'single_holidays') ;
+    $cache->clear_from_cache( 'exception_holidays') ;
 
     return $self;
 }
@@ -422,6 +424,7 @@ UPDATE special_holidays SET title = ?, description = ?
     # changed the 'single_holidays' table, lets force/reset its cache
     my $cache = Koha::Cache->get_instance();
     $cache->clear_from_cache( 'single_holidays') ;
+    $cache->clear_from_cache( 'exception_holidays') ;
 
     return $self;
 }
@@ -464,6 +467,7 @@ UPDATE special_holidays SET title = ?, description = ?
     # changed the 'single_holidays' table, lets force/reset its cache
     my $cache = Koha::Cache->get_instance();
     $cache->clear_from_cache( 'single_holidays') ;
+    $cache->clear_from_cache( 'exception_holidays') ;
 
     return $self;
 }
@@ -544,6 +548,7 @@ sub delete_holiday {
     # changed the 'single_holidays' table, lets force/reset its cache
     my $cache = Koha::Cache->get_instance();
     $cache->clear_from_cache( 'single_holidays') ;
+    $cache->clear_from_cache( 'exception_holidays') ;
 
     return $self;
 }
@@ -574,6 +579,7 @@ sub delete_holiday_range {
     # changed the 'single_holidays' table, lets force/reset its cache
     my $cache = Koha::Cache->get_instance();
     $cache->clear_from_cache( 'single_holidays') ;
+    $cache->clear_from_cache( 'exception_holidays') ;
 
 }
 
@@ -627,6 +633,7 @@ sub delete_exception_holiday_range {
     # changed the 'single_holidays' table, lets force/reset its cache
     my $cache = Koha::Cache->get_instance();
     $cache->clear_from_cache( 'single_holidays') ;
+    $cache->clear_from_cache( 'exception_holidays') ;
 }
 
 =head2 isHoliday
index 093a56e..f18d593 100644 (file)
@@ -52,23 +52,14 @@ sub _init {
     return;
 }
 
-
-# FIXME: use of package-level variables for caching the holiday
-# 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.
-
-our $exception_holidays;
-
 sub exception_holidays {
     my ( $self ) = @_;
     my $dbh = C4::Context->dbh;
     my $branch = $self->{branchcode};
-    if ( $exception_holidays ) {
-        $self->{exception_holidays} = $exception_holidays;
-        return $exception_holidays;
-    }
+    my $cache  = Koha::Cache->get_instance();
+    my $cached = $cache->get_from_cache('exception_holidays');
+    return $cached if $cached;
+
     my $exception_holidays_sth = $dbh->prepare(
 'SELECT day, month, year FROM special_holidays WHERE branchcode = ? AND isexception = 1'
     );
@@ -85,8 +76,8 @@ sub exception_holidays {
     }
     $self->{exception_holidays} =
       DateTime::Set->from_datetimes( dates => $dates );
-    $exception_holidays = $self->{exception_holidays};
-    return $exception_holidays;
+    $cache->set_in_cache( 'exception_holidays', $self->{exception_holidays} );
+    return $self->{exception_holidays};
 }
 
 sub single_holidays {