2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-30 13:48:06 +00:00

postfix-2.2-20040729

This commit is contained in:
Wietse Venema
2004-07-29 00:00:00 -05:00
committed by Viktor Dukhovni
parent e65de76573
commit 539ba25d8b
25 changed files with 289 additions and 114 deletions

View File

@@ -9583,12 +9583,12 @@ Apologies for any names omitted.
recvmsg(). Workaround is to insert an intervening read recvmsg(). Workaround is to insert an intervening read
(write) operation. Presumably, LINUX 2.4 is confusing the (write) operation. Presumably, LINUX 2.4 is confusing the
data and file descriptor. Lucky Ralf Hildebrandt. Files: data and file descriptor. Lucky Ralf Hildebrandt. Files:
util/sys_defs.h, global/scache_clnt,c, scache/scache.c. util/sys_defs.h, global/scache_clnt.c, scache/scache.c.
20040723 20040723
Bug? Safety? spawn(8) did not reject a user with the -1 Bug? Safety? spawn(8) did not reject a user with the -1
UID value, so the command was running as root. Files: UID value, so the command could run as root. Files:
util/spawn_command.c, src/util/spawn.c. util/spawn_command.c, src/util/spawn.c.
User interface: parameter smtp_connection_cache_domains User interface: parameter smtp_connection_cache_domains
@@ -9599,6 +9599,18 @@ Apologies for any names omitted.
Bugfix: "421 Timeout exceeded" wasn't guarded by setjmp(). Bugfix: "421 Timeout exceeded" wasn't guarded by setjmp().
Victor Duchovni, Morgan Stanley. File: smtpd/smtpd.c. Victor Duchovni, Morgan Stanley. File: smtpd/smtpd.c.
20040729
Feature: enable SMTP session caching temporarily while a
site has a high volume of mail in the active queue.
Parameter: smtp_connection_cache_on_demand (default:
yes). Files: smtp/smtp_connect.c, *qmgr/qmgr_entry.c,
*qmgr/qmgr_queue.c, *qmgr/qmgr_deliver.c.
Feature: smtp-source -N option to generate unique recipient
addresses for (trivial-rewrite) stress testing. Victor
Duchovni, Morgan Stanley. File: smtpstone/smtp-source.c.
Open problems: Open problems:
Low: update events.c so that 1-second timer requests do Low: update events.c so that 1-second timer requests do

View File

@@ -7,14 +7,30 @@ snapshot release). Patches are issued for the official release
and change the patchlevel and the release date. Patches are never and change the patchlevel and the release date. Patches are never
issued for snapshot releases. issued for snapshot releases.
Incompatible changes with snapshot Postfix-2.2-20040729
=======================================================
SMTP session caching is enabled temporarily when a destination has
a high volume of mail in the active queue. To disable, specify
"smtp_connection_cache_on_demand = no".
Major changes with snapshot Postfix-2.2-20040729
================================================
Opportunistic SMTP session caching. When a destination has a high
volume of mail in the active queue, SMTP session caching is enabled
temporarily. This is controlled with a new configuration parameter
"smtp_connection_cache_on_demand" (default: yes).
Incompatible changes with snapshot Postfix-2.2-20040723 Incompatible changes with snapshot Postfix-2.2-20040723
======================================================= =======================================================
Session caching is enabled with smtp_session_cache_destinations, Permanent SMTP session caching is now enabled with the
and requires "bare" domain names without "[]" or TCP port. This smtp_session_cache_destinations parameter. This requires "bare"
eliminates a syntax conflict between host:port and maptype:mapname, domain names without "[]" or TCP port. The change eliminates a
and simplifies the user interface, at the cost of a minor loss of syntax conflict between host:port and maptype:mapname, and simplifies
control over what sessions are cached. the user interface, at the cost of a minor loss of control over
what sessions are cached.
Major changes with snapshot Postfix-2.2-20040721 Major changes with snapshot Postfix-2.2-20040721
================================================ ================================================
@@ -38,10 +54,10 @@ The default SMTP/LMTP timeouts for sending RSET are reduced to 20s.
Major changes with snapshot Postfix-2.2-20040720 Major changes with snapshot Postfix-2.2-20040720
================================================ ================================================
Selective SMTP session caching. Instead of disconnecting immediately Selective permanent SMTP session caching. Instead of disconnecting
after a mail transaction, the SMTP client can save the open session immediately after a mail transaction, the SMTP client can save the
to a session cache daemon, so that any SMTP client process can use open session to a session cache daemon, so that any SMTP client
that session for another mail transaction. process can use that session for another mail transaction.
This feature introduces the scache (session cache) server, which This feature introduces the scache (session cache) server, which
is added to your master.cf file when you upgrade Postfix. is added to your master.cf file when you upgrade Postfix.

View File

@@ -5169,10 +5169,10 @@ The default time unit is s (seconds).
<DT><b><a name="smtp_connection_cache_destinations">smtp_connection_cache_destinations</a> <DT><b><a name="smtp_connection_cache_destinations">smtp_connection_cache_destinations</a>
(default: empty)</b></DT><DD> (default: empty)</b></DT><DD>
<p> The SMTP destinations for which SMTP connection caching is <p> Permanently enable SMTP connection caching for the specified
enabled. With SMTP connection caching, a connection is not closed destinations. With SMTP connection caching, a connection is not
immediately after completion of a mail transaction. Instead, the closed immediately after completion of a mail transaction. Instead,
connection is kept open for up to $<a href="postconf.5.html#smtp_connection_cache_time_limit">smtp_connection_cache_time_limit</a> the connection is kept open for up to $<a href="postconf.5.html#smtp_connection_cache_time_limit">smtp_connection_cache_time_limit</a>
seconds. This allows connections to be reused for other deliveries, seconds. This allows connections to be reused for other deliveries,
and can improve mail delivery performance. </p> and can improve mail delivery performance. </p>
@@ -5200,6 +5200,22 @@ ignored.
<p></p> <p></p>
</DD>
<DT><b><a name="smtp_connection_cache_on_demand">smtp_connection_cache_on_demand</a>
(default: yes)</b></DT><DD>
<p> Temporarily enable SMTP session caching while a destination
has a high volume of mail in the <a href="QSHAPE_README.html#active_queue">active queue</a>. With SMTP connection
caching, a connection is not closed immediately after completion
of a mail transaction. Instead, the connection is kept open for
up to $<a href="postconf.5.html#smtp_connection_cache_time_limit">smtp_connection_cache_time_limit</a> seconds. This allows
connections to be reused for other deliveries, and can improve mail
delivery performance. </p>
<p> This feature is available in Postfix 2.2 and later. </p>
</DD> </DD>
<DT><b><a name="smtp_connection_cache_reuse_limit">smtp_connection_cache_reuse_limit</a> <DT><b><a name="smtp_connection_cache_reuse_limit">smtp_connection_cache_reuse_limit</a>

View File

@@ -52,8 +52,15 @@ SMTP-SOURCE(1) SMTP-SOURCE(1)
<b>-m</b> <i>message</i><b>_</b><i>count</i> <b>-m</b> <i>message</i><b>_</b><i>count</i>
Send the specified number of messages (default: 1). Send the specified number of messages (default: 1).
<b>-N</b> Prepend a non-repeating sequence number to each
recipient address. This avoids the artificial 100%
hit rate in the resolve and rewrite client caches
and exercises the trivial-rewrite daemon, better
approximating Postfix performance under real-life
work-loads.
<b>-r</b> <i>recipient</i><b>_</b><i>count</i> <b>-r</b> <i>recipient</i><b>_</b><i>count</i>
Send the specified number of recipients per trans- Send the specified number of recipients per trans-
action (default: 1). Recipient names are generated action (default: 1). Recipient names are generated
by prepending a number to the recipient address. by prepending a number to the recipient address.
@@ -62,15 +69,15 @@ SMTP-SOURCE(1) SMTP-SOURCE(1)
lel (default: 1). lel (default: 1).
<b>-S</b> <i>subject</i> <b>-S</b> <i>subject</i>
Send mail with the named subject line (default: Send mail with the named subject line (default:
none). none).
<b>-t</b> <i>to</i> Use the specified recipient address (default: <b>-t</b> <i>to</i> Use the specified recipient address (default:
&lt;foo@<a href="postconf.5.html#myhostname">myhostname</a>&gt;). &lt;foo@<a href="postconf.5.html#myhostname">myhostname</a>&gt;).
<b>-R</b> <i>interval</i> <b>-R</b> <i>interval</i>
Wait for a random period of time 0 &lt;= n &lt;= interval Wait for a random period of time 0 &lt;= n &lt;= interval
between messages. Suspending one thread does not between messages. Suspending one thread does not
affect other delivery threads. affect other delivery threads.
<b>-w</b> <i>interval</i> <b>-w</b> <i>interval</i>
@@ -78,7 +85,7 @@ SMTP-SOURCE(1) SMTP-SOURCE(1)
thread does not affect other delivery threads. thread does not affect other delivery threads.
[<b>inet:</b>]<i>host</i>[:<i>port</i>] [<b>inet:</b>]<i>host</i>[:<i>port</i>]
Connect via TCP to host <i>host</i>, port <i>port</i>. The Connect via TCP to host <i>host</i>, port <i>port</i>. The
default port is <b>smtp</b>. default port is <b>smtp</b>.
<b>unix:</b><i>pathname</i> <b>unix:</b><i>pathname</i>
@@ -91,7 +98,7 @@ SMTP-SOURCE(1) SMTP-SOURCE(1)
<a href="smtp-sink.1.html">smtp-sink(1)</a>, SMTP/LMTP message dump <a href="smtp-sink.1.html">smtp-sink(1)</a>, SMTP/LMTP message dump
<b>LICENSE</b> <b>LICENSE</b>
The Secure Mailer license must be distributed with this The Secure Mailer license must be distributed with this
software. software.
<b>AUTHOR(S)</b> <b>AUTHOR(S)</b>

View File

@@ -37,11 +37,16 @@ SMTP(8) SMTP(8)
After a successful mail transaction, a session may be After a successful mail transaction, a session may be
saved to the <a href="scache.8.html"><b>scache(8)</a></b> session cache server, so that it saved to the <a href="scache.8.html"><b>scache(8)</a></b> session cache server, so that it
may be used by any SMTP client for a subsequent transac- may be used by any SMTP client for a subsequent transac-
tion. Session caching is disabled by default. tion.
By default, session caching is enabled temporarily for
destinations that have a high volume of mail in the active
queue. Session caching can be enabled permanently for spe-
cific destinations.
<b>SECURITY</b> <b>SECURITY</b>
The SMTP client is moderately security-sensitive. It talks The SMTP client is moderately security-sensitive. It talks
to SMTP servers and to DNS servers on the network. The to SMTP servers and to DNS servers on the network. The
SMTP client can be run chrooted at fixed low privilege. SMTP client can be run chrooted at fixed low privilege.
<b>STANDARDS</b> <b>STANDARDS</b>
@@ -57,30 +62,30 @@ SMTP(8) SMTP(8)
<a href="http://www.faqs.org/rfcs/rfc2920.html">RFC 2920</a> (SMTP Pipelining) <a href="http://www.faqs.org/rfcs/rfc2920.html">RFC 2920</a> (SMTP Pipelining)
<b>DIAGNOSTICS</b> <b>DIAGNOSTICS</b>
Problems and transactions are logged to <b>syslogd</b>(8). Cor- Problems and transactions are logged to <b>syslogd</b>(8). Cor-
rupted message files are marked so that the queue manager rupted message files are marked so that the queue manager
can move them to the <b>corrupt</b> queue for further inspection. can move them to the <b>corrupt</b> queue for further inspection.
Depending on the setting of the <b><a href="postconf.5.html#notify_classes">notify_classes</a></b> parameter, Depending on the setting of the <b><a href="postconf.5.html#notify_classes">notify_classes</a></b> parameter,
the postmaster is notified of bounces, protocol problems, the postmaster is notified of bounces, protocol problems,
and of other trouble. and of other trouble.
<b>BUGS</b> <b>BUGS</b>
SMTP session caching does not work with TLS. The necessary SMTP session caching does not work with TLS. The necessary
support for TLS object passivation and re-activation does support for TLS object passivation and re-activation does
not exist without closing the session, which defeats the not exist without closing the session, which defeats the
purpose. purpose.
SMTP session caching assumes that SASL credentials are SMTP session caching assumes that SASL credentials are
valid for all destinations that map onto the same IP valid for all destinations that map onto the same IP
address and TCP port. address and TCP port.
<b>CONFIGURATION PARAMETERS</b> <b>CONFIGURATION PARAMETERS</b>
Changes to <b>main.cf</b> are picked up automatically, as <a href="smtp.8.html">smtp(8)</a> Changes to <b>main.cf</b> are picked up automatically, as <a href="smtp.8.html">smtp(8)</a>
processes run for only a limited amount of time. Use the processes run for only a limited amount of time. Use the
command "<b>postfix reload</b>" to speed up a change. command "<b>postfix reload</b>" to speed up a change.
The text below provides only a parameter summary. See The text below provides only a parameter summary. See
<a href="postconf.5.html">postconf(5)</a> for more details including examples. <a href="postconf.5.html">postconf(5)</a> for more details including examples.
<b>COMPATIBILITY CONTROLS</b> <b>COMPATIBILITY CONTROLS</b>
@@ -94,7 +99,7 @@ SMTP(8) SMTP(8)
Never send EHLO at the start of an SMTP session. Never send EHLO at the start of an SMTP session.
<b><a href="postconf.5.html#smtp_defer_if_no_mx_address_found">smtp_defer_if_no_mx_address_found</a> (no)</b> <b><a href="postconf.5.html#smtp_defer_if_no_mx_address_found">smtp_defer_if_no_mx_address_found</a> (no)</b>
Defer mail delivery when no MX record resolves to Defer mail delivery when no MX record resolves to
an IP address. an IP address.
<b><a href="postconf.5.html#smtp_line_length_limit">smtp_line_length_limit</a> (990)</b> <b><a href="postconf.5.html#smtp_line_length_limit">smtp_line_length_limit</a> (990)</b>
@@ -102,17 +107,17 @@ SMTP(8) SMTP(8)
that Postfix will send via SMTP. that Postfix will send via SMTP.
<b><a href="postconf.5.html#smtp_pix_workaround_delay_time">smtp_pix_workaround_delay_time</a> (10s)</b> <b><a href="postconf.5.html#smtp_pix_workaround_delay_time">smtp_pix_workaround_delay_time</a> (10s)</b>
How long the Postfix SMTP client pauses before How long the Postfix SMTP client pauses before
sending ".&lt;CR&gt;&lt;LF&gt;" in order to work around the PIX sending ".&lt;CR&gt;&lt;LF&gt;" in order to work around the PIX
firewall "&lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;" bug. firewall "&lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;" bug.
<b><a href="postconf.5.html#smtp_pix_workaround_threshold_time">smtp_pix_workaround_threshold_time</a> (500s)</b> <b><a href="postconf.5.html#smtp_pix_workaround_threshold_time">smtp_pix_workaround_threshold_time</a> (500s)</b>
How long a message must be queued before the PIX How long a message must be queued before the PIX
firewall "&lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;" bug workaround is firewall "&lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;" bug workaround is
turned on. turned on.
<b><a href="postconf.5.html#smtp_quote_rfc821_envelope">smtp_quote_rfc821_envelope</a> (yes)</b> <b><a href="postconf.5.html#smtp_quote_rfc821_envelope">smtp_quote_rfc821_envelope</a> (yes)</b>
Quote addresses in SMTP MAIL FROM and RCPT TO com- Quote addresses in SMTP MAIL FROM and RCPT TO com-
mands as required by <a href="http://www.faqs.org/rfcs/rfc821.html">RFC 821</a>. mands as required by <a href="http://www.faqs.org/rfcs/rfc821.html">RFC 821</a>.
<b><a href="postconf.5.html#smtp_skip_5xx_greeting">smtp_skip_5xx_greeting</a> (yes)</b> <b><a href="postconf.5.html#smtp_skip_5xx_greeting">smtp_skip_5xx_greeting</a> (yes)</b>
@@ -120,7 +125,7 @@ SMTP(8) SMTP(8)
(go away, do not try again later). (go away, do not try again later).
<b><a href="postconf.5.html#smtp_skip_quit_response">smtp_skip_quit_response</a> (yes)</b> <b><a href="postconf.5.html#smtp_skip_quit_response">smtp_skip_quit_response</a> (yes)</b>
Do not wait for the response to the SMTP QUIT com- Do not wait for the response to the SMTP QUIT com-
mand. mand.
Available in Postfix version 2.0 and earlier: Available in Postfix version 2.0 and earlier:
@@ -133,7 +138,7 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.0 and later: Available in Postfix version 2.0 and later:
<b><a href="postconf.5.html#disable_mime_output_conversion">disable_mime_output_conversion</a> (no)</b> <b><a href="postconf.5.html#disable_mime_output_conversion">disable_mime_output_conversion</a> (no)</b>
Disable the conversion of 8BITMIME format to 7BIT Disable the conversion of 8BITMIME format to 7BIT
format. format.
<b><a href="postconf.5.html#mime_boundary_length_limit">mime_boundary_length_limit</a> (2048)</b> <b><a href="postconf.5.html#mime_boundary_length_limit">mime_boundary_length_limit</a> (2048)</b>
@@ -148,43 +153,43 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.1 and later: Available in Postfix version 2.1 and later:
<b><a href="postconf.5.html#smtp_send_xforward_command">smtp_send_xforward_command</a> (no)</b> <b><a href="postconf.5.html#smtp_send_xforward_command">smtp_send_xforward_command</a> (no)</b>
Send the non-standard XFORWARD command when the Send the non-standard XFORWARD command when the
Postfix SMTP server EHLO response announces XFOR- Postfix SMTP server EHLO response announces XFOR-
WARD support. WARD support.
<b>SASL AUTHENTICATION CONTROLS</b> <b>SASL AUTHENTICATION CONTROLS</b>
<b><a href="postconf.5.html#smtp_sasl_auth_enable">smtp_sasl_auth_enable</a> (no)</b> <b><a href="postconf.5.html#smtp_sasl_auth_enable">smtp_sasl_auth_enable</a> (no)</b>
Enable SASL authentication in the Postfix SMTP Enable SASL authentication in the Postfix SMTP
client. client.
<b><a href="postconf.5.html#smtp_sasl_password_maps">smtp_sasl_password_maps</a> (empty)</b> <b><a href="postconf.5.html#smtp_sasl_password_maps">smtp_sasl_password_maps</a> (empty)</b>
Optional SMTP client lookup tables with one user- Optional SMTP client lookup tables with one user-
name:password entry per remote hostname or domain. name:password entry per remote hostname or domain.
<b><a href="postconf.5.html#smtp_sasl_security_options">smtp_sasl_security_options</a> (noplaintext, noanonymous)</b> <b><a href="postconf.5.html#smtp_sasl_security_options">smtp_sasl_security_options</a> (noplaintext, noanonymous)</b>
What authentication mechanisms the Postfix SMTP What authentication mechanisms the Postfix SMTP
client is allowed to use. client is allowed to use.
<b>RESOURCE AND RATE CONTROLS</b> <b>RESOURCE AND RATE CONTROLS</b>
<b><a href="postconf.5.html#smtp_destination_concurrency_limit">smtp_destination_concurrency_limit</a> ($<a href="postconf.5.html#default_destination_concurrency_limit">default_destina</a>-</b> <b><a href="postconf.5.html#smtp_destination_concurrency_limit">smtp_destination_concurrency_limit</a> ($<a href="postconf.5.html#default_destination_concurrency_limit">default_destina</a>-</b>
<b><a href="postconf.5.html#default_destination_concurrency_limit">tion_concurrency_limit</a>)</b> <b><a href="postconf.5.html#default_destination_concurrency_limit">tion_concurrency_limit</a>)</b>
The maximal number of parallel deliveries to the The maximal number of parallel deliveries to the
same destination via the smtp message delivery same destination via the smtp message delivery
transport. transport.
<b><a href="postconf.5.html#smtp_destination_recipient_limit">smtp_destination_recipient_limit</a> ($<a href="postconf.5.html#default_destination_recipient_limit">default_destina</a>-</b> <b><a href="postconf.5.html#smtp_destination_recipient_limit">smtp_destination_recipient_limit</a> ($<a href="postconf.5.html#default_destination_recipient_limit">default_destina</a>-</b>
<b><a href="postconf.5.html#default_destination_recipient_limit">tion_recipient_limit</a>)</b> <b><a href="postconf.5.html#default_destination_recipient_limit">tion_recipient_limit</a>)</b>
The maximal number of recipients per delivery via The maximal number of recipients per delivery via
the smtp message delivery transport. the smtp message delivery transport.
<b><a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> (30s)</b> <b><a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> (30s)</b>
The SMTP client time limit for completing a TCP The SMTP client time limit for completing a TCP
connection, or zero (use the operating system connection, or zero (use the operating system
built-in time limit). built-in time limit).
<b><a href="postconf.5.html#smtp_helo_timeout">smtp_helo_timeout</a> (300s)</b> <b><a href="postconf.5.html#smtp_helo_timeout">smtp_helo_timeout</a> (300s)</b>
The SMTP client time limit for sending the HELO or The SMTP client time limit for sending the HELO or
EHLO command, and for receiving the initial server EHLO command, and for receiving the initial server
response. response.
<b><a href="postconf.5.html#smtp_xforward_timeout">smtp_xforward_timeout</a> (300s)</b> <b><a href="postconf.5.html#smtp_xforward_timeout">smtp_xforward_timeout</a> (300s)</b>
@@ -192,30 +197,30 @@ SMTP(8) SMTP(8)
command, and for receiving the server response. command, and for receiving the server response.
<b><a href="postconf.5.html#smtp_mail_timeout">smtp_mail_timeout</a> (300s)</b> <b><a href="postconf.5.html#smtp_mail_timeout">smtp_mail_timeout</a> (300s)</b>
The SMTP client time limit for sending the MAIL The SMTP client time limit for sending the MAIL
FROM command, and for receiving the server FROM command, and for receiving the server
response. response.
<b><a href="postconf.5.html#smtp_rcpt_timeout">smtp_rcpt_timeout</a> (300s)</b> <b><a href="postconf.5.html#smtp_rcpt_timeout">smtp_rcpt_timeout</a> (300s)</b>
The SMTP client time limit for sending the SMTP The SMTP client time limit for sending the SMTP
RCPT TO command, and for receiving the server RCPT TO command, and for receiving the server
response. response.
<b><a href="postconf.5.html#smtp_data_init_timeout">smtp_data_init_timeout</a> (120s)</b> <b><a href="postconf.5.html#smtp_data_init_timeout">smtp_data_init_timeout</a> (120s)</b>
The SMTP client time limit for sending the SMTP The SMTP client time limit for sending the SMTP
DATA command, and for receiving the server DATA command, and for receiving the server
response. response.
<b><a href="postconf.5.html#smtp_data_xfer_timeout">smtp_data_xfer_timeout</a> (180s)</b> <b><a href="postconf.5.html#smtp_data_xfer_timeout">smtp_data_xfer_timeout</a> (180s)</b>
The SMTP client time limit for sending the SMTP The SMTP client time limit for sending the SMTP
message content. message content.
<b><a href="postconf.5.html#smtp_data_done_timeout">smtp_data_done_timeout</a> (600s)</b> <b><a href="postconf.5.html#smtp_data_done_timeout">smtp_data_done_timeout</a> (600s)</b>
The SMTP client time limit for sending the SMTP The SMTP client time limit for sending the SMTP
".", and for receiving the server response. ".", and for receiving the server response.
<b><a href="postconf.5.html#smtp_quit_timeout">smtp_quit_timeout</a> (300s)</b> <b><a href="postconf.5.html#smtp_quit_timeout">smtp_quit_timeout</a> (300s)</b>
The SMTP client time limit for sending the QUIT The SMTP client time limit for sending the QUIT
command, and for receiving the server response. command, and for receiving the server response.
Available in Postfix version 2.1 and later: Available in Postfix version 2.1 and later:
@@ -226,23 +231,28 @@ SMTP(8) SMTP(8)
lookups, or zero (no limit). lookups, or zero (no limit).
<b><a href="postconf.5.html#smtp_mx_session_limit">smtp_mx_session_limit</a> (2)</b> <b><a href="postconf.5.html#smtp_mx_session_limit">smtp_mx_session_limit</a> (2)</b>
The maximal number of SMTP sessions per delivery The maximal number of SMTP sessions per delivery
request before giving up or delivering to a fall- request before giving up or delivering to a fall-
back relay host, or zero (no limit). back relay host, or zero (no limit).
<b><a href="postconf.5.html#smtp_rset_timeout">smtp_rset_timeout</a> (20s)</b> <b><a href="postconf.5.html#smtp_rset_timeout">smtp_rset_timeout</a> (20s)</b>
The SMTP client time limit for sending the RSET The SMTP client time limit for sending the RSET
command, and for receiving the server response. command, and for receiving the server response.
Available in Postfix version 2.2 and later: Available in Postfix version 2.2 and later:
<b><a href="postconf.5.html#smtp_connection_cache_destinations">smtp_connection_cache_destinations</a> (empty)</b> <b><a href="postconf.5.html#smtp_connection_cache_destinations">smtp_connection_cache_destinations</a> (empty)</b>
The SMTP destinations for which SMTP connection Permanently enable SMTP connection caching for the
caching is enabled. specified destinations.
<b>smtp_connection_cache_on_demand (yes)</b>
Temporarily enable SMTP session caching while a
destination has a high volume of mail in the active
queue.
<b><a href="postconf.5.html#smtp_connection_cache_reuse_limit">smtp_connection_cache_reuse_limit</a> (10)</b> <b><a href="postconf.5.html#smtp_connection_cache_reuse_limit">smtp_connection_cache_reuse_limit</a> (10)</b>
When SMTP session caching is enabled, the number of When SMTP session caching is enabled, the number of
times that an SMTP session is reused before it is times that an SMTP session is reused before it is
closed. closed.
<b><a href="postconf.5.html#smtp_connection_cache_time_limit">smtp_connection_cache_time_limit</a> (2s)</b> <b><a href="postconf.5.html#smtp_connection_cache_time_limit">smtp_connection_cache_time_limit</a> (2s)</b>
@@ -252,46 +262,46 @@ SMTP(8) SMTP(8)
<b>TROUBLE SHOOTING CONTROLS</b> <b>TROUBLE SHOOTING CONTROLS</b>
<b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b> <b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b>
The increment in verbose logging level when a The increment in verbose logging level when a
remote client or server matches a pattern in the remote client or server matches a pattern in the
<a href="postconf.5.html#debug_peer_list">debug_peer_list</a> parameter. <a href="postconf.5.html#debug_peer_list">debug_peer_list</a> parameter.
<b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a> (empty)</b> <b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a> (empty)</b>
Optional list of remote client or server hostname Optional list of remote client or server hostname
or network address patterns that cause the verbose or network address patterns that cause the verbose
logging level to increase by the amount specified logging level to increase by the amount specified
in $<a href="postconf.5.html#debug_peer_level">debug_peer_level</a>. in $<a href="postconf.5.html#debug_peer_level">debug_peer_level</a>.
<b><a href="postconf.5.html#error_notice_recipient">error_notice_recipient</a> (postmaster)</b> <b><a href="postconf.5.html#error_notice_recipient">error_notice_recipient</a> (postmaster)</b>
The recipient of postmaster notifications about The recipient of postmaster notifications about
mail delivery problems that are caused by policy, mail delivery problems that are caused by policy,
resource, software or protocol errors. resource, software or protocol errors.
<b><a href="postconf.5.html#notify_classes">notify_classes</a> (resource, software)</b> <b><a href="postconf.5.html#notify_classes">notify_classes</a> (resource, software)</b>
The list of error classes that are reported to the The list of error classes that are reported to the
postmaster. postmaster.
<b>MISCELLANEOUS CONTROLS</b> <b>MISCELLANEOUS CONTROLS</b>
<b><a href="postconf.5.html#best_mx_transport">best_mx_transport</a> (empty)</b> <b><a href="postconf.5.html#best_mx_transport">best_mx_transport</a> (empty)</b>
Where the Postfix SMTP client should deliver mail Where the Postfix SMTP client should deliver mail
when it detects a "mail loops back to myself" error when it detects a "mail loops back to myself" error
condition. condition.
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b> <b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
The default location of the Postfix main.cf and The default location of the Postfix main.cf and
master.cf configuration files. master.cf configuration files.
<b><a href="postconf.5.html#daemon_timeout">daemon_timeout</a> (18000s)</b> <b><a href="postconf.5.html#daemon_timeout">daemon_timeout</a> (18000s)</b>
How much time a Postfix daemon process may take to How much time a Postfix daemon process may take to
handle a request before it is terminated by a handle a request before it is terminated by a
built-in watchdog timer. built-in watchdog timer.
<b><a href="postconf.5.html#disable_dns_lookups">disable_dns_lookups</a> (no)</b> <b><a href="postconf.5.html#disable_dns_lookups">disable_dns_lookups</a> (no)</b>
Disable DNS lookups in the Postfix SMTP and LMTP Disable DNS lookups in the Postfix SMTP and LMTP
clients. clients.
<b><a href="postconf.5.html#fallback_relay">fallback_relay</a> (empty)</b> <b><a href="postconf.5.html#fallback_relay">fallback_relay</a> (empty)</b>
Optional list of relay hosts for SMTP destinations Optional list of relay hosts for SMTP destinations
that can't be found or that are unreachable. that can't be found or that are unreachable.
<b><a href="postconf.5.html#inet_interfaces">inet_interfaces</a> (all)</b> <b><a href="postconf.5.html#inet_interfaces">inet_interfaces</a> (all)</b>
@@ -303,25 +313,25 @@ SMTP(8) SMTP(8)
over an internal communication channel. over an internal communication channel.
<b><a href="postconf.5.html#max_idle">max_idle</a> (100s)</b> <b><a href="postconf.5.html#max_idle">max_idle</a> (100s)</b>
The maximum amount of time that an idle Postfix The maximum amount of time that an idle Postfix
daemon process waits for the next service request daemon process waits for the next service request
before exiting. before exiting.
<b><a href="postconf.5.html#max_use">max_use</a> (100)</b> <b><a href="postconf.5.html#max_use">max_use</a> (100)</b>
The maximal number of connection requests before a The maximal number of connection requests before a
Postfix daemon process terminates. Postfix daemon process terminates.
<b><a href="postconf.5.html#process_id">process_id</a> (read-only)</b> <b><a href="postconf.5.html#process_id">process_id</a> (read-only)</b>
The process ID of a Postfix command or daemon pro- The process ID of a Postfix command or daemon pro-
cess. cess.
<b><a href="postconf.5.html#process_name">process_name</a> (read-only)</b> <b><a href="postconf.5.html#process_name">process_name</a> (read-only)</b>
The process name of a Postfix command or daemon The process name of a Postfix command or daemon
process. process.
<b><a href="postconf.5.html#proxy_interfaces">proxy_interfaces</a> (empty)</b> <b><a href="postconf.5.html#proxy_interfaces">proxy_interfaces</a> (empty)</b>
The network interface addresses that this mail sys- The network interface addresses that this mail sys-
tem receives mail on by way of a proxy or network tem receives mail on by way of a proxy or network
address translation unit. address translation unit.
<b><a href="postconf.5.html#smtp_bind_address">smtp_bind_address</a> (empty)</b> <b><a href="postconf.5.html#smtp_bind_address">smtp_bind_address</a> (empty)</b>
@@ -329,22 +339,22 @@ SMTP(8) SMTP(8)
client should bind to when making a connection. client should bind to when making a connection.
<b><a href="postconf.5.html#smtp_helo_name">smtp_helo_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b> <b><a href="postconf.5.html#smtp_helo_name">smtp_helo_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
The hostname to send in the SMTP EHLO or HELO com- The hostname to send in the SMTP EHLO or HELO com-
mand. mand.
<b><a href="postconf.5.html#smtp_host_lookup">smtp_host_lookup</a> (dns)</b> <b><a href="postconf.5.html#smtp_host_lookup">smtp_host_lookup</a> (dns)</b>
What mechanisms when the SMTP client uses to look What mechanisms when the SMTP client uses to look
up a host's IP address. up a host's IP address.
<b><a href="postconf.5.html#smtp_randomize_addresses">smtp_randomize_addresses</a> (yes)</b> <b><a href="postconf.5.html#smtp_randomize_addresses">smtp_randomize_addresses</a> (yes)</b>
Randomize the order of equal-preference MX host Randomize the order of equal-preference MX host
addresses. addresses.
<b><a href="postconf.5.html#syslog_facility">syslog_facility</a> (mail)</b> <b><a href="postconf.5.html#syslog_facility">syslog_facility</a> (mail)</b>
The syslog facility of Postfix logging. The syslog facility of Postfix logging.
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (postfix)</b> <b><a href="postconf.5.html#syslog_name">syslog_name</a> (postfix)</b>
The mail system name that is prepended to the pro- The mail system name that is prepended to the pro-
cess name in syslog records, so that "smtpd" cess name in syslog records, so that "smtpd"
becomes, for example, "postfix/smtpd". becomes, for example, "postfix/smtpd".
@@ -360,7 +370,7 @@ SMTP(8) SMTP(8)
<a href="SASL_README.html">SASL_README</a>, Postfix SASL howto <a href="SASL_README.html">SASL_README</a>, Postfix SASL howto
<b>LICENSE</b> <b>LICENSE</b>
The Secure Mailer license must be distributed with this The Secure Mailer license must be distributed with this
software. software.
<b>AUTHOR(S)</b> <b>AUTHOR(S)</b>

View File

@@ -45,6 +45,12 @@ include message headers.
Speak LMTP rather than SMTP. Speak LMTP rather than SMTP.
.IP "\fB-m \fImessage_count\fR" .IP "\fB-m \fImessage_count\fR"
Send the specified number of messages (default: 1). Send the specified number of messages (default: 1).
.IP "\fB-N\fR"
Prepend a non-repeating sequence number to each recipient
address. This avoids the artificial 100% hit rate in the
resolve and rewrite client caches and exercises the
trivial-rewrite daemon, better approximating Postfix
performance under real-life work-loads.
.IP "\fB-r \fIrecipient_count\fR" .IP "\fB-r \fIrecipient_count\fR"
Send the specified number of recipients per transaction (default: 1). Send the specified number of recipients per transaction (default: 1).
Recipient names are generated by prepending a number to the Recipient names are generated by prepending a number to the

View File

@@ -2698,10 +2698,10 @@ the operating system).
Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).
The default time unit is s (seconds). The default time unit is s (seconds).
.SH smtp_connection_cache_destinations (default: empty) .SH smtp_connection_cache_destinations (default: empty)
The SMTP destinations for which SMTP connection caching is Permanently enable SMTP connection caching for the specified
enabled. With SMTP connection caching, a connection is not closed destinations. With SMTP connection caching, a connection is not
immediately after completion of a mail transaction. Instead, the closed immediately after completion of a mail transaction. Instead,
connection is kept open for up to $smtp_connection_cache_time_limit the connection is kept open for up to $smtp_connection_cache_time_limit
seconds. This allows connections to be reused for other deliveries, seconds. This allows connections to be reused for other deliveries,
and can improve mail delivery performance. and can improve mail delivery performance.
.PP .PP
@@ -2721,6 +2721,16 @@ a "type:table" with domains and/or relay hosts on the left-hand
side. The right-hand side result from "type:table" lookups is side. The right-hand side result from "type:table" lookups is
ignored. ignored.
.PP .PP
.SH smtp_connection_cache_on_demand (default: yes)
Temporarily enable SMTP session caching while a destination
has a high volume of mail in the active queue. With SMTP connection
caching, a connection is not closed immediately after completion
of a mail transaction. Instead, the connection is kept open for
up to $smtp_connection_cache_time_limit seconds. This allows
connections to be reused for other deliveries, and can improve mail
delivery performance.
.PP
This feature is available in Postfix 2.2 and later.
.SH smtp_connection_cache_reuse_limit (default: 10) .SH smtp_connection_cache_reuse_limit (default: 10)
When SMTP session caching is enabled, the number of times that When SMTP session caching is enabled, the number of times that
an SMTP session is reused before it is closed. an SMTP session is reused before it is closed.

View File

@@ -35,7 +35,11 @@ deliver the mail to an alternate host.
After a successful mail transaction, a session may be saved After a successful mail transaction, a session may be saved
to the \fBscache(8)\fR session cache server, so that it to the \fBscache(8)\fR session cache server, so that it
may be used by any SMTP client for a subsequent transaction. may be used by any SMTP client for a subsequent transaction.
Session caching is disabled by default.
By default, session caching is enabled temporarily for
destinations that have a high volume of mail in the active
queue. Session caching can be enabled permanently for
specific destinations.
.SH "SECURITY" .SH "SECURITY"
.na .na
.nf .nf
@@ -210,8 +214,11 @@ for receiving the server response.
.PP .PP
Available in Postfix version 2.2 and later: Available in Postfix version 2.2 and later:
.IP "\fBsmtp_connection_cache_destinations (empty)\fR" .IP "\fBsmtp_connection_cache_destinations (empty)\fR"
The SMTP destinations for which SMTP connection caching is Permanently enable SMTP connection caching for the specified
enabled. destinations.
.IP "\fBsmtp_connection_cache_on_demand (yes)\fR"
Temporarily enable SMTP session caching while a destination
has a high volume of mail in the active queue.
.IP "\fBsmtp_connection_cache_reuse_limit (10)\fR" .IP "\fBsmtp_connection_cache_reuse_limit (10)\fR"
When SMTP session caching is enabled, the number of times that When SMTP session caching is enabled, the number of times that
an SMTP session is reused before it is closed. an SMTP session is reused before it is closed.

View File

@@ -3187,10 +3187,10 @@ an SMTP session is reused before it is closed.
%PARAM smtp_connection_cache_destinations %PARAM smtp_connection_cache_destinations
<p> The SMTP destinations for which SMTP connection caching is <p> Permanently enable SMTP connection caching for the specified
enabled. With SMTP connection caching, a connection is not closed destinations. With SMTP connection caching, a connection is not
immediately after completion of a mail transaction. Instead, the closed immediately after completion of a mail transaction. Instead,
connection is kept open for up to $smtp_connection_cache_time_limit the connection is kept open for up to $smtp_connection_cache_time_limit
seconds. This allows connections to be reused for other deliveries, seconds. This allows connections to be reused for other deliveries,
and can improve mail delivery performance. </p> and can improve mail delivery performance. </p>
@@ -3217,6 +3217,18 @@ ignored.
<p></p> <p></p>
%PARAM smtp_connection_cache_on_demand yes
<p> Temporarily enable SMTP session caching while a destination
has a high volume of mail in the active queue. With SMTP connection
caching, a connection is not closed immediately after completion
of a mail transaction. Instead, the connection is kept open for
up to $smtp_connection_cache_time_limit seconds. This allows
connections to be reused for other deliveries, and can improve mail
delivery performance. </p>
<p> This feature is available in Postfix 2.2 and later. </p>
%PARAM smtp_connect_timeout 30s %PARAM smtp_connect_timeout 30s
<p> <p>

View File

@@ -62,6 +62,7 @@ typedef struct DELIVER_REQUEST {
#define DEL_REQ_FLAG_VERIFY (1<<8) /* verify recipient, don't deliver */ #define DEL_REQ_FLAG_VERIFY (1<<8) /* verify recipient, don't deliver */
#define DEL_REQ_FLAG_EXPAND (1<<9) /* verify expansion, don't deliver */ #define DEL_REQ_FLAG_EXPAND (1<<9) /* verify expansion, don't deliver */
#define DEL_REQ_FLAG_RECORD (1<<10) /* record and deliver */ #define DEL_REQ_FLAG_RECORD (1<<10) /* record and deliver */
#define DEL_REQ_FLAG_SCACHE (1<<11) /* opportunistic caching */
#define DEL_REQ_TRACE_FLAGS_MASK \ #define DEL_REQ_TRACE_FLAGS_MASK \
(DEL_REQ_FLAG_VERIFY | DEL_REQ_FLAG_EXPAND | DEL_REQ_FLAG_RECORD) (DEL_REQ_FLAG_VERIFY | DEL_REQ_FLAG_EXPAND | DEL_REQ_FLAG_RECORD)

View File

@@ -781,6 +781,10 @@ extern int var_smtp_reuse_limit;
#define DEF_SMTP_CACHE_DEST "" #define DEF_SMTP_CACHE_DEST ""
extern char *var_smtp_cache_dest; extern char *var_smtp_cache_dest;
#define VAR_SMTP_CACHE_DEMAND "smtp_connection_cache_on_demand"
#define DEF_SMTP_CACHE_DEMAND 1
extern bool var_smtp_cache_demand;
#define VAR_SMTP_CONN_TMOUT "smtp_connect_timeout" #define VAR_SMTP_CONN_TMOUT "smtp_connect_timeout"
#define DEF_SMTP_CONN_TMOUT "30s" #define DEF_SMTP_CONN_TMOUT "30s"
extern int var_smtp_conn_tmout; extern int var_smtp_conn_tmout;

View File

@@ -20,7 +20,7 @@
* Patches change the patchlevel and the release date. Snapshots change the * Patches change the patchlevel and the release date. Snapshots change the
* release date only. * release date only.
*/ */
#define MAIL_RELEASE_DATE "20040723" #define MAIL_RELEASE_DATE "20040729"
#define MAIL_VERSION_NUMBER "2.2" #define MAIL_VERSION_NUMBER "2.2"
#define VAR_MAIL_VERSION "mail_version" #define VAR_MAIL_VERSION "mail_version"

View File

@@ -155,6 +155,9 @@ qmgr_entry.o: ../../include/events.h
qmgr_entry.o: ../../include/vstream.h qmgr_entry.o: ../../include/vstream.h
qmgr_entry.o: ../../include/vbuf.h qmgr_entry.o: ../../include/vbuf.h
qmgr_entry.o: ../../include/mail_params.h qmgr_entry.o: ../../include/mail_params.h
qmgr_entry.o: ../../include/deliver_request.h
qmgr_entry.o: ../../include/vstring.h
qmgr_entry.o: ../../include/recipient_list.h
qmgr_entry.o: qmgr.h qmgr_entry.o: qmgr.h
qmgr_entry.o: ../../include/scan_dir.h qmgr_entry.o: ../../include/scan_dir.h
qmgr_message.o: qmgr_message.c qmgr_message.o: qmgr_message.c

View File

@@ -140,6 +140,7 @@ struct QMGR_ENTRY_LIST {
}; };
struct QMGR_QUEUE { struct QMGR_QUEUE {
int dflags; /* delivery request options */
char *name; /* domain name or address */ char *name; /* domain name or address */
char *nexthop; /* domain name */ char *nexthop; /* domain name */
int todo_refcount; /* queue entries (todo list) */ int todo_refcount; /* queue entries (todo list) */

View File

@@ -143,6 +143,7 @@ static int qmgr_deliver_send_request(QMGR_ENTRY *entry, VSTREAM *stream)
} }
flags = message->tflags flags = message->tflags
| entry->queue->dflags
| (message->inspect_xport ? DEL_REQ_FLAG_BOUNCE : DEL_REQ_FLAG_DEFLT); | (message->inspect_xport ? DEL_REQ_FLAG_BOUNCE : DEL_REQ_FLAG_DEFLT);
attr_print(stream, ATTR_FLAG_MORE, attr_print(stream, ATTR_FLAG_MORE,
ATTR_TYPE_NUM, MAIL_ATTR_FLAGS, flags, ATTR_TYPE_NUM, MAIL_ATTR_FLAGS, flags,

View File

@@ -84,6 +84,7 @@
/* Global library. */ /* Global library. */
#include <mail_params.h> #include <mail_params.h>
#include <deliver_request.h> /* opportunistic session caching */
/* Application-specific. */ /* Application-specific. */
@@ -187,6 +188,7 @@ void qmgr_entry_done(QMGR_ENTRY *entry, int which)
QMGR_ENTRY *qmgr_entry_create(QMGR_QUEUE *queue, QMGR_MESSAGE *message) QMGR_ENTRY *qmgr_entry_create(QMGR_QUEUE *queue, QMGR_MESSAGE *message)
{ {
char *myname = "qmgr_entry_create";
QMGR_ENTRY *entry; QMGR_ENTRY *entry;
/* /*
@@ -207,6 +209,22 @@ QMGR_ENTRY *qmgr_entry_create(QMGR_QUEUE *queue, QMGR_MESSAGE *message)
QMGR_LIST_APPEND(queue->todo, entry); QMGR_LIST_APPEND(queue->todo, entry);
queue->todo_refcount++; queue->todo_refcount++;
/*
* With opportunistic session caching, the delivery agent must not only
* 1) save a session upon completion, but also 2) reuse a cached session
* upon the next delivery request. In order to not miss out on 2), we
* have to make caching sticky or else we get silly behavior when the
* in-memory queue drains. New connections must not be made while cached
* connections aren't being reused.
*/
if ((queue->dflags & DEL_REQ_FLAG_SCACHE) == 0
&& queue->window < queue->todo_refcount + queue->busy_refcount) {
if (msg_verbose)
msg_info("%s: passing on-demand session caching threshold for %s",
myname, queue->name);
queue->dflags |= DEL_REQ_FLAG_SCACHE;
}
/* /*
* Warn if a destination is falling behind while the active queue * Warn if a destination is falling behind while the active queue
* contains a non-trivial amount of single-recipient email. When a * contains a non-trivial amount of single-recipient email. When a

View File

@@ -183,6 +183,7 @@ void qmgr_queue_throttle(QMGR_QUEUE *queue, const char *reason)
queue->reason = mystrdup(reason); queue->reason = mystrdup(reason);
event_request_timer(qmgr_queue_unthrottle_wrapper, event_request_timer(qmgr_queue_unthrottle_wrapper,
(char *) queue, var_min_backoff_time); (char *) queue, var_min_backoff_time);
queue->dflags = 0;
} }
} }
@@ -254,6 +255,7 @@ QMGR_QUEUE *qmgr_queue_create(QMGR_TRANSPORT *transport, const char *name,
queue = (QMGR_QUEUE *) mymalloc(sizeof(QMGR_QUEUE)); queue = (QMGR_QUEUE *) mymalloc(sizeof(QMGR_QUEUE));
qmgr_queue_count++; qmgr_queue_count++;
queue->dflags = 0;
queue->name = mystrdup(name); queue->name = mystrdup(name);
queue->nexthop = mystrdup(nexthop); queue->nexthop = mystrdup(nexthop);
queue->todo_refcount = 0; queue->todo_refcount = 0;

View File

@@ -157,6 +157,9 @@ qmgr_entry.o: ../../include/events.h
qmgr_entry.o: ../../include/vstream.h qmgr_entry.o: ../../include/vstream.h
qmgr_entry.o: ../../include/vbuf.h qmgr_entry.o: ../../include/vbuf.h
qmgr_entry.o: ../../include/mail_params.h qmgr_entry.o: ../../include/mail_params.h
qmgr_entry.o: ../../include/deliver_request.h
qmgr_entry.o: ../../include/vstring.h
qmgr_entry.o: ../../include/recipient_list.h
qmgr_entry.o: qmgr.h qmgr_entry.o: qmgr.h
qmgr_entry.o: ../../include/scan_dir.h qmgr_entry.o: ../../include/scan_dir.h
qmgr_job.o: qmgr_job.c qmgr_job.o: qmgr_job.c

View File

@@ -176,6 +176,7 @@ struct QMGR_ENTRY_LIST {
}; };
struct QMGR_QUEUE { struct QMGR_QUEUE {
int dflags; /* delivery request options */
char *name; /* domain name or address */ char *name; /* domain name or address */
char *nexthop; /* domain name */ char *nexthop; /* domain name */
int todo_refcount; /* queue entries (todo list) */ int todo_refcount; /* queue entries (todo list) */

View File

@@ -148,6 +148,7 @@ static int qmgr_deliver_send_request(QMGR_ENTRY *entry, VSTREAM *stream)
} }
flags = message->tflags flags = message->tflags
| entry->queue->dflags
| (message->inspect_xport ? DEL_REQ_FLAG_BOUNCE : DEL_REQ_FLAG_DEFLT); | (message->inspect_xport ? DEL_REQ_FLAG_BOUNCE : DEL_REQ_FLAG_DEFLT);
attr_print(stream, ATTR_FLAG_MORE, attr_print(stream, ATTR_FLAG_MORE,
ATTR_TYPE_NUM, MAIL_ATTR_FLAGS, flags, ATTR_TYPE_NUM, MAIL_ATTR_FLAGS, flags,

View File

@@ -92,6 +92,7 @@
/* Global library. */ /* Global library. */
#include <mail_params.h> #include <mail_params.h>
#include <deliver_request.h> /* opportunistic session caching */
/* Application-specific. */ /* Application-specific. */
@@ -244,6 +245,7 @@ void qmgr_entry_done(QMGR_ENTRY *entry, int which)
QMGR_ENTRY *qmgr_entry_create(QMGR_PEER *peer, QMGR_MESSAGE *message) QMGR_ENTRY *qmgr_entry_create(QMGR_PEER *peer, QMGR_MESSAGE *message)
{ {
char *myname = "qmgr_entry_create";
QMGR_ENTRY *entry; QMGR_ENTRY *entry;
QMGR_QUEUE *queue = peer->queue; QMGR_QUEUE *queue = peer->queue;
@@ -268,6 +270,22 @@ QMGR_ENTRY *qmgr_entry_create(QMGR_PEER *peer, QMGR_MESSAGE *message)
QMGR_LIST_APPEND(queue->todo, entry, queue_peers); QMGR_LIST_APPEND(queue->todo, entry, queue_peers);
queue->todo_refcount++; queue->todo_refcount++;
/*
* With opportunistic session caching, the delivery agent must not only
* 1) save a session upon completion, but also 2) reuse a cached session
* upon the next delivery request. In order to not miss out on 2), we
* have to make caching sticky or else we get silly behavior when the
* in-memory queue drains. New connections must not be made while cached
* connections aren't being reused.
*/
if ((queue->dflags & DEL_REQ_FLAG_SCACHE) == 0
&& queue->window < queue->todo_refcount + queue->busy_refcount) {
if (msg_verbose)
msg_info("%s: passing on-demand session caching threshold for %s",
myname, queue->name);
queue->dflags |= DEL_REQ_FLAG_SCACHE;
}
/* /*
* Warn if a destination is falling behind while the active queue * Warn if a destination is falling behind while the active queue
* contains a non-trivial amount of single-recipient email. When a * contains a non-trivial amount of single-recipient email. When a

View File

@@ -181,6 +181,7 @@ void qmgr_queue_throttle(QMGR_QUEUE *queue, const char *reason)
queue->reason = mystrdup(reason); queue->reason = mystrdup(reason);
event_request_timer(qmgr_queue_unthrottle_wrapper, event_request_timer(qmgr_queue_unthrottle_wrapper,
(char *) queue, var_min_backoff_time); (char *) queue, var_min_backoff_time);
queue->dflags = 0;
} }
} }
@@ -231,6 +232,7 @@ QMGR_QUEUE *qmgr_queue_create(QMGR_TRANSPORT *transport, const char *name,
queue = (QMGR_QUEUE *) mymalloc(sizeof(QMGR_QUEUE)); queue = (QMGR_QUEUE *) mymalloc(sizeof(QMGR_QUEUE));
qmgr_queue_count++; qmgr_queue_count++;
queue->dflags = 0;
queue->name = mystrdup(name); queue->name = mystrdup(name);
queue->nexthop = mystrdup(nexthop); queue->nexthop = mystrdup(nexthop);
queue->todo_refcount = 0; queue->todo_refcount = 0;

View File

@@ -29,7 +29,11 @@
/* After a successful mail transaction, a session may be saved /* After a successful mail transaction, a session may be saved
/* to the \fBscache(8)\fR session cache server, so that it /* to the \fBscache(8)\fR session cache server, so that it
/* may be used by any SMTP client for a subsequent transaction. /* may be used by any SMTP client for a subsequent transaction.
/* Session caching is disabled by default. /*
/* By default, session caching is enabled temporarily for
/* destinations that have a high volume of mail in the active
/* queue. Session caching can be enabled permanently for
/* specific destinations.
/* SECURITY /* SECURITY
/* .ad /* .ad
/* .fi /* .fi
@@ -184,8 +188,11 @@
/* .PP /* .PP
/* Available in Postfix version 2.2 and later: /* Available in Postfix version 2.2 and later:
/* .IP "\fBsmtp_connection_cache_destinations (empty)\fR" /* .IP "\fBsmtp_connection_cache_destinations (empty)\fR"
/* The SMTP destinations for which SMTP connection caching is /* Permanently enable SMTP connection caching for the specified
/* enabled. /* destinations.
/* .IP "\fBsmtp_connection_cache_on_demand (yes)\fR"
/* Temporarily enable SMTP session caching while a destination
/* has a high volume of mail in the active queue.
/* .IP "\fBsmtp_connection_cache_reuse_limit (10)\fR" /* .IP "\fBsmtp_connection_cache_reuse_limit (10)\fR"
/* When SMTP session caching is enabled, the number of times that /* When SMTP session caching is enabled, the number of times that
/* an SMTP session is reused before it is closed. /* an SMTP session is reused before it is closed.
@@ -374,6 +381,7 @@ int var_smtp_cache_conn;
int var_smtp_reuse_limit; int var_smtp_reuse_limit;
char *var_smtp_cache_dest; char *var_smtp_cache_dest;
char *var_scache_service; char *var_scache_service;
bool var_smtp_cache_demand;
/* /*
* Global variables. smtp_errno is set by the address lookup routines and by * Global variables. smtp_errno is set by the address lookup routines and by
@@ -489,7 +497,7 @@ static void post_init(char *unused_name, char **unused_argv)
/* /*
* Session cache instance. * Session cache instance.
*/ */
if (*var_smtp_cache_dest) if (*var_smtp_cache_dest || var_smtp_cache_demand)
#if 0 #if 0
smtp_scache = scache_multi_create(); smtp_scache = scache_multi_create();
#else #else
@@ -601,6 +609,7 @@ int main(int argc, char **argv)
VAR_SMTP_QUOTE_821_ENV, DEF_SMTP_QUOTE_821_ENV, &var_smtp_quote_821_env, VAR_SMTP_QUOTE_821_ENV, DEF_SMTP_QUOTE_821_ENV, &var_smtp_quote_821_env,
VAR_SMTP_DEFER_MXADDR, DEF_SMTP_DEFER_MXADDR, &var_smtp_defer_mxaddr, VAR_SMTP_DEFER_MXADDR, DEF_SMTP_DEFER_MXADDR, &var_smtp_defer_mxaddr,
VAR_SMTP_SEND_XFORWARD, DEF_SMTP_SEND_XFORWARD, &var_smtp_send_xforward, VAR_SMTP_SEND_XFORWARD, DEF_SMTP_SEND_XFORWARD, &var_smtp_send_xforward,
VAR_SMTP_CACHE_DEMAND, DEF_SMTP_CACHE_DEMAND, &var_smtp_cache_demand,
0, 0,
}; };

View File

@@ -521,10 +521,14 @@ int smtp_connect(SMTP_STATE *state)
* :port, because : is already used for maptype:mapname. Because of * :port, because : is already used for maptype:mapname. Because of
* this limitation we use the bare domain without the optional [] or * this limitation we use the bare domain without the optional [] or
* non-default TCP port. * non-default TCP port.
*
* Opportunistic (a.k.a. on-demand) session caching on request by the
* queue manager. This is turned temporarily when a destination has a
* high volume of mail in the active queue.
*/ */
if (cpp == sites->argv if (cpp == sites->argv
&& smtp_cache_dest && ((request->flags & DEL_REQ_FLAG_SCACHE) != 0
&& string_list_match(smtp_cache_dest, domain)) { || (smtp_cache_dest && string_list_match(smtp_cache_dest, domain)))) {
sess_flags |= SMTP_SESS_FLAG_CACHE; sess_flags |= SMTP_SESS_FLAG_CACHE;
SET_NEXTHOP_STATE(state, lookup_mx, domain, port); SET_NEXTHOP_STATE(state, lookup_mx, domain, port);
} }

View File

@@ -39,6 +39,12 @@
/* Speak LMTP rather than SMTP. /* Speak LMTP rather than SMTP.
/* .IP "\fB-m \fImessage_count\fR" /* .IP "\fB-m \fImessage_count\fR"
/* Send the specified number of messages (default: 1). /* Send the specified number of messages (default: 1).
/* .IP "\fB-N\fR"
/* Prepend a non-repeating sequence number to each recipient
/* address. This avoids the artificial 100% hit rate in the
/* resolve and rewrite client caches and exercises the
/* trivial-rewrite daemon, better approximating Postfix
/* performance under real-life work-loads.
/* .IP "\fB-r \fIrecipient_count\fR" /* .IP "\fB-r \fIrecipient_count\fR"
/* Send the specified number of recipients per transaction (default: 1). /* Send the specified number of recipients per transaction (default: 1).
/* Recipient names are generated by prepending a number to the /* Recipient names are generated by prepending a number to the
@@ -171,6 +177,7 @@ static int random_delay = 0;
static int fixed_delay = 0; static int fixed_delay = 0;
static int talk_lmtp = 0; static int talk_lmtp = 0;
static char *subject = 0; static char *subject = 0;
static int number_rcpts = 0;
static void enqueue_connect(SESSION *); static void enqueue_connect(SESSION *);
static void start_connect(SESSION *); static void start_connect(SESSION *);
@@ -573,9 +580,10 @@ static void send_rcpt(int unused_event, char *context)
if ((except = vstream_setjmp(session->stream)) != 0) if ((except = vstream_setjmp(session->stream)) != 0)
msg_fatal("%s while sending recipient", exception_text(except)); msg_fatal("%s while sending recipient", exception_text(except));
if (session->rcpt_count > 1) if (session->rcpt_count > 1 || number_rcpts > 0)
command(session->stream, "RCPT TO:<%d%s>", command(session->stream, "RCPT TO:<%d%s>",
session->rcpt_count, recipient); number_rcpts ? number_rcpts++ : session->rcpt_count,
recipient);
else else
command(session->stream, "RCPT TO:<%s>", recipient); command(session->stream, "RCPT TO:<%s>", recipient);
session->rcpt_count--; session->rcpt_count--;
@@ -767,7 +775,7 @@ static void quit_done(int unused_event, char *context)
static void usage(char *myname) static void usage(char *myname)
{ {
msg_fatal("usage: %s -s sess -l msglen -m msgs -c -C count -d -f from -o -t to -r rcptcount -R delay -v -w delay host[:port]", myname); msg_fatal("usage: %s -cdLNov -s sess -l msglen -m msgs -C count -f from -t to -r rcptcount -R delay -w delay host[:port]", myname);
} }
/* main - parse JCL and start the machine */ /* main - parse JCL and start the machine */
@@ -789,7 +797,7 @@ int main(int argc, char **argv)
/* /*
* Parse JCL. * Parse JCL.
*/ */
while ((ch = GETOPT(argc, argv, "cC:df:l:Lm:or:R:s:S:t:vw:")) > 0) { while ((ch = GETOPT(argc, argv, "cC:df:l:Lm:Nor:R:s:S:t:vw:")) > 0) {
switch (ch) { switch (ch) {
case 'c': case 'c':
count++; count++;
@@ -822,6 +830,9 @@ int main(int argc, char **argv)
if ((message_count = atoi(optarg)) <= 0) if ((message_count = atoi(optarg)) <= 0)
msg_fatal("bad message count: %s", optarg); msg_fatal("bad message count: %s", optarg);
break; break;
case 'N':
number_rcpts = 1;
break;
case 'o': case 'o':
send_helo_first = 0; send_helo_first = 0;
send_headers = 0; send_headers = 0;