Bug 23571: Prevent concurrent execution of fines.pl
authorTomas Cohen Arazi <tomascohen@theke.io>
Sun, 12 Apr 2020 13:27:57 +0000 (10:27 -0300)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Tue, 14 Apr 2020 15:59:01 +0000 (16:59 +0100)
This patch introduces locking in fines.pl. It does so by leveraging on
bug 25109, which introduces a generic locking implementation on
Koha::Script.

The introduced changes:
1. Try to get the lock
2.a. If success, normal execution happens
2.b. If rejected, cronlogaction is called with a meaningful message and
  a normal exit happens, so we don't flood the logs in vain. --verbose
  will make the script print the same message on STDERR, as already is
  the case with this script

To test:
1. Apply this patch
2. In two separate consoles run:
   $ kshell
  k$ perl misc/cronjobs/fines.pl --verbose
SUCCESS => The first one runs normally, the second one exists really fast
  and prints a message about the lock.
3. Sign off :-D

Sponsored-by: Orex Digital
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

misc/cronjobs/fines.pl

index a5b920a..10287bb 100755 (executable)
@@ -36,6 +36,7 @@ use C4::Overdues;
 use Getopt::Long;
 use Carp;
 use File::Spec;
+use Try::Tiny;
 
 use Koha::Calendar;
 use Koha::DateUtils;
@@ -76,6 +77,19 @@ if ($help) {
     exit;
 }
 
+my $script_handler = Koha::Script->new({ script => $0 });
+
+try {
+    $script_handler->lock_exec;
+}
+catch {
+    my $message = "Skipping execution of $0 ($_)";
+    print STDERR $message
+        if $verbose;
+    cronlogaction( $message );
+    exit;
+};
+
 cronlogaction();
 
 my @borrower_fields =