On Thu, Jan 03, 2019 at 02:57:34PM -0500, Viktor Dukhovni wrote:

> Postfix fragments the queue by (nexthop, recipient) rather
> than just the nexthop.  You're looking for a feature that ignores
> both the nexthop and the recipient aggregates all nexthops into a
> single unified transport-wide queue.  No code for that exists.

If you're willing run your own franken-postfix, hard coded to run
one queue per transport whenever the recipient limit > 1, you could
test the below.  I have no time to create a documented configurable
(mis)feature along these lines.

--- src/qmgr/qmgr_message.c
+++ src/qmgr/qmgr_message.c
@@ -1259,7 +1259,7 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message)
         * to decouple the per-destination recipient limit from the
         * per-destination concurrency.
         */
-       vstring_strcpy(queue_name, STR(reply.nexthop));
+       vstring_strcpy(queue_name, "global_queue");
        if (strcmp(transport->name, MAIL_SERVICE_ERROR) != 0
            && strcmp(transport->name, MAIL_SERVICE_RETRY) != 0
            && transport->recipient_limit == 1) {

Note that with this, connection failures to any single destination,
will throttle all destinations.  Since you in any case  want rate
delays, see the note about

    
http://www.postfix.org/postconf.5.html#transport_destination_concurrency_failed_cohort_limit

mentioned in:

    http://www.postfix.org/postconf.5.html#default_destination_rate_delay

Therefore:

    smtp_destination_rate_delay = 1s
    default_destination_concurrency_failed_cohort_limit = 10

And yet, this is all still a bad idea.

-- 
        Viktor.

Reply via email to