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:
committed by
Viktor Dukhovni
parent
e65de76573
commit
539ba25d8b
@@ -9583,12 +9583,12 @@ Apologies for any names omitted.
|
||||
recvmsg(). Workaround is to insert an intervening read
|
||||
(write) operation. Presumably, LINUX 2.4 is confusing the
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
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().
|
||||
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:
|
||||
|
||||
Low: update events.c so that 1-second timer requests do
|
||||
|
@@ -7,14 +7,30 @@ snapshot release). Patches are issued for the official release
|
||||
and change the patchlevel and the release date. Patches are never
|
||||
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
|
||||
=======================================================
|
||||
|
||||
Session caching is enabled with smtp_session_cache_destinations,
|
||||
and requires "bare" domain names without "[]" or TCP port. This
|
||||
eliminates a syntax conflict between host:port and maptype:mapname,
|
||||
and simplifies the user interface, at the cost of a minor loss of
|
||||
control over what sessions are cached.
|
||||
Permanent SMTP session caching is now enabled with the
|
||||
smtp_session_cache_destinations parameter. This requires "bare"
|
||||
domain names without "[]" or TCP port. The change eliminates a
|
||||
syntax conflict between host:port and maptype:mapname, and simplifies
|
||||
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
|
||||
================================================
|
||||
@@ -38,10 +54,10 @@ The default SMTP/LMTP timeouts for sending RSET are reduced to 20s.
|
||||
Major changes with snapshot Postfix-2.2-20040720
|
||||
================================================
|
||||
|
||||
Selective SMTP session caching. Instead of disconnecting immediately
|
||||
after a mail transaction, the SMTP client can save the open session
|
||||
to a session cache daemon, so that any SMTP client process can use
|
||||
that session for another mail transaction.
|
||||
Selective permanent SMTP session caching. Instead of disconnecting
|
||||
immediately after a mail transaction, the SMTP client can save the
|
||||
open session to a session cache daemon, so that any SMTP client
|
||||
process can use that session for another mail transaction.
|
||||
|
||||
This feature introduces the scache (session cache) server, which
|
||||
is added to your master.cf file when you upgrade Postfix.
|
||||
|
@@ -5169,10 +5169,10 @@ The default time unit is s (seconds).
|
||||
<DT><b><a name="smtp_connection_cache_destinations">smtp_connection_cache_destinations</a>
|
||||
(default: empty)</b></DT><DD>
|
||||
|
||||
<p> The SMTP destinations for which SMTP connection caching is
|
||||
enabled. 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>
|
||||
<p> Permanently enable SMTP connection caching for the specified
|
||||
destinations. 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>
|
||||
|
||||
@@ -5200,6 +5200,22 @@ ignored.
|
||||
<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>
|
||||
|
||||
<DT><b><a name="smtp_connection_cache_reuse_limit">smtp_connection_cache_reuse_limit</a>
|
||||
|
@@ -52,6 +52,13 @@ SMTP-SOURCE(1) SMTP-SOURCE(1)
|
||||
<b>-m</b> <i>message</i><b>_</b><i>count</i>
|
||||
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>
|
||||
Send the specified number of recipients per trans-
|
||||
action (default: 1). Recipient names are generated
|
||||
|
@@ -37,7 +37,12 @@ SMTP(8) SMTP(8)
|
||||
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
|
||||
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>
|
||||
The SMTP client is moderately security-sensitive. It talks
|
||||
@@ -237,8 +242,13 @@ SMTP(8) SMTP(8)
|
||||
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>
|
||||
The SMTP destinations for which SMTP connection
|
||||
caching is enabled.
|
||||
Permanently enable SMTP connection caching for the
|
||||
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>
|
||||
When SMTP session caching is enabled, the number of
|
||||
|
@@ -45,6 +45,12 @@ include message headers.
|
||||
Speak LMTP rather than SMTP.
|
||||
.IP "\fB-m \fImessage_count\fR"
|
||||
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"
|
||||
Send the specified number of recipients per transaction (default: 1).
|
||||
Recipient names are generated by prepending a number to the
|
||||
|
@@ -2698,10 +2698,10 @@ the operating system).
|
||||
Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).
|
||||
The default time unit is s (seconds).
|
||||
.SH smtp_connection_cache_destinations (default: empty)
|
||||
The SMTP destinations for which SMTP connection caching is
|
||||
enabled. 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
|
||||
Permanently enable SMTP connection caching for the specified
|
||||
destinations. 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
|
||||
@@ -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
|
||||
ignored.
|
||||
.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)
|
||||
When SMTP session caching is enabled, the number of times that
|
||||
an SMTP session is reused before it is closed.
|
||||
|
@@ -35,7 +35,11 @@ deliver the mail to an alternate host.
|
||||
After a successful mail transaction, a session may be saved
|
||||
to the \fBscache(8)\fR session cache server, so that it
|
||||
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"
|
||||
.na
|
||||
.nf
|
||||
@@ -210,8 +214,11 @@ for receiving the server response.
|
||||
.PP
|
||||
Available in Postfix version 2.2 and later:
|
||||
.IP "\fBsmtp_connection_cache_destinations (empty)\fR"
|
||||
The SMTP destinations for which SMTP connection caching is
|
||||
enabled.
|
||||
Permanently enable SMTP connection caching for the specified
|
||||
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"
|
||||
When SMTP session caching is enabled, the number of times that
|
||||
an SMTP session is reused before it is closed.
|
||||
|
@@ -3187,10 +3187,10 @@ an SMTP session is reused before it is closed.
|
||||
|
||||
%PARAM smtp_connection_cache_destinations
|
||||
|
||||
<p> The SMTP destinations for which SMTP connection caching is
|
||||
enabled. 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
|
||||
<p> Permanently enable SMTP connection caching for the specified
|
||||
destinations. 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>
|
||||
|
||||
@@ -3217,6 +3217,18 @@ ignored.
|
||||
|
||||
<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
|
||||
|
||||
<p>
|
||||
|
@@ -62,6 +62,7 @@ typedef struct DELIVER_REQUEST {
|
||||
#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_RECORD (1<<10) /* record and deliver */
|
||||
#define DEL_REQ_FLAG_SCACHE (1<<11) /* opportunistic caching */
|
||||
|
||||
#define DEL_REQ_TRACE_FLAGS_MASK \
|
||||
(DEL_REQ_FLAG_VERIFY | DEL_REQ_FLAG_EXPAND | DEL_REQ_FLAG_RECORD)
|
||||
|
@@ -781,6 +781,10 @@ extern int var_smtp_reuse_limit;
|
||||
#define DEF_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 DEF_SMTP_CONN_TMOUT "30s"
|
||||
extern int var_smtp_conn_tmout;
|
||||
|
@@ -20,7 +20,7 @@
|
||||
* Patches change the patchlevel and the release date. Snapshots change the
|
||||
* release date only.
|
||||
*/
|
||||
#define MAIL_RELEASE_DATE "20040723"
|
||||
#define MAIL_RELEASE_DATE "20040729"
|
||||
#define MAIL_VERSION_NUMBER "2.2"
|
||||
|
||||
#define VAR_MAIL_VERSION "mail_version"
|
||||
|
@@ -155,6 +155,9 @@ qmgr_entry.o: ../../include/events.h
|
||||
qmgr_entry.o: ../../include/vstream.h
|
||||
qmgr_entry.o: ../../include/vbuf.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: ../../include/scan_dir.h
|
||||
qmgr_message.o: qmgr_message.c
|
||||
|
@@ -140,6 +140,7 @@ struct QMGR_ENTRY_LIST {
|
||||
};
|
||||
|
||||
struct QMGR_QUEUE {
|
||||
int dflags; /* delivery request options */
|
||||
char *name; /* domain name or address */
|
||||
char *nexthop; /* domain name */
|
||||
int todo_refcount; /* queue entries (todo list) */
|
||||
|
@@ -143,6 +143,7 @@ static int qmgr_deliver_send_request(QMGR_ENTRY *entry, VSTREAM *stream)
|
||||
}
|
||||
|
||||
flags = message->tflags
|
||||
| entry->queue->dflags
|
||||
| (message->inspect_xport ? DEL_REQ_FLAG_BOUNCE : DEL_REQ_FLAG_DEFLT);
|
||||
attr_print(stream, ATTR_FLAG_MORE,
|
||||
ATTR_TYPE_NUM, MAIL_ATTR_FLAGS, flags,
|
||||
|
@@ -84,6 +84,7 @@
|
||||
/* Global library. */
|
||||
|
||||
#include <mail_params.h>
|
||||
#include <deliver_request.h> /* opportunistic session caching */
|
||||
|
||||
/* 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)
|
||||
{
|
||||
char *myname = "qmgr_entry_create";
|
||||
QMGR_ENTRY *entry;
|
||||
|
||||
/*
|
||||
@@ -207,6 +209,22 @@ QMGR_ENTRY *qmgr_entry_create(QMGR_QUEUE *queue, QMGR_MESSAGE *message)
|
||||
QMGR_LIST_APPEND(queue->todo, entry);
|
||||
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
|
||||
* contains a non-trivial amount of single-recipient email. When a
|
||||
|
@@ -183,6 +183,7 @@ void qmgr_queue_throttle(QMGR_QUEUE *queue, const char *reason)
|
||||
queue->reason = mystrdup(reason);
|
||||
event_request_timer(qmgr_queue_unthrottle_wrapper,
|
||||
(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));
|
||||
qmgr_queue_count++;
|
||||
queue->dflags = 0;
|
||||
queue->name = mystrdup(name);
|
||||
queue->nexthop = mystrdup(nexthop);
|
||||
queue->todo_refcount = 0;
|
||||
|
@@ -157,6 +157,9 @@ qmgr_entry.o: ../../include/events.h
|
||||
qmgr_entry.o: ../../include/vstream.h
|
||||
qmgr_entry.o: ../../include/vbuf.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: ../../include/scan_dir.h
|
||||
qmgr_job.o: qmgr_job.c
|
||||
|
@@ -176,6 +176,7 @@ struct QMGR_ENTRY_LIST {
|
||||
};
|
||||
|
||||
struct QMGR_QUEUE {
|
||||
int dflags; /* delivery request options */
|
||||
char *name; /* domain name or address */
|
||||
char *nexthop; /* domain name */
|
||||
int todo_refcount; /* queue entries (todo list) */
|
||||
|
@@ -148,6 +148,7 @@ static int qmgr_deliver_send_request(QMGR_ENTRY *entry, VSTREAM *stream)
|
||||
}
|
||||
|
||||
flags = message->tflags
|
||||
| entry->queue->dflags
|
||||
| (message->inspect_xport ? DEL_REQ_FLAG_BOUNCE : DEL_REQ_FLAG_DEFLT);
|
||||
attr_print(stream, ATTR_FLAG_MORE,
|
||||
ATTR_TYPE_NUM, MAIL_ATTR_FLAGS, flags,
|
||||
|
@@ -92,6 +92,7 @@
|
||||
/* Global library. */
|
||||
|
||||
#include <mail_params.h>
|
||||
#include <deliver_request.h> /* opportunistic session caching */
|
||||
|
||||
/* 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)
|
||||
{
|
||||
char *myname = "qmgr_entry_create";
|
||||
QMGR_ENTRY *entry;
|
||||
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);
|
||||
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
|
||||
* contains a non-trivial amount of single-recipient email. When a
|
||||
|
@@ -181,6 +181,7 @@ void qmgr_queue_throttle(QMGR_QUEUE *queue, const char *reason)
|
||||
queue->reason = mystrdup(reason);
|
||||
event_request_timer(qmgr_queue_unthrottle_wrapper,
|
||||
(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));
|
||||
qmgr_queue_count++;
|
||||
queue->dflags = 0;
|
||||
queue->name = mystrdup(name);
|
||||
queue->nexthop = mystrdup(nexthop);
|
||||
queue->todo_refcount = 0;
|
||||
|
@@ -29,7 +29,11 @@
|
||||
/* After a successful mail transaction, a session may be saved
|
||||
/* to the \fBscache(8)\fR session cache server, so that it
|
||||
/* 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
|
||||
/* .ad
|
||||
/* .fi
|
||||
@@ -184,8 +188,11 @@
|
||||
/* .PP
|
||||
/* Available in Postfix version 2.2 and later:
|
||||
/* .IP "\fBsmtp_connection_cache_destinations (empty)\fR"
|
||||
/* The SMTP destinations for which SMTP connection caching is
|
||||
/* enabled.
|
||||
/* Permanently enable SMTP connection caching for the specified
|
||||
/* 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"
|
||||
/* When SMTP session caching is enabled, the number of times that
|
||||
/* an SMTP session is reused before it is closed.
|
||||
@@ -374,6 +381,7 @@ int var_smtp_cache_conn;
|
||||
int var_smtp_reuse_limit;
|
||||
char *var_smtp_cache_dest;
|
||||
char *var_scache_service;
|
||||
bool var_smtp_cache_demand;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
if (*var_smtp_cache_dest)
|
||||
if (*var_smtp_cache_dest || var_smtp_cache_demand)
|
||||
#if 0
|
||||
smtp_scache = scache_multi_create();
|
||||
#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_DEFER_MXADDR, DEF_SMTP_DEFER_MXADDR, &var_smtp_defer_mxaddr,
|
||||
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,
|
||||
};
|
||||
|
||||
|
@@ -521,10 +521,14 @@ int smtp_connect(SMTP_STATE *state)
|
||||
* :port, because : is already used for maptype:mapname. Because of
|
||||
* this limitation we use the bare domain without the optional [] or
|
||||
* 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
|
||||
&& smtp_cache_dest
|
||||
&& string_list_match(smtp_cache_dest, domain)) {
|
||||
&& ((request->flags & DEL_REQ_FLAG_SCACHE) != 0
|
||||
|| (smtp_cache_dest && string_list_match(smtp_cache_dest, domain)))) {
|
||||
sess_flags |= SMTP_SESS_FLAG_CACHE;
|
||||
SET_NEXTHOP_STATE(state, lookup_mx, domain, port);
|
||||
}
|
||||
|
@@ -39,6 +39,12 @@
|
||||
/* Speak LMTP rather than SMTP.
|
||||
/* .IP "\fB-m \fImessage_count\fR"
|
||||
/* 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"
|
||||
/* Send the specified number of recipients per transaction (default: 1).
|
||||
/* 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 talk_lmtp = 0;
|
||||
static char *subject = 0;
|
||||
static int number_rcpts = 0;
|
||||
|
||||
static void enqueue_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)
|
||||
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>",
|
||||
session->rcpt_count, recipient);
|
||||
number_rcpts ? number_rcpts++ : session->rcpt_count,
|
||||
recipient);
|
||||
else
|
||||
command(session->stream, "RCPT TO:<%s>", recipient);
|
||||
session->rcpt_count--;
|
||||
@@ -767,7 +775,7 @@ static void quit_done(int unused_event, char *context)
|
||||
|
||||
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 */
|
||||
@@ -789,7 +797,7 @@ int main(int argc, char **argv)
|
||||
/*
|
||||
* 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) {
|
||||
case 'c':
|
||||
count++;
|
||||
@@ -822,6 +830,9 @@ int main(int argc, char **argv)
|
||||
if ((message_count = atoi(optarg)) <= 0)
|
||||
msg_fatal("bad message count: %s", optarg);
|
||||
break;
|
||||
case 'N':
|
||||
number_rcpts = 1;
|
||||
break;
|
||||
case 'o':
|
||||
send_helo_first = 0;
|
||||
send_headers = 0;
|
||||
|
Reference in New Issue
Block a user