Bug 18364: [Follow-up] Also add an environment variable to prevent locking
authorMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Thu, 20 Apr 2017 10:52:47 +0000 (12:52 +0200)
committerJulian Maurice <julian.maurice@biblibre.com>
Wed, 10 May 2017 09:24:22 +0000 (11:24 +0200)
The test in SendCirculationAlert is extended by adding an env var
called KOHA_NO_TABLE_LOCKS. If this var is set to a true value,
the table locking is skipped too.

This is useful when running a test without prove. The variable could be
set in a shell profile.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Mason James <mtj@kohaaloha.com>
(cherry picked from commit 15751085e950b38df235d11e958259e15ef48f37)
Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>

C4/Circulation.pm

index 47009a6..2f0d351 100644 (file)
@@ -3374,7 +3374,7 @@ sub SendCirculationAlert {
     # LOCK TABLES is not transaction-safe and implicitly commits any active transaction before attempting to lock the tables.
     # If the LOCK/UNLOCK statements are executed from tests, the current transaction will be committed.
     # To avoid that we need to guess if this code is execute from tests or not (yes it is a bit hacky)
-    my $called_from_tests = exists $ENV{_} and $ENV{_} =~ m|prove|;
+    my $do_not_lock = ( exists $ENV{_} && $ENV{_} =~ m|prove| ) || $ENV{KOHA_NO_TABLE_LOCKS};
 
     for my $mtt (@transports) {
         my $letter =  C4::Letters::GetPreparedLetter (
@@ -3393,17 +3393,17 @@ sub SendCirculationAlert {
         ) or next;
 
         $schema->storage->txn_begin;
-        C4::Context->dbh->do(q|LOCK TABLE message_queue READ|) unless $called_from_tests;
-        C4::Context->dbh->do(q|LOCK TABLE message_queue WRITE|) unless $called_from_tests;
+        C4::Context->dbh->do(q|LOCK TABLE message_queue READ|) unless $do_not_lock;
+        C4::Context->dbh->do(q|LOCK TABLE message_queue WRITE|) unless $do_not_lock;
         my $message = C4::Message->find_last_message($borrower, $type, $mtt);
         unless ( $message ) {
-            C4::Context->dbh->do(q|UNLOCK TABLES|) unless $called_from_tests;
+            C4::Context->dbh->do(q|UNLOCK TABLES|) unless $do_not_lock;
             C4::Message->enqueue($letter, $borrower, $mtt);
         } else {
             $message->append($letter);
             $message->update;
         }
-        C4::Context->dbh->do(q|UNLOCK TABLES|) unless $called_from_tests;
+        C4::Context->dbh->do(q|UNLOCK TABLES|) unless $do_not_lock;
         $schema->storage->txn_commit;
     }