From d57dedf1851cb110ebdfcf60ecd03c31aa2d5d89 Mon Sep 17 00:00:00 2001 From: Jacek Ablewicz Date: Wed, 14 Sep 2016 15:33:07 +0200 Subject: [PATCH] [SIGNED-OFF] Bug 16758 - Caching issues in scripts running in daemon mode As L1 cache does not have expiration mechanism, scripts running in daemon mode (rebuild_zebra.pl -daemon, sip server ?, ...) would not be aware of any possible changes in the data being cached in upstream L2 cache. This patch adds ->flush_L1_caches() call in rebuild_zebra.pl inside daemon mode loop. To test: 1) apply patch 2) ensure that rebuild_zebra.pl -daemon is still working properly, without any noticeable performance degradation 3) stop memcached daemon and try to run rebuild_zebra.pl -daemon again: there should be a warning emitted stating that the script is running in daemon mode but without recommended caching system Signed-off-by: Josef Moravec --- misc/migration_tools/rebuild_zebra.pl | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/misc/migration_tools/rebuild_zebra.pl b/misc/migration_tools/rebuild_zebra.pl index 3b2cb43..560490e 100755 --- a/misc/migration_tools/rebuild_zebra.pl +++ b/misc/migration_tools/rebuild_zebra.pl @@ -26,6 +26,7 @@ use C4::Biblio; use C4::AuthoritiesMarc; use C4::Items; use Koha::RecordProcessor; +use Koha::Caches; use XML::LibXML; use constant LOCK_FILENAME => 'rebuild..LCK'; @@ -62,6 +63,7 @@ my $run_user = (getpwuid($<))[0]; my $wait_for_lock = 0; my $use_flock; my $table = 'biblioitems'; +my $is_memcached = Koha::Caches->get_instance('syspref')->memcached_cache; my $verbose_logging = 0; my $zebraidx_log_opt = " -v none,fatal,warn "; @@ -128,6 +130,9 @@ if ($daemon_mode) { $msg .= "Please do '$0 --help' to see usage.\n"; die $msg; } + unless ($is_memcached) { + warn "Warning: script running in daemon mode, without recommended caching system (memcached).\n"; + } $authorities = 1; $biblios = 1; $process_zebraqueue = 1; @@ -237,7 +242,10 @@ if ($daemon_mode) { if (_flock($LockFH, LOCK_EX|LOCK_NB)) { eval { $dbh = C4::Context->dbh; - do_one_pass() if ( zebraqueue_not_empty() ); + if( zebraqueue_not_empty() ) { + Koha::Caches->flush_L1_caches() if $is_memcached; + do_one_pass(); + } }; if ($@ && $verbose_logging) { warn "Warning : $@\n"; -- 2.1.4