From b4ad5070472c0e0f61e4ed016cdd23f6b8bd2dc8 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 (cherry picked from commit a1e044094b2c29024dfe66b76c7bf2c619be0c7a) Signed-off-by: Fridolin Somers --- C4/Letters.pm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/C4/Letters.pm b/C4/Letters.pm index dd3ff29ce4..deddf10941 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 vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); @@ -1033,6 +1034,11 @@ sub SendQueuedMessages { my $unsent_messages = _get_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.5