From 911f064a5acb3df2aa87ad60ec8ef5497a1da1c3 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 14 Nov 2019 10:50:24 +0100 Subject: [PATCH] Bug 23640: Flushing L1 on every SIP connection This patch flushes the L1 cache on each SIP connection (ie every invocation of process_request). This means each SIP connection will fetch values from the L2 cache (ie memcached) and persist the L1 cache (in Perl memory cache) only until a new SIP connection comes in. Without this patch, the L1 cache persists for the length of the server process, which means the L1 cache will become stale very quickly, which can lead to unexpected behaviour. Test plan: 1. Enable IssueLog 2. Start SIP server 2a. change to Koha git directory 2b. koha-shell kohadev 2c. perl C4/SIP/SIPServer.pm /etc/koha/sites/kohadev/SIPconfig.xml 3. Issue book via SIP perl misc/sip_cli_emulator.pl -a 127.0.0.1 -p 6001 -su term1 -sp term1 -l CPL --patron 1 --item 3999900000001 -m checkout 4. Check action_logs for "CIRCULATION ISSUE " line http://localhost:8081/cgi-bin/koha/tools/viewlog.pl 5. Disable IssueLog 6. Check in the book and then check it out again perl misc/sip_cli_emulator.pl -a 127.0.0.1 -p 6001 -su term1 -sp term1 -l CPL --patron 1 --item 3999900000001 -m checkin perl misc/sip_cli_emulator.pl -a 127.0.0.1 -p 6001 -su term1 -sp term1 -l CPL --patron 1 --item 3999900000001 -m checkout 7. Check action_logs for "CIRCULATION ISSUE " line http://localhost:8081/cgi-bin/koha/tools/viewlog.pl 8. Note results Without the patch, you'll see a 2nd checkout. With the patch, you won't see the 2nd checkout. (Note: After applying the patch, you have to restart the SIP server.) Signed-off-by: David Cook --- C4/SIP/SIPServer.pm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/C4/SIP/SIPServer.pm b/C4/SIP/SIPServer.pm index 63880c9eb7..81682dc6cb 100755 --- a/C4/SIP/SIPServer.pm +++ b/C4/SIP/SIPServer.pm @@ -16,6 +16,7 @@ use C4::SIP::Sip::Constants qw(:all); use C4::SIP::Sip::Configuration; use C4::SIP::Sip::Checksum qw(checksum verify_cksum); use C4::SIP::Sip::MsgType qw( handle login_core ); +use Koha::Caches; use base qw(Net::Server::PreFork); @@ -91,6 +92,9 @@ sub process_request { $self->{config} = $config; + # Flushing L1 to make sure the request will be processed using the correct data + Koha::Caches->flush_L1_caches(); + my $sockname = getsockname(STDIN); # Check if socket connection is IPv6 before resolving address -- 2.11.0