From 8ad45474324b672fb48d8b7af83a94184cd1b2f9 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Thu, 26 Oct 2017 09:04:59 -0400 Subject: [PATCH] Bug 18725: Prevent process_message_queue to send duplicate emails if message_queue is not writable. Last week, we had a database server whose disk filled, causing database writes to fail. This meant that messages in message_queue marked 'pending' were not marked as 'sent' when they were added to the postfix mail queue; messages were sent every 15 minutes (as specified in the cron job) until the disk space issues were cleared. I would suggest adding a token write to the start of process_message_queue.pl as a 'canary in the coal mine'. If the database write fails, process_message_queue should stop, because it's not safe to proceed sending emails that may not be marked 'sent'. Test Plan: 1) Apply this patch 2) Make the message_queue table unwriteable somehow 3) Run process_message_queue.pl 4) Script should die with error Signed-off-by: Mark Tompsett Signed-off-by: Marcel de Rooy Signed-off-by: Jonathan Druart --- C4/Letters.pm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/C4/Letters.pm b/C4/Letters.pm index e6cec80da7..59b7a25b79 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -36,6 +36,7 @@ use Koha::DateUtils; use Koha::SMS::Providers; use Koha::Email; +use Koha::Notice::Messages; use Koha::DateUtils qw( format_sqldatetime dt_from_string ); use Koha::Patrons; @@ -1063,6 +1064,11 @@ sub SendQueuedMessages { }; my $unsent_messages = _get_unsent_messages( $which_unsent_messages ); MESSAGE: foreach my $message ( @$unsent_messages ) { + my $message_object = Koha::Notice::Messages->find( $message->{message_id} ); + $message_object->status('processing'); + # If this fails the database is unwritable and we won't manage to send a message that continues to be marked 'pending' + return unless $message_object->store(); + # warn Data::Dumper->Dump( [ $message ], [ 'message' ] ); warn sprintf( 'sending %s message to patron: %s', $message->{'message_transport_type'}, -- 2.39.2