mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-30 13:48:06 +00:00
postfix-2.5.0
This commit is contained in:
committed by
Viktor Dukhovni
parent
b5f31bd3e8
commit
f15b7e2082
@@ -13870,7 +13870,7 @@ Apologies for any names omitted.
|
|||||||
20071202
|
20071202
|
||||||
|
|
||||||
Feature: output rate control. For example, specify
|
Feature: output rate control. For example, specify
|
||||||
"smtp_delivery_rate_delay = 5m" to insert a five-minute
|
"smtp_destination_rate_delay = 5m" to insert a five-minute
|
||||||
delay between deliveries. This was an opportunity to define
|
delay between deliveries. This was an opportunity to define
|
||||||
the mutually exclusive states that a queue can have, and
|
the mutually exclusive states that a queue can have, and
|
||||||
to detect invalid transitions. This will make adding new
|
to detect invalid transitions. This will make adding new
|
||||||
@@ -14270,3 +14270,10 @@ Apologies for any names omitted.
|
|||||||
|
|
||||||
Bugfix (introduced 20080112): missing #ifdef for the SASL
|
Bugfix (introduced 20080112): missing #ifdef for the SASL
|
||||||
login failure cache. File: smtp/smtp_sasl_auth_cache.h.
|
login failure cache. File: smtp/smtp_sasl_auth_cache.h.
|
||||||
|
|
||||||
|
20080123
|
||||||
|
|
||||||
|
Name fix: renamed the mumble_delivery_rate_delay parameter
|
||||||
|
to mumble_destination_rate_delay, because it really is a
|
||||||
|
per-destination feature. With this change we keep the option
|
||||||
|
of implementing a future per-transport rate delay.
|
||||||
|
@@ -290,54 +290,121 @@ If one finds oneself needing to deliver a high volume of mail to a destination
|
|||||||
that exhibits frequent brief bursts of errors and connection caching does not
|
that exhibits frequent brief bursts of errors and connection caching does not
|
||||||
solve the problem, there is a subtle workaround.
|
solve the problem, there is a subtle workaround.
|
||||||
|
|
||||||
* In master.cf set up a dedicated clone of the "smtp" transport for the
|
* Postfix version 2.5 and later:
|
||||||
destination in question.
|
|
||||||
|
|
||||||
* In master.cf configure a reasonable process limit for the transport (a
|
o In master.cf set up a dedicated clone of the "smtp" transport for the
|
||||||
number in the 10-20 range is typical).
|
destination in question. In the example below we will call it
|
||||||
|
"fragile".
|
||||||
|
|
||||||
* IMPORTANT!!! In main.cf configure a very large initial and destination
|
o In master.cf configure a reasonable process limit for the cloned smtp
|
||||||
concurrency limit for this transport (say 2000).
|
transport (a number in the 10-20 range is typical).
|
||||||
|
|
||||||
/etc/postfix/main.cf:
|
o IMPORTANT!!! In main.cf configure a large per-destination pseudo-cohort
|
||||||
initial_destination_concurrency = 2000
|
failure limit for the cloned smtp transport.
|
||||||
transportname_destination_concurrency_limit = 2000
|
|
||||||
|
|
||||||
Where transportname is the name of the master.cf entry in question.
|
/etc/postfix/main.cf:
|
||||||
|
transport_maps = hash:/etc/postfix/transport
|
||||||
|
fragile_destination_concurrency_failed_cohort_limit = 100
|
||||||
|
fragile_destination_concurrency_limit = 20
|
||||||
|
|
||||||
The effect of this surprising configuration is that up to 2000 consecutive
|
/etc/postfix/transport:
|
||||||
errors are tolerated without marking the destination dead, while the total
|
example.com fragile:
|
||||||
concurrency remains reasonable (10-20 processes). This trick is only for a very
|
|
||||||
specialized situation: high volume delivery into a channel with multi-error
|
/etc/postfix/master.cf:
|
||||||
bursts that is capable of high throughput, but is repeatedly throttled by the
|
# service type private unpriv chroot wakeup maxproc command
|
||||||
bursts of errors.
|
fragile unix - - n - 20 smtp
|
||||||
|
|
||||||
|
See also the documentation for
|
||||||
|
default_destination_concurrency_failed_cohort_limit and
|
||||||
|
default_destination_concurrency_limit.
|
||||||
|
|
||||||
|
* Earlier Postfix versions:
|
||||||
|
|
||||||
|
o In master.cf set up a dedicated clone of the "smtp" transport for the
|
||||||
|
destination in question. In the example below we will call it
|
||||||
|
"fragile".
|
||||||
|
|
||||||
|
o In master.cf configure a reasonable process limit for the transport (a
|
||||||
|
number in the 10-20 range is typical).
|
||||||
|
|
||||||
|
o IMPORTANT!!! In main.cf configure a very large initial and destination
|
||||||
|
concurrency limit for this transport (say 2000).
|
||||||
|
|
||||||
|
/etc/postfix/main.cf:
|
||||||
|
transport_maps = hash:/etc/postfix/transport
|
||||||
|
initial_destination_concurrency = 2000
|
||||||
|
fragile_destination_concurrency_limit = 2000
|
||||||
|
|
||||||
|
/etc/postfix/transport:
|
||||||
|
example.com fragile:
|
||||||
|
|
||||||
|
/etc/postfix/master.cf:
|
||||||
|
# service type private unpriv chroot wakeup maxproc command
|
||||||
|
fragile unix - - n - 20 smtp
|
||||||
|
|
||||||
|
See also the documentation for default_destination_concurrency_limit.
|
||||||
|
|
||||||
|
The effect of this configuration is that up to 2000 consecutive errors are
|
||||||
|
tolerated without marking the destination dead, while the total concurrency
|
||||||
|
remains reasonable (10-20 processes). This trick is only for a very specialized
|
||||||
|
situation: high volume delivery into a channel with multi-error bursts that is
|
||||||
|
capable of high throughput, but is repeatedly throttled by the bursts of
|
||||||
|
errors.
|
||||||
|
|
||||||
When a destination is unable to handle the load even after the Postfix process
|
When a destination is unable to handle the load even after the Postfix process
|
||||||
limit is reduced to 1, a desperate measure is to insert brief delays between
|
limit is reduced to 1, a desperate measure is to insert brief delays between
|
||||||
delivery attempts.
|
delivery attempts.
|
||||||
|
|
||||||
* In the transport map entry for the problem destination, specify a dead host
|
* Postfix version 2.5 and later:
|
||||||
as the primary nexthop.
|
|
||||||
|
|
||||||
* In the master.cf entry for the transport specify the problem destination as
|
o In master.cf set up a dedicated clone of the "smtp" transport for the
|
||||||
the fallback_relay and specify a small smtp_connect_timeout value.
|
problem destination. In the example below we call it "slow".
|
||||||
|
|
||||||
/etc/postfix/transport:
|
o In main.cf configure a short delay between deliveries to the same
|
||||||
problem.example.com slow:[dead.host]
|
destination.
|
||||||
|
|
||||||
/etc/postfix/master.cf:
|
/etc/postfix/main.cf:
|
||||||
# service type private unpriv chroot wakeup maxproc command
|
transport_maps = hash:/etc/postfix/transport
|
||||||
slow unix - - n - 1 smtp
|
slow_destination_rate_delay = 1
|
||||||
-o fallback_relay=problem.example.com
|
|
||||||
-o smtp_connect_timeout=1
|
|
||||||
|
|
||||||
This solution forces the Postfix smtp(8) client to wait for
|
/etc/postfix/transport:
|
||||||
$smtp_connect_timeout seconds between deliveries. The solution depends on
|
example.com slow:
|
||||||
Postfix connection management details, and needs to be updated when SMTP
|
|
||||||
connection caching is introduced.
|
|
||||||
|
|
||||||
Hopefully a more elegant solution to these problems will be found in the
|
/etc/postfix/master.cf:
|
||||||
future.
|
# service type private unpriv chroot wakeup maxproc command
|
||||||
|
slow unix - - n - - smtp
|
||||||
|
|
||||||
|
See also the documentation for default_destination_rate_delay.
|
||||||
|
|
||||||
|
This solution forces the Postfix smtp(8) client to wait for
|
||||||
|
$slow_destination_rate_delay seconds between deliveries to the same
|
||||||
|
destination.
|
||||||
|
|
||||||
|
* Earlier Postfix versions:
|
||||||
|
|
||||||
|
o In the transport map entry for the problem destination, specify a dead
|
||||||
|
host as the primary nexthop.
|
||||||
|
|
||||||
|
o In the master.cf entry for the transport specify the problem
|
||||||
|
destination as the fallback_relay and specify a small
|
||||||
|
smtp_connect_timeout value.
|
||||||
|
|
||||||
|
/etc/postfix/main.cf:
|
||||||
|
transport_maps = hash:/etc/postfix/transport
|
||||||
|
|
||||||
|
/etc/postfix/transport:
|
||||||
|
example.com slow:[dead.host]
|
||||||
|
|
||||||
|
/etc/postfix/master.cf:
|
||||||
|
# service type private unpriv chroot wakeup maxproc command
|
||||||
|
slow unix - - n - 1 smtp
|
||||||
|
-o fallback_relay=problem.example.com
|
||||||
|
-o smtp_connect_timeout=1
|
||||||
|
-o smtp_cache_connection=no
|
||||||
|
|
||||||
|
This solution forces the Postfix smtp(8) client to wait for
|
||||||
|
$smtp_connect_timeout seconds between deliveries. The connection caching
|
||||||
|
feature is disabled to prevent the client from skipping over the dead host.
|
||||||
|
|
||||||
PPoossttffiixx qquueeuuee ddiirreeccttoorriieess
|
PPoossttffiixx qquueeuuee ddiirreeccttoorriieess
|
||||||
|
|
||||||
|
@@ -220,9 +220,9 @@ easier to find. This document describes the "mail sending" side
|
|||||||
only.
|
only.
|
||||||
|
|
||||||
[Feature 20071202] Output rate control in the queue manager. For
|
[Feature 20071202] Output rate control in the queue manager. For
|
||||||
example, specify "smtp_delivery_rate_delay = 5m", to pause five
|
example, specify "smtp_destination_rate_delay = 5m", to pause five
|
||||||
minutes between message deliveries. More information in the postconf(5)
|
minutes between message deliveries. More information in the postconf(5)
|
||||||
manual under "default_delivery_rate_delay".
|
manual under "default_destination_rate_delay".
|
||||||
|
|
||||||
Major changes - smtp client
|
Major changes - smtp client
|
||||||
---------------------------
|
---------------------------
|
||||||
|
@@ -192,10 +192,10 @@ $manpage_directory/man8/verify.8:f:root:-:644
|
|||||||
$manpage_directory/man8/virtual.8:f:root:-:644
|
$manpage_directory/man8/virtual.8:f:root:-:644
|
||||||
$sample_directory/sample-aliases.cf:f:root:-:644:o
|
$sample_directory/sample-aliases.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-auth.cf:f:root:-:644:o
|
$sample_directory/sample-auth.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-canonical.cf:f:root:-:644:o:o
|
$sample_directory/sample-canonical.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-compatibility.cf:f:root:-:644:o
|
$sample_directory/sample-compatibility.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-debug.cf:f:root:-:644:o
|
$sample_directory/sample-debug.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-filter.cf:f:root:-:644:o:o
|
$sample_directory/sample-filter.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-flush.cf:f:root:-:644:o
|
$sample_directory/sample-flush.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-ipv6.cf:f:root:-:644:o
|
$sample_directory/sample-ipv6.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-ldap.cf:f:root:-:644:o
|
$sample_directory/sample-ldap.cf:f:root:-:644:o
|
||||||
@@ -203,15 +203,15 @@ $sample_directory/sample-lmtp.cf:f:root:-:644:o
|
|||||||
$sample_directory/sample-local.cf:f:root:-:644:o
|
$sample_directory/sample-local.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-mime.cf:f:root:-:644:o
|
$sample_directory/sample-mime.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-misc.cf:f:root:-:644:o
|
$sample_directory/sample-misc.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-pcre-access.cf:f:root:-:644:o:o
|
$sample_directory/sample-pcre-access.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-pcre-body.cf:f:root:-:644:o:o
|
$sample_directory/sample-pcre-body.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-pcre-header.cf:f:root:-:644:o:o
|
$sample_directory/sample-pcre-header.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-pgsql-aliases.cf:f:root:-:644:o
|
$sample_directory/sample-pgsql-aliases.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-qmqpd.cf:f:root:-:644:o
|
$sample_directory/sample-qmqpd.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-rate.cf:f:root:-:644:o
|
$sample_directory/sample-rate.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-regexp-access.cf:f:root:-:644:o:o
|
$sample_directory/sample-regexp-access.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-regexp-body.cf:f:root:-:644:o:o
|
$sample_directory/sample-regexp-body.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-regexp-header.cf:f:root:-:644:o:o
|
$sample_directory/sample-regexp-header.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-relocated.cf:f:root:-:644:o
|
$sample_directory/sample-relocated.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-resource.cf:f:root:-:644:o
|
$sample_directory/sample-resource.cf:f:root:-:644:o
|
||||||
$sample_directory/sample-rewrite.cf:f:root:-:644:o
|
$sample_directory/sample-rewrite.cf:f:root:-:644:o
|
||||||
|
@@ -409,8 +409,47 @@ caching does not solve the problem, there is a subtle workaround. </p>
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
|
<li> <p> Postfix version 2.5 and later: </p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li> <p> In <a href="master.5.html">master.cf</a> set up a dedicated clone of the "smtp" transport
|
||||||
|
for the destination in question. In the example below we will call
|
||||||
|
it "fragile". </p>
|
||||||
|
|
||||||
|
<li> <p> In <a href="master.5.html">master.cf</a> configure a reasonable process limit for the
|
||||||
|
cloned smtp transport (a number in the 10-20 range is typical). </p>
|
||||||
|
|
||||||
|
<li> <p> IMPORTANT!!! In <a href="postconf.5.html">main.cf</a> configure a large per-destination
|
||||||
|
pseudo-cohort failure limit for the cloned smtp transport. </p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
|
||||||
|
<a href="postconf.5.html#transport_maps">transport_maps</a> = hash:/etc/postfix/transport
|
||||||
|
fragile_destination_concurrency_failed_cohort_limit = 100
|
||||||
|
fragile_destination_concurrency_limit = 20
|
||||||
|
|
||||||
|
/etc/postfix/transport:
|
||||||
|
example.com fragile:
|
||||||
|
|
||||||
|
/etc/postfix/<a href="master.5.html">master.cf</a>:
|
||||||
|
# service type private unpriv chroot wakeup maxproc command
|
||||||
|
fragile unix - - n - 20 smtp
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p> See also the documentation for
|
||||||
|
<a href="postconf.5.html#default_destination_concurrency_failed_cohort_limit">default_destination_concurrency_failed_cohort_limit</a> and
|
||||||
|
<a href="postconf.5.html#default_destination_concurrency_limit">default_destination_concurrency_limit</a>. </p>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<li> <p> Earlier Postfix versions: </p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
<li> <p> In <a href="master.5.html">master.cf</a> set up a dedicated clone of the "smtp"
|
<li> <p> In <a href="master.5.html">master.cf</a> set up a dedicated clone of the "smtp"
|
||||||
transport for the destination in question. </p>
|
transport for the destination in question. In the example below
|
||||||
|
we will call it "fragile". </p>
|
||||||
|
|
||||||
<li> <p> In <a href="master.5.html">master.cf</a> configure a reasonable process limit for the
|
<li> <p> In <a href="master.5.html">master.cf</a> configure a reasonable process limit for the
|
||||||
transport (a number in the 10-20 range is typical). </p>
|
transport (a number in the 10-20 range is typical). </p>
|
||||||
@@ -420,16 +459,26 @@ and destination concurrency limit for this transport (say 2000). </p>
|
|||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
|
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
|
||||||
|
<a href="postconf.5.html#transport_maps">transport_maps</a> = hash:/etc/postfix/transport
|
||||||
<a href="postconf.5.html#initial_destination_concurrency">initial_destination_concurrency</a> = 2000
|
<a href="postconf.5.html#initial_destination_concurrency">initial_destination_concurrency</a> = 2000
|
||||||
<i>transportname</i>_destination_concurrency_limit = 2000
|
fragile_destination_concurrency_limit = 2000
|
||||||
|
|
||||||
|
/etc/postfix/transport:
|
||||||
|
example.com fragile:
|
||||||
|
|
||||||
|
/etc/postfix/<a href="master.5.html">master.cf</a>:
|
||||||
|
# service type private unpriv chroot wakeup maxproc command
|
||||||
|
fragile unix - - n - 20 smtp
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p> Where <i>transportname</i> is the name of the <a href="master.5.html">master.cf</a> entry
|
<p> See also the documentation for <a href="postconf.5.html#default_destination_concurrency_limit">default_destination_concurrency_limit</a>.
|
||||||
in question. </p>
|
</p>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p> The effect of this surprising configuration is that up to 2000
|
</ul>
|
||||||
|
|
||||||
|
<p> The effect of this configuration is that up to 2000
|
||||||
consecutive errors are tolerated without marking the destination
|
consecutive errors are tolerated without marking the destination
|
||||||
dead, while the total concurrency remains reasonable (10-20
|
dead, while the total concurrency remains reasonable (10-20
|
||||||
processes). This trick is only for a very specialized situation:
|
processes). This trick is only for a very specialized situation:
|
||||||
@@ -443,6 +492,42 @@ insert brief delays between delivery attempts. </p>
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
|
<li> <p> Postfix version 2.5 and later: </p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li> <p> In <a href="master.5.html">master.cf</a> set up a dedicated clone of the "smtp" transport
|
||||||
|
for the problem destination. In the example below we call it "slow".
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<li> <p> In <a href="postconf.5.html">main.cf</a> configure a short delay between deliveries to
|
||||||
|
the same destination. </p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
|
||||||
|
<a href="postconf.5.html#transport_maps">transport_maps</a> = hash:/etc/postfix/transport
|
||||||
|
slow_destination_rate_delay = 1
|
||||||
|
|
||||||
|
/etc/postfix/transport:
|
||||||
|
example.com slow:
|
||||||
|
|
||||||
|
/etc/postfix/<a href="master.5.html">master.cf</a>:
|
||||||
|
# service type private unpriv chroot wakeup maxproc command
|
||||||
|
slow unix - - n - - smtp
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p> See also the documentation for <a href="postconf.5.html#default_destination_rate_delay">default_destination_rate_delay</a>. </p>
|
||||||
|
|
||||||
|
<p> This solution forces the Postfix <a href="smtp.8.html">smtp(8)</a> client to wait for
|
||||||
|
$slow_destination_rate_delay seconds between deliveries to the same
|
||||||
|
destination. </p>
|
||||||
|
|
||||||
|
<li> <p> Earlier Postfix versions: </p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
<li> <p> In the transport map entry for the problem destination,
|
<li> <p> In the transport map entry for the problem destination,
|
||||||
specify a dead host as the primary nexthop. </p>
|
specify a dead host as the primary nexthop. </p>
|
||||||
|
|
||||||
@@ -451,25 +536,28 @@ problem destination as the <a href="postconf.5.html#fallback_relay">fallback_rel
|
|||||||
<a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> value. </p>
|
<a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> value. </p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
|
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
|
||||||
|
<a href="postconf.5.html#transport_maps">transport_maps</a> = hash:/etc/postfix/transport
|
||||||
|
|
||||||
/etc/postfix/transport:
|
/etc/postfix/transport:
|
||||||
problem.example.com slow:[dead.host]
|
example.com slow:[dead.host]
|
||||||
|
|
||||||
/etc/postfix/<a href="master.5.html">master.cf</a>:
|
/etc/postfix/<a href="master.5.html">master.cf</a>:
|
||||||
# service type private unpriv chroot wakeup maxproc command
|
# service type private unpriv chroot wakeup maxproc command
|
||||||
slow unix - - n - 1 smtp
|
slow unix - - n - 1 smtp
|
||||||
-o <a href="postconf.5.html#fallback_relay">fallback_relay</a>=problem.example.com
|
-o <a href="postconf.5.html#fallback_relay">fallback_relay</a>=problem.example.com
|
||||||
-o <a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a>=1
|
-o <a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a>=1
|
||||||
|
-o smtp_cache_connection=no
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p> This solution forces the Postfix <a href="smtp.8.html">smtp(8)</a> client to wait for
|
<p> This solution forces the Postfix <a href="smtp.8.html">smtp(8)</a> client to wait for
|
||||||
$<a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> seconds between deliveries. The solution
|
$<a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> seconds between deliveries. The connection
|
||||||
depends on Postfix connection management details, and needs to be
|
caching feature is disabled to prevent the client from skipping
|
||||||
updated when SMTP connection caching is introduced. </p>
|
over the dead host. </p>
|
||||||
|
|
||||||
<p> Hopefully a more elegant solution to these problems will be
|
</ul>
|
||||||
found in the future. </p>
|
|
||||||
|
|
||||||
<h2><a name="queues">Postfix queue directories</a></h2>
|
<h2><a name="queues">Postfix queue directories</a></h2>
|
||||||
|
|
||||||
|
@@ -305,14 +305,15 @@ OQMGR(8) OQMGR(8)
|
|||||||
|
|
||||||
Available in Postfix version 2.5 and later:
|
Available in Postfix version 2.5 and later:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#default_delivery_rate_delay">default_delivery_rate_delay</a> (0s)</b>
|
<b><a href="postconf.5.html#default_destination_rate_delay">default_destination_rate_delay</a> (0s)</b>
|
||||||
The default amount of delay that is inserted
|
The default amount of delay that is inserted
|
||||||
between individual deliveries to the same destina-
|
between individual deliveries to the same destina-
|
||||||
tion; with per-destination recipient limit > 1, a
|
tion; with per-destination recipient limit > 1, a
|
||||||
destination is a domain, otherwise it is a recipi-
|
destination is a domain, otherwise it is a recipi-
|
||||||
ent.
|
ent.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#transport_delivery_rate_delay"><i>transport</i>_delivery_rate_delay</a> $<a href="postconf.5.html#default_delivery_rate_delay">default_delivery_rate_delay</a></b>
|
<b><a href="postconf.5.html#transport_destination_rate_delay"><i>transport</i>_destination_rate_delay</a> $<a href="postconf.5.html#default_destination_rate_delay">default_destina</a>-</b>
|
||||||
|
<b><a href="postconf.5.html#default_destination_rate_delay">tion_rate_delay</a></b>
|
||||||
Idem, for delivery via the named message <i>transport</i>.
|
Idem, for delivery via the named message <i>transport</i>.
|
||||||
|
|
||||||
<b>MISCELLANEOUS CONTROLS</b>
|
<b>MISCELLANEOUS CONTROLS</b>
|
||||||
|
@@ -1595,35 +1595,6 @@ Examples:
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
|
||||||
|
|
||||||
<DT><b><a name="default_delivery_rate_delay">default_delivery_rate_delay</a>
|
|
||||||
(default: 0s)</b></DT><DD>
|
|
||||||
|
|
||||||
<p> The default amount of delay that is inserted between individual
|
|
||||||
deliveries to the same destination; with per-destination recipient
|
|
||||||
limit > 1, a destination is a domain, otherwise it is a recipient.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p> To enable the delay, specify a non-zero time value (an integral
|
|
||||||
value plus an optional one-letter suffix that specifies the time
|
|
||||||
unit). </p>
|
|
||||||
|
|
||||||
<p> Time units: s (seconds), m (minutes), h (hours), d (days), w
|
|
||||||
(weeks). The default time unit is s (seconds). </p>
|
|
||||||
|
|
||||||
<p> NOTE: the delay is enforced by the queue manager. The delay
|
|
||||||
timer state does not survive "postfix reload" or "postfix stop".
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p> Use <a href="postconf.5.html#transport_delivery_rate_delay"><i>transport</i>_delivery_rate_delay</a> to specify a
|
|
||||||
transport-specific override, where <i>transport</i> is the <a href="master.5.html">master.cf</a>
|
|
||||||
name of the message delivery transport.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.5 and later. </p>
|
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="default_delivery_slot_cost">default_delivery_slot_cost</a>
|
<DT><b><a name="default_delivery_slot_cost">default_delivery_slot_cost</a>
|
||||||
@@ -1875,6 +1846,35 @@ is the <a href="master.5.html">master.cf</a> name of the message delivery transp
|
|||||||
<p> This feature is available in Postfix 2.5 and later. </p>
|
<p> This feature is available in Postfix 2.5 and later. </p>
|
||||||
|
|
||||||
|
|
||||||
|
</DD>
|
||||||
|
|
||||||
|
<DT><b><a name="default_destination_rate_delay">default_destination_rate_delay</a>
|
||||||
|
(default: 0s)</b></DT><DD>
|
||||||
|
|
||||||
|
<p> The default amount of delay that is inserted between individual
|
||||||
|
deliveries to the same destination; with per-destination recipient
|
||||||
|
limit > 1, a destination is a domain, otherwise it is a recipient.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p> To enable the delay, specify a non-zero time value (an integral
|
||||||
|
value plus an optional one-letter suffix that specifies the time
|
||||||
|
unit). </p>
|
||||||
|
|
||||||
|
<p> Time units: s (seconds), m (minutes), h (hours), d (days), w
|
||||||
|
(weeks). The default time unit is s (seconds). </p>
|
||||||
|
|
||||||
|
<p> NOTE: the delay is enforced by the queue manager. The delay
|
||||||
|
timer state does not survive "postfix reload" or "postfix stop".
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p> Use <a href="postconf.5.html#transport_destination_rate_delay"><i>transport</i>_destination_rate_delay</a> to specify a
|
||||||
|
transport-specific override, where <i>transport</i> is the <a href="master.5.html">master.cf</a>
|
||||||
|
name of the message delivery transport.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.5 and later. </p>
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="default_destination_recipient_limit">default_destination_recipient_limit</a>
|
<DT><b><a name="default_destination_recipient_limit">default_destination_recipient_limit</a>
|
||||||
@@ -12798,18 +12798,6 @@ This feature is available in Postfix 2.1 and later.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
|
||||||
|
|
||||||
<DT><b><a name="transport_delivery_rate_delay">transport_delivery_rate_delay</a>
|
|
||||||
(default: $<a href="postconf.5.html#default_delivery_rate_delay">default_delivery_rate_delay</a>)</b></DT><DD>
|
|
||||||
|
|
||||||
<p> A transport-specific override for the <a href="postconf.5.html#default_recipient_refill_delay">default_recipient_refill_delay</a>
|
|
||||||
parameter value, where <i>transport</i> is the <a href="master.5.html">master.cf</a> name of
|
|
||||||
the message delivery transport. </p>
|
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.5 and later. </p>
|
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="transport_delivery_slot_cost">transport_delivery_slot_cost</a>
|
<DT><b><a name="transport_delivery_slot_cost">transport_delivery_slot_cost</a>
|
||||||
@@ -12890,6 +12878,18 @@ transport. </p>
|
|||||||
<p> This feature is available in Postfix 2.5 and later. </p>
|
<p> This feature is available in Postfix 2.5 and later. </p>
|
||||||
|
|
||||||
|
|
||||||
|
</DD>
|
||||||
|
|
||||||
|
<DT><b><a name="transport_destination_rate_delay">transport_destination_rate_delay</a>
|
||||||
|
(default: $<a href="postconf.5.html#default_destination_rate_delay">default_destination_rate_delay</a>)</b></DT><DD>
|
||||||
|
|
||||||
|
<p> A transport-specific override for the <a href="postconf.5.html#default_destination_rate_delay">default_destination_rate_delay</a>
|
||||||
|
parameter value, where <i>transport</i> is the <a href="master.5.html">master.cf</a> name of
|
||||||
|
the message delivery transport. </p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.5 and later. </p>
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="transport_destination_recipient_limit">transport_destination_recipient_limit</a>
|
<DT><b><a name="transport_destination_recipient_limit">transport_destination_recipient_limit</a>
|
||||||
|
@@ -377,14 +377,15 @@ QMGR(8) QMGR(8)
|
|||||||
|
|
||||||
Available in Postfix version 2.5 and later:
|
Available in Postfix version 2.5 and later:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#default_delivery_rate_delay">default_delivery_rate_delay</a> (0s)</b>
|
<b><a href="postconf.5.html#default_destination_rate_delay">default_destination_rate_delay</a> (0s)</b>
|
||||||
The default amount of delay that is inserted
|
The default amount of delay that is inserted
|
||||||
between individual deliveries to the same destina-
|
between individual deliveries to the same destina-
|
||||||
tion; with per-destination recipient limit > 1, a
|
tion; with per-destination recipient limit > 1, a
|
||||||
destination is a domain, otherwise it is a recipi-
|
destination is a domain, otherwise it is a recipi-
|
||||||
ent.
|
ent.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#transport_delivery_rate_delay"><i>transport</i>_delivery_rate_delay</a> $<a href="postconf.5.html#default_delivery_rate_delay">default_delivery_rate_delay</a></b>
|
<b><a href="postconf.5.html#transport_destination_rate_delay"><i>transport</i>_destination_rate_delay</a> $<a href="postconf.5.html#default_destination_rate_delay">default_destina</a>-</b>
|
||||||
|
<b><a href="postconf.5.html#default_destination_rate_delay">tion_rate_delay</a></b>
|
||||||
Idem, for delivery via the named message <i>transport</i>.
|
Idem, for delivery via the named message <i>transport</i>.
|
||||||
|
|
||||||
<b>MISCELLANEOUS CONTROLS</b>
|
<b>MISCELLANEOUS CONTROLS</b>
|
||||||
|
@@ -886,26 +886,6 @@ default_database_type = dbm
|
|||||||
.fi
|
.fi
|
||||||
.ad
|
.ad
|
||||||
.ft R
|
.ft R
|
||||||
.SH default_delivery_rate_delay (default: 0s)
|
|
||||||
The default amount of delay that is inserted between individual
|
|
||||||
deliveries to the same destination; with per-destination recipient
|
|
||||||
limit > 1, a destination is a domain, otherwise it is a recipient.
|
|
||||||
.PP
|
|
||||||
To enable the delay, specify a non-zero time value (an integral
|
|
||||||
value plus an optional one-letter suffix that specifies the time
|
|
||||||
unit).
|
|
||||||
.PP
|
|
||||||
Time units: s (seconds), m (minutes), h (hours), d (days), w
|
|
||||||
(weeks). The default time unit is s (seconds).
|
|
||||||
.PP
|
|
||||||
NOTE: the delay is enforced by the queue manager. The delay
|
|
||||||
timer state does not survive "postfix reload" or "postfix stop".
|
|
||||||
.PP
|
|
||||||
Use \fItransport\fR_delivery_rate_delay to specify a
|
|
||||||
transport-specific override, where \fItransport\fR is the master.cf
|
|
||||||
name of the message delivery transport.
|
|
||||||
.PP
|
|
||||||
This feature is available in Postfix 2.5 and later.
|
|
||||||
.SH default_delivery_slot_cost (default: 5)
|
.SH default_delivery_slot_cost (default: 5)
|
||||||
How often the Postfix queue manager's scheduler is allowed to
|
How often the Postfix queue manager's scheduler is allowed to
|
||||||
preempt delivery of one message with another.
|
preempt delivery of one message with another.
|
||||||
@@ -1077,6 +1057,26 @@ to specify a transport-specific override, where \fItransport\fR
|
|||||||
is the master.cf name of the message delivery transport.
|
is the master.cf name of the message delivery transport.
|
||||||
.PP
|
.PP
|
||||||
This feature is available in Postfix 2.5 and later.
|
This feature is available in Postfix 2.5 and later.
|
||||||
|
.SH default_destination_rate_delay (default: 0s)
|
||||||
|
The default amount of delay that is inserted between individual
|
||||||
|
deliveries to the same destination; with per-destination recipient
|
||||||
|
limit > 1, a destination is a domain, otherwise it is a recipient.
|
||||||
|
.PP
|
||||||
|
To enable the delay, specify a non-zero time value (an integral
|
||||||
|
value plus an optional one-letter suffix that specifies the time
|
||||||
|
unit).
|
||||||
|
.PP
|
||||||
|
Time units: s (seconds), m (minutes), h (hours), d (days), w
|
||||||
|
(weeks). The default time unit is s (seconds).
|
||||||
|
.PP
|
||||||
|
NOTE: the delay is enforced by the queue manager. The delay
|
||||||
|
timer state does not survive "postfix reload" or "postfix stop".
|
||||||
|
.PP
|
||||||
|
Use \fItransport\fR_destination_rate_delay to specify a
|
||||||
|
transport-specific override, where \fItransport\fR is the master.cf
|
||||||
|
name of the message delivery transport.
|
||||||
|
.PP
|
||||||
|
This feature is available in Postfix 2.5 and later.
|
||||||
.SH default_destination_recipient_limit (default: 50)
|
.SH default_destination_recipient_limit (default: 50)
|
||||||
The default maximal number of recipients per message delivery.
|
The default maximal number of recipients per message delivery.
|
||||||
This is the default limit for delivery via the \fBlmtp\fR(8), \fBpipe\fR(8),
|
This is the default limit for delivery via the \fBlmtp\fR(8), \fBpipe\fR(8),
|
||||||
@@ -7938,12 +7938,6 @@ of mail deliveries and produces a mail delivery report when verbose
|
|||||||
delivery is requested with "\fBsendmail -v\fR".
|
delivery is requested with "\fBsendmail -v\fR".
|
||||||
.PP
|
.PP
|
||||||
This feature is available in Postfix 2.1 and later.
|
This feature is available in Postfix 2.1 and later.
|
||||||
.SH transport_delivery_rate_delay (default: $default_delivery_rate_delay)
|
|
||||||
A transport-specific override for the default_recipient_refill_delay
|
|
||||||
parameter value, where \fItransport\fR is the master.cf name of
|
|
||||||
the message delivery transport.
|
|
||||||
.PP
|
|
||||||
This feature is available in Postfix 2.5 and later.
|
|
||||||
.SH transport_delivery_slot_cost (default: $default_delivery_slot_cost)
|
.SH transport_delivery_slot_cost (default: $default_delivery_slot_cost)
|
||||||
A transport-specific override for the default_delivery_slot_cost
|
A transport-specific override for the default_delivery_slot_cost
|
||||||
parameter value, where \fItransport\fR is the master.cf name of
|
parameter value, where \fItransport\fR is the master.cf name of
|
||||||
@@ -7982,6 +7976,12 @@ where \fItransport\fR is the master.cf name of the message delivery
|
|||||||
transport.
|
transport.
|
||||||
.PP
|
.PP
|
||||||
This feature is available in Postfix 2.5 and later.
|
This feature is available in Postfix 2.5 and later.
|
||||||
|
.SH transport_destination_rate_delay (default: $default_destination_rate_delay)
|
||||||
|
A transport-specific override for the default_destination_rate_delay
|
||||||
|
parameter value, where \fItransport\fR is the master.cf name of
|
||||||
|
the message delivery transport.
|
||||||
|
.PP
|
||||||
|
This feature is available in Postfix 2.5 and later.
|
||||||
.SH transport_destination_recipient_limit (default: $default_destination_recipient_limit)
|
.SH transport_destination_recipient_limit (default: $default_destination_recipient_limit)
|
||||||
A transport-specific override for the
|
A transport-specific override for the
|
||||||
default_destination_recipient_limit parameter value, where
|
default_destination_recipient_limit parameter value, where
|
||||||
|
@@ -275,11 +275,11 @@ The maximal time a bounce message is queued before it is considered
|
|||||||
undeliverable.
|
undeliverable.
|
||||||
.PP
|
.PP
|
||||||
Available in Postfix version 2.5 and later:
|
Available in Postfix version 2.5 and later:
|
||||||
.IP "\fBdefault_delivery_rate_delay (0s)\fR"
|
.IP "\fBdefault_destination_rate_delay (0s)\fR"
|
||||||
The default amount of delay that is inserted between individual
|
The default amount of delay that is inserted between individual
|
||||||
deliveries to the same destination; with per-destination recipient
|
deliveries to the same destination; with per-destination recipient
|
||||||
limit > 1, a destination is a domain, otherwise it is a recipient.
|
limit > 1, a destination is a domain, otherwise it is a recipient.
|
||||||
.IP "\fItransport\fB_delivery_rate_delay $default_delivery_rate_delay
|
.IP "\fItransport\fB_destination_rate_delay $default_destination_rate_delay
|
||||||
Idem, for delivery via the named message \fItransport\fR.
|
Idem, for delivery via the named message \fItransport\fR.
|
||||||
.SH MISCELLANEOUS CONTROLS
|
.SH MISCELLANEOUS CONTROLS
|
||||||
.ad
|
.ad
|
||||||
|
@@ -323,11 +323,11 @@ The maximal time a bounce message is queued before it is considered
|
|||||||
undeliverable.
|
undeliverable.
|
||||||
.PP
|
.PP
|
||||||
Available in Postfix version 2.5 and later:
|
Available in Postfix version 2.5 and later:
|
||||||
.IP "\fBdefault_delivery_rate_delay (0s)\fR"
|
.IP "\fBdefault_destination_rate_delay (0s)\fR"
|
||||||
The default amount of delay that is inserted between individual
|
The default amount of delay that is inserted between individual
|
||||||
deliveries to the same destination; with per-destination recipient
|
deliveries to the same destination; with per-destination recipient
|
||||||
limit > 1, a destination is a domain, otherwise it is a recipient.
|
limit > 1, a destination is a domain, otherwise it is a recipient.
|
||||||
.IP "\fItransport\fB_delivery_rate_delay $default_delivery_rate_delay
|
.IP "\fItransport\fB_destination_rate_delay $default_destination_rate_delay
|
||||||
Idem, for delivery via the named message \fItransport\fR.
|
Idem, for delivery via the named message \fItransport\fR.
|
||||||
.SH "MISCELLANEOUS CONTROLS"
|
.SH "MISCELLANEOUS CONTROLS"
|
||||||
.na
|
.na
|
||||||
|
@@ -346,7 +346,7 @@ while (<>) {
|
|||||||
s;\bdefault_destination_concur[-</Bb>]*\n* *[<Bb>]*rency_positive_feedback\b;<a href="postconf.5.html#default_destination_concurrency_positive_feedback">$&</a>;g;
|
s;\bdefault_destination_concur[-</Bb>]*\n* *[<Bb>]*rency_positive_feedback\b;<a href="postconf.5.html#default_destination_concurrency_positive_feedback">$&</a>;g;
|
||||||
s;\bdefault_destination_con[-</Bb>]*\n* *[<Bb>]*currency_failed_cohort_limit\b;<a href="postconf.5.html#default_destination_concurrency_failed_cohort_limit">$&</a>;g;
|
s;\bdefault_destination_con[-</Bb>]*\n* *[<Bb>]*currency_failed_cohort_limit\b;<a href="postconf.5.html#default_destination_concurrency_failed_cohort_limit">$&</a>;g;
|
||||||
s;\bdestination_concurrency_feedback_debug\b;<a href="postconf.5.html#destination_concurrency_feedback_debug">$&</a>;g;
|
s;\bdestination_concurrency_feedback_debug\b;<a href="postconf.5.html#destination_concurrency_feedback_debug">$&</a>;g;
|
||||||
s;\bdefault_delivery_rate_delay\b;<a href="postconf.5.html#default_delivery_rate_delay">$&</a>;g;
|
s;\bdefault_destina[-</Bb>]*\n* *[<Bb>]*tion_rate_delay\b;<a href="postconf.5.html#default_destination_rate_delay">$&</a>;g;
|
||||||
|
|
||||||
s;\bqmqpd_error_delay\b;<a href="postconf.5.html#qmqpd_error_delay">$&</a>;g;
|
s;\bqmqpd_error_delay\b;<a href="postconf.5.html#qmqpd_error_delay">$&</a>;g;
|
||||||
s;\bqmqpd_timeout\b;<a href="postconf.5.html#qmqpd_timeout">$&</a>;g;
|
s;\bqmqpd_timeout\b;<a href="postconf.5.html#qmqpd_timeout">$&</a>;g;
|
||||||
@@ -649,7 +649,7 @@ while (<>) {
|
|||||||
s;(<i>transport</i>)(<b>)?(_recipient_refill_delay)\b;$2<a href="postconf.5.html#transport_recipient_refill_delay">$1$3</a>;g;
|
s;(<i>transport</i>)(<b>)?(_recipient_refill_delay)\b;$2<a href="postconf.5.html#transport_recipient_refill_delay">$1$3</a>;g;
|
||||||
s;(<i>transport</i>)(<b>)?(_recipient_refill_limit)\b;$2<a href="postconf.5.html#transport_recipient_refill_limit">$1$3</a>;g;
|
s;(<i>transport</i>)(<b>)?(_recipient_refill_limit)\b;$2<a href="postconf.5.html#transport_recipient_refill_limit">$1$3</a>;g;
|
||||||
s;(<i>transport</i>)(<b>)?(_time_limit)\b;$2<a href="postconf.5.html#transport_time_limit">$1$3</a>;g;
|
s;(<i>transport</i>)(<b>)?(_time_limit)\b;$2<a href="postconf.5.html#transport_time_limit">$1$3</a>;g;
|
||||||
s;(<i>transport</i>)(<b>)?(_delivery_rate_delay)\b;$2<a href="postconf.5.html#transport_delivery_rate_delay">$1$3</a>;g;
|
s;(<i>transport</i>)(<b>)?(_destination_rate_delay)\b;$2<a href="postconf.5.html#transport_destination_rate_delay">$1$3</a>;g;
|
||||||
|
|
||||||
# Undo hyperlinks of manual pages with the same name as parameters.
|
# Undo hyperlinks of manual pages with the same name as parameters.
|
||||||
|
|
||||||
|
@@ -409,8 +409,47 @@ caching does not solve the problem, there is a subtle workaround. </p>
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
|
<li> <p> Postfix version 2.5 and later: </p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li> <p> In master.cf set up a dedicated clone of the "smtp" transport
|
||||||
|
for the destination in question. In the example below we will call
|
||||||
|
it "fragile". </p>
|
||||||
|
|
||||||
|
<li> <p> In master.cf configure a reasonable process limit for the
|
||||||
|
cloned smtp transport (a number in the 10-20 range is typical). </p>
|
||||||
|
|
||||||
|
<li> <p> IMPORTANT!!! In main.cf configure a large per-destination
|
||||||
|
pseudo-cohort failure limit for the cloned smtp transport. </p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
/etc/postfix/main.cf:
|
||||||
|
transport_maps = hash:/etc/postfix/transport
|
||||||
|
fragile_destination_concurrency_failed_cohort_limit = 100
|
||||||
|
fragile_destination_concurrency_limit = 20
|
||||||
|
|
||||||
|
/etc/postfix/transport:
|
||||||
|
example.com fragile:
|
||||||
|
|
||||||
|
/etc/postfix/master.cf:
|
||||||
|
# service type private unpriv chroot wakeup maxproc command
|
||||||
|
fragile unix - - n - 20 smtp
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p> See also the documentation for
|
||||||
|
default_destination_concurrency_failed_cohort_limit and
|
||||||
|
default_destination_concurrency_limit. </p>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<li> <p> Earlier Postfix versions: </p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
<li> <p> In master.cf set up a dedicated clone of the "smtp"
|
<li> <p> In master.cf set up a dedicated clone of the "smtp"
|
||||||
transport for the destination in question. </p>
|
transport for the destination in question. In the example below
|
||||||
|
we will call it "fragile". </p>
|
||||||
|
|
||||||
<li> <p> In master.cf configure a reasonable process limit for the
|
<li> <p> In master.cf configure a reasonable process limit for the
|
||||||
transport (a number in the 10-20 range is typical). </p>
|
transport (a number in the 10-20 range is typical). </p>
|
||||||
@@ -420,16 +459,26 @@ and destination concurrency limit for this transport (say 2000). </p>
|
|||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
/etc/postfix/main.cf:
|
/etc/postfix/main.cf:
|
||||||
|
transport_maps = hash:/etc/postfix/transport
|
||||||
initial_destination_concurrency = 2000
|
initial_destination_concurrency = 2000
|
||||||
<i>transportname</i>_destination_concurrency_limit = 2000
|
fragile_destination_concurrency_limit = 2000
|
||||||
|
|
||||||
|
/etc/postfix/transport:
|
||||||
|
example.com fragile:
|
||||||
|
|
||||||
|
/etc/postfix/master.cf:
|
||||||
|
# service type private unpriv chroot wakeup maxproc command
|
||||||
|
fragile unix - - n - 20 smtp
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p> Where <i>transportname</i> is the name of the master.cf entry
|
<p> See also the documentation for default_destination_concurrency_limit.
|
||||||
in question. </p>
|
</p>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p> The effect of this surprising configuration is that up to 2000
|
</ul>
|
||||||
|
|
||||||
|
<p> The effect of this configuration is that up to 2000
|
||||||
consecutive errors are tolerated without marking the destination
|
consecutive errors are tolerated without marking the destination
|
||||||
dead, while the total concurrency remains reasonable (10-20
|
dead, while the total concurrency remains reasonable (10-20
|
||||||
processes). This trick is only for a very specialized situation:
|
processes). This trick is only for a very specialized situation:
|
||||||
@@ -443,6 +492,42 @@ insert brief delays between delivery attempts. </p>
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
|
<li> <p> Postfix version 2.5 and later: </p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li> <p> In master.cf set up a dedicated clone of the "smtp" transport
|
||||||
|
for the problem destination. In the example below we call it "slow".
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<li> <p> In main.cf configure a short delay between deliveries to
|
||||||
|
the same destination. </p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
/etc/postfix/main.cf:
|
||||||
|
transport_maps = hash:/etc/postfix/transport
|
||||||
|
slow_destination_rate_delay = 1
|
||||||
|
|
||||||
|
/etc/postfix/transport:
|
||||||
|
example.com slow:
|
||||||
|
|
||||||
|
/etc/postfix/master.cf:
|
||||||
|
# service type private unpriv chroot wakeup maxproc command
|
||||||
|
slow unix - - n - - smtp
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p> See also the documentation for default_destination_rate_delay. </p>
|
||||||
|
|
||||||
|
<p> This solution forces the Postfix smtp(8) client to wait for
|
||||||
|
$slow_destination_rate_delay seconds between deliveries to the same
|
||||||
|
destination. </p>
|
||||||
|
|
||||||
|
<li> <p> Earlier Postfix versions: </p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
<li> <p> In the transport map entry for the problem destination,
|
<li> <p> In the transport map entry for the problem destination,
|
||||||
specify a dead host as the primary nexthop. </p>
|
specify a dead host as the primary nexthop. </p>
|
||||||
|
|
||||||
@@ -451,25 +536,28 @@ problem destination as the fallback_relay and specify a small
|
|||||||
smtp_connect_timeout value. </p>
|
smtp_connect_timeout value. </p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
|
/etc/postfix/main.cf:
|
||||||
|
transport_maps = hash:/etc/postfix/transport
|
||||||
|
|
||||||
/etc/postfix/transport:
|
/etc/postfix/transport:
|
||||||
problem.example.com slow:[dead.host]
|
example.com slow:[dead.host]
|
||||||
|
|
||||||
/etc/postfix/master.cf:
|
/etc/postfix/master.cf:
|
||||||
# service type private unpriv chroot wakeup maxproc command
|
# service type private unpriv chroot wakeup maxproc command
|
||||||
slow unix - - n - 1 smtp
|
slow unix - - n - 1 smtp
|
||||||
-o fallback_relay=problem.example.com
|
-o fallback_relay=problem.example.com
|
||||||
-o smtp_connect_timeout=1
|
-o smtp_connect_timeout=1
|
||||||
|
-o smtp_cache_connection=no
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p> This solution forces the Postfix smtp(8) client to wait for
|
<p> This solution forces the Postfix smtp(8) client to wait for
|
||||||
$smtp_connect_timeout seconds between deliveries. The solution
|
$smtp_connect_timeout seconds between deliveries. The connection
|
||||||
depends on Postfix connection management details, and needs to be
|
caching feature is disabled to prevent the client from skipping
|
||||||
updated when SMTP connection caching is introduced. </p>
|
over the dead host. </p>
|
||||||
|
|
||||||
<p> Hopefully a more elegant solution to these problems will be
|
</ul>
|
||||||
found in the future. </p>
|
|
||||||
|
|
||||||
<h2><a name="queues">Postfix queue directories</a></h2>
|
<h2><a name="queues">Postfix queue directories</a></h2>
|
||||||
|
|
||||||
|
@@ -11382,7 +11382,7 @@ the message delivery transport. </p>
|
|||||||
|
|
||||||
<p> This feature is available in Postfix 2.4 and later. </p>
|
<p> This feature is available in Postfix 2.4 and later. </p>
|
||||||
|
|
||||||
%PARAM default_delivery_rate_delay 0s
|
%PARAM default_destination_rate_delay 0s
|
||||||
|
|
||||||
<p> The default amount of delay that is inserted between individual
|
<p> The default amount of delay that is inserted between individual
|
||||||
deliveries to the same destination; with per-destination recipient
|
deliveries to the same destination; with per-destination recipient
|
||||||
@@ -11400,16 +11400,16 @@ unit). </p>
|
|||||||
timer state does not survive "postfix reload" or "postfix stop".
|
timer state does not survive "postfix reload" or "postfix stop".
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p> Use <i>transport</i>_delivery_rate_delay to specify a
|
<p> Use <i>transport</i>_destination_rate_delay to specify a
|
||||||
transport-specific override, where <i>transport</i> is the master.cf
|
transport-specific override, where <i>transport</i> is the master.cf
|
||||||
name of the message delivery transport.
|
name of the message delivery transport.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.5 and later. </p>
|
<p> This feature is available in Postfix 2.5 and later. </p>
|
||||||
|
|
||||||
%PARAM transport_delivery_rate_delay $default_delivery_rate_delay
|
%PARAM transport_destination_rate_delay $default_destination_rate_delay
|
||||||
|
|
||||||
<p> A transport-specific override for the default_recipient_refill_delay
|
<p> A transport-specific override for the default_destination_rate_delay
|
||||||
parameter value, where <i>transport</i> is the master.cf name of
|
parameter value, where <i>transport</i> is the master.cf name of
|
||||||
the message delivery transport. </p>
|
the message delivery transport. </p>
|
||||||
|
|
||||||
|
@@ -2916,8 +2916,8 @@ extern int var_conc_cohort_limit;
|
|||||||
#define DEF_CONC_FDBACK_DEBUG 0
|
#define DEF_CONC_FDBACK_DEBUG 0
|
||||||
extern bool var_conc_feedback_debug;
|
extern bool var_conc_feedback_debug;
|
||||||
|
|
||||||
#define VAR_DEST_RATE_DELAY "default_delivery_rate_delay"
|
#define VAR_DEST_RATE_DELAY "default_destination_rate_delay"
|
||||||
#define _DEST_RATE_DELAY "_delivery_rate_delay"
|
#define _DEST_RATE_DELAY "_destination_rate_delay"
|
||||||
#define DEF_DEST_RATE_DELAY "0s"
|
#define DEF_DEST_RATE_DELAY "0s"
|
||||||
extern int var_dest_rate_delay;
|
extern int var_dest_rate_delay;
|
||||||
|
|
||||||
|
@@ -20,8 +20,8 @@
|
|||||||
* Patches change both the patchlevel and the release date. Snapshots have no
|
* Patches change both the patchlevel and the release date. Snapshots have no
|
||||||
* patchlevel; they change the release date only.
|
* patchlevel; they change the release date only.
|
||||||
*/
|
*/
|
||||||
#define MAIL_RELEASE_DATE "20080116"
|
#define MAIL_RELEASE_DATE "20080123"
|
||||||
#define MAIL_VERSION_NUMBER "2.5.0-RC2"
|
#define MAIL_VERSION_NUMBER "2.5.0"
|
||||||
|
|
||||||
#ifdef SNAPSHOT
|
#ifdef SNAPSHOT
|
||||||
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE
|
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE
|
||||||
|
@@ -241,11 +241,11 @@
|
|||||||
/* undeliverable.
|
/* undeliverable.
|
||||||
/* .PP
|
/* .PP
|
||||||
/* Available in Postfix version 2.5 and later:
|
/* Available in Postfix version 2.5 and later:
|
||||||
/* .IP "\fBdefault_delivery_rate_delay (0s)\fR"
|
/* .IP "\fBdefault_destination_rate_delay (0s)\fR"
|
||||||
/* The default amount of delay that is inserted between individual
|
/* The default amount of delay that is inserted between individual
|
||||||
/* deliveries to the same destination; with per-destination recipient
|
/* deliveries to the same destination; with per-destination recipient
|
||||||
/* limit > 1, a destination is a domain, otherwise it is a recipient.
|
/* limit > 1, a destination is a domain, otherwise it is a recipient.
|
||||||
/* .IP "\fItransport\fB_delivery_rate_delay $default_delivery_rate_delay
|
/* .IP "\fItransport\fB_destination_rate_delay $default_destination_rate_delay
|
||||||
/* Idem, for delivery via the named message \fItransport\fR.
|
/* Idem, for delivery via the named message \fItransport\fR.
|
||||||
/* .SH MISCELLANEOUS CONTROLS
|
/* .SH MISCELLANEOUS CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
|
@@ -8,7 +8,7 @@ BEGIN {
|
|||||||
vars["destination_concurrency_positive_feedback"] = "default_destination_concurrency_positive_feedback"
|
vars["destination_concurrency_positive_feedback"] = "default_destination_concurrency_positive_feedback"
|
||||||
vars["destination_recipient_limit"] = "default_destination_recipient_limit"
|
vars["destination_recipient_limit"] = "default_destination_recipient_limit"
|
||||||
vars["initial_destination_concurrency"] = "initial_destination_concurrency"
|
vars["initial_destination_concurrency"] = "initial_destination_concurrency"
|
||||||
vars["delivery_rate_delay"] = "default_delivery_rate_delay"
|
vars["destination_rate_delay"] = "default_destination_rate_delay"
|
||||||
|
|
||||||
# auto_table.h
|
# auto_table.h
|
||||||
|
|
||||||
|
@@ -287,11 +287,11 @@
|
|||||||
/* undeliverable.
|
/* undeliverable.
|
||||||
/* .PP
|
/* .PP
|
||||||
/* Available in Postfix version 2.5 and later:
|
/* Available in Postfix version 2.5 and later:
|
||||||
/* .IP "\fBdefault_delivery_rate_delay (0s)\fR"
|
/* .IP "\fBdefault_destination_rate_delay (0s)\fR"
|
||||||
/* The default amount of delay that is inserted between individual
|
/* The default amount of delay that is inserted between individual
|
||||||
/* deliveries to the same destination; with per-destination recipient
|
/* deliveries to the same destination; with per-destination recipient
|
||||||
/* limit > 1, a destination is a domain, otherwise it is a recipient.
|
/* limit > 1, a destination is a domain, otherwise it is a recipient.
|
||||||
/* .IP "\fItransport\fB_delivery_rate_delay $default_delivery_rate_delay
|
/* .IP "\fItransport\fB_destination_rate_delay $default_destination_rate_delay
|
||||||
/* Idem, for delivery via the named message \fItransport\fR.
|
/* Idem, for delivery via the named message \fItransport\fR.
|
||||||
/* MISCELLANEOUS CONTROLS
|
/* MISCELLANEOUS CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
|
@@ -132,11 +132,12 @@ SMTP_SASL_AUTH_CACHE *smtp_sasl_auth_cache_init(const char *map, int ttl)
|
|||||||
*/
|
*/
|
||||||
#define CACHE_DICT_OPEN_FLAGS \
|
#define CACHE_DICT_OPEN_FLAGS \
|
||||||
(DICT_FLAG_DUP_REPLACE | DICT_FLAG_SYNC_UPDATE)
|
(DICT_FLAG_DUP_REPLACE | DICT_FLAG_SYNC_UPDATE)
|
||||||
|
#define PROXY_COLON DICT_TYPE_PROXY ":"
|
||||||
|
#define PROXY_COLON_LEN (sizeof(PROXY_COLON) - 1)
|
||||||
|
|
||||||
if (strncmp(map, DICT_TYPE_PROXY, sizeof(DICT_TYPE_PROXY) - 1) != 0
|
if (strncmp(map, PROXY_COLON, PROXY_COLON_LEN) != 0)
|
||||||
|| map[sizeof(DICT_TYPE_PROXY) - 1] != ':')
|
|
||||||
msg_fatal("SASL authentication cache name \"%s\" must start with \""
|
msg_fatal("SASL authentication cache name \"%s\" must start with \""
|
||||||
DICT_TYPE_PROXY "\":", map);
|
PROXY_COLON, map);
|
||||||
|
|
||||||
auth_cache = (SMTP_SASL_AUTH_CACHE *) mymalloc(sizeof(*auth_cache));
|
auth_cache = (SMTP_SASL_AUTH_CACHE *) mymalloc(sizeof(*auth_cache));
|
||||||
auth_cache->dict = dict_open(map, O_CREAT | O_RDWR, CACHE_DICT_OPEN_FLAGS);
|
auth_cache->dict = dict_open(map, O_CREAT | O_RDWR, CACHE_DICT_OPEN_FLAGS);
|
||||||
@@ -192,9 +193,9 @@ static char *smtp_sasl_auth_cache_make_value(const char *password,
|
|||||||
return (vstring_export(val_buf));
|
return (vstring_export(val_buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* smtp_sasl_auth_cache_valid - validate auth failure cache value */
|
/* smtp_sasl_auth_cache_valid_value - validate auth failure cache value */
|
||||||
|
|
||||||
static int smtp_sasl_auth_cache_valid(SMTP_SASL_AUTH_CACHE *auth_cache,
|
static int smtp_sasl_auth_cache_valid_value(SMTP_SASL_AUTH_CACHE *auth_cache,
|
||||||
const char *entry,
|
const char *entry,
|
||||||
const char *password)
|
const char *password)
|
||||||
{
|
{
|
||||||
@@ -235,7 +236,7 @@ int smtp_sasl_auth_cache_find(SMTP_SASL_AUTH_CACHE *auth_cache,
|
|||||||
|
|
||||||
key = smtp_sasl_auth_cache_make_key(session->host, session->sasl_username);
|
key = smtp_sasl_auth_cache_make_key(session->host, session->sasl_username);
|
||||||
if ((entry = dict_get(auth_cache->dict, key)) != 0)
|
if ((entry = dict_get(auth_cache->dict, key)) != 0)
|
||||||
if ((valid = smtp_sasl_auth_cache_valid(auth_cache, entry,
|
if ((valid = smtp_sasl_auth_cache_valid_value(auth_cache, entry,
|
||||||
session->sasl_passwd)) == 0)
|
session->sasl_passwd)) == 0)
|
||||||
/* Remove expired, password changed, or malformed cache entry. */
|
/* Remove expired, password changed, or malformed cache entry. */
|
||||||
if (dict_del(auth_cache->dict, key) == 0)
|
if (dict_del(auth_cache->dict, key) == 0)
|
||||||
|
@@ -18,8 +18,8 @@
|
|||||||
/* workarounds may be enabled that depend on the socket type.
|
/* workarounds may be enabled that depend on the socket type.
|
||||||
/* BUGS
|
/* BUGS
|
||||||
/* Bizarre systems may have other harmless error results. Such
|
/* Bizarre systems may have other harmless error results. Such
|
||||||
/* systems encourage programers to ignore error results, and
|
/* systems encourage programmers to ignore error results, and
|
||||||
/* penalizes programmers who code defensively.
|
/* penalize programmers who code defensively.
|
||||||
/* LICENSE
|
/* LICENSE
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
|
@@ -15,8 +15,8 @@
|
|||||||
/* known harmless error results to EAGAIN.
|
/* known harmless error results to EAGAIN.
|
||||||
/* BUGS
|
/* BUGS
|
||||||
/* Bizarre systems may have other harmless error results. Such
|
/* Bizarre systems may have other harmless error results. Such
|
||||||
/* systems encourage programers to ignore error results, and
|
/* systems encourage programmers to ignore error results, and
|
||||||
/* penalizes programmers who code defensively.
|
/* penalize programmers who code defensively.
|
||||||
/* LICENSE
|
/* LICENSE
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
|
@@ -16,8 +16,8 @@
|
|||||||
/* skips over silly error results such as EINTR.
|
/* skips over silly error results such as EINTR.
|
||||||
/* BUGS
|
/* BUGS
|
||||||
/* Bizarre systems may have other harmless error results. Such
|
/* Bizarre systems may have other harmless error results. Such
|
||||||
/* systems encourage programers to ignore error results, and
|
/* systems encourage programmers to ignore error results, and
|
||||||
/* penalizes programmers who code defensively.
|
/* penalize programmers who code defensively.
|
||||||
/* LICENSE
|
/* LICENSE
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
|
Reference in New Issue
Block a user