From a942e159e5c738072efa8fa8c4d7c76cc35a7db5 Mon Sep 17 00:00:00 2001 From: Mark Sapiro Date: Tue, 10 Apr 2018 20:34:48 -0700 Subject: Improve DELIVERY_RETRY_WAIT reimplementation. --- Mailman/Queue/OutgoingRunner.py | 8 ++++---- Mailman/Queue/RetryRunner.py | 7 +++++-- NEWS | 4 ++++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Mailman/Queue/OutgoingRunner.py b/Mailman/Queue/OutgoingRunner.py index 0a204e66..86d26808 100755 --- a/Mailman/Queue/OutgoingRunner.py +++ b/Mailman/Queue/OutgoingRunner.py @@ -1,4 +1,4 @@ -# Copyright (C) 2000-2017 by the Free Software Foundation, Inc. +# Copyright (C) 2000-2018 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -122,12 +122,12 @@ class OutgoingRunner(Runner, BounceMixin): # disposition? if now > deliver_until: return False - # We're going to retry, but not too soon. - deliver_after = now + mm_cfg.DELIVERY_RETRY_WAIT - msgdata['deliver_after'] = deliver_after else: # Keep trying to delivery this message for a while deliver_until = now + mm_cfg.DELIVERY_RETRY_PERIOD + # Don't retry delivery too soon. + deliver_after = now + mm_cfg.DELIVERY_RETRY_WAIT + msgdata['deliver_after'] = deliver_after msgdata['last_recip_count'] = len(recips) msgdata['deliver_until'] = deliver_until msgdata['recips'] = recips diff --git a/Mailman/Queue/RetryRunner.py b/Mailman/Queue/RetryRunner.py index 66244253..49aa484d 100644 --- a/Mailman/Queue/RetryRunner.py +++ b/Mailman/Queue/RetryRunner.py @@ -1,4 +1,4 @@ -# Copyright (C) 2003 by the Free Software Foundation, Inc. +# Copyright (C) 2003-2018 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -37,7 +37,10 @@ class RetryRunner(Runner): self.__outq = Switchboard(mm_cfg.OUTQUEUE_DIR) def _dispose(self, mlist, msg, msgdata): - # Move it to the out queue for another retry + # Move it to the out queue for another retry if it's time. + deliver_after = msgdata.get('deliver_after', 0) + if time.time() < deliver_after: + return True self.__outq.enqueue(msg, msgdata) return False diff --git a/NEWS b/NEWS index e9c39c9b..e2f64e12 100644 --- a/NEWS +++ b/NEWS @@ -18,6 +18,10 @@ Here is a history of user visible changes to Mailman. Bug fixes and other patches + - The reimplementation of DELIVERY_RETRY_WAIT in 2.1.26 could cause extra + dequeueing and requeueing in the out queue by OutgoingRunner. This is + fixed. (LP: #1762871) + - A Python 2.7 dependency introduced in the ToDigests handler in Mailman 2.1.24 has been removed. (LP: #1755317) -- cgit v1.2.3