From e92f339ebeeb1000d1c5fa8ce32e63bb874fe9ad Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Thu, 26 Oct 2017 09:04:59 -0400 Subject: [PATCH] Bug 18725 - Process_message_queue sends 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 --- C4/Letters.pm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/C4/Letters.pm b/C4/Letters.pm index b76338e..4f7fdd1 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; @@ -1057,6 +1058,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.1.4