Re: Qmail-Specific?

Sabahattin Gucukoglu <[email protected]> Mon, 15 Feb 2010 22:53:48 +0000
Newsgroups gmane.mail.ezmlm
Message-ID <[email protected]>
> On 15 Feb 2010, at 15:58, Bruce Guenter wrote:
>> On Mon, Feb 15, 2010 at 12:36:34AM +0000, Sabahattin Gucukoglu wrote:
>>> Actually, the biggest problem with doing message personalization in
>>> ezmlm is not connection caching or other delivery issues.  How do =
you
>>> reliably queue up large numbers of messages without starving other =
users
>>> of the disk and/or the queue (depending on how the MTA dequeues the
>>> messages)?  And what happens if the process is interrupted?  The
>>> complete set of messages needs to be effectively queued as a single
>>> transaction, and that can't happen when the messages are =
personalized
>>> outside of the MTA without some alternate kind of queueing process.
>>>=20
>> I would expect the implementation details of the MTA to cover your =
first two questions.
>=20
> That is what I'm asking.  How is it done?  Are there *any* MTAs that =
can
> queue up more than one email in a single transaction, such that (1) =
the
> process is efficient, and (2) they either all queue or all do not =
queue?
> I've never heard of such a thing.  I've seen one or two rather =
intrusive
> patches for qmail that would allow for arbitrary substitutions within
> messages, but at least the one was not public when I saw it.
>=20
If I were still on Sendmail, I'd solve the first with the DeliveryMode=3DQ=
 kludge.  It isn't perfect, but it's the established way to get =
high-throughput Sendmail.  Otherwise you'd have to change the submission =
protocol like SMTP to recognise multiple-message transactions as a =
single transaction, and that's not something *any* MTA is designed to =
do, by design, seeing as how transactions for multiple recipients are =
normally addressed per message.  The closest to such a thing in an =
existing MTA might be ETRN, with automatic queue processing switched =
entirely off.

I'm still not clear why you need special handling in the case of =
interruptions: if your submissions to the MTA are interrupted, start =
where you left off; if the queue run is interrupted, the MTA will simply =
begin where it left off.  Why do you want to ensure an entire VERP-style =
delivery is transactional?  I must be missing something.

>> The advantage of doing VERP is simply that less state has to be
>> maintained for a given list message, rather than a message for each
>> recipient of that message, namely, who the last person you sent mail
>> for was.
>=20
> This is partly true, but the amount of state required is more than =
just
> who the last person you sent mail to.  If the process is interrupted
> (server crash or reboot, SIGXCPU, stray OOM killer, whatever), what
> restarts it?  If there were subscribers added or removed, how do you
> preserve the state of the list that you had been sending from?  Once =
you
> consider all the corner cases, and consider the need for a protocol
> sender as described above, you may as well just add a retry mechanism
> and call it a dedicated MDA or mini MTA.
>=20
Oh, well, if it's so unimportant a consequence of a failure to have a =
retry occasionally send duplicates in exchange for subscription updates, =
I think the best thing for you to do is to simply never return a =
submission status of zero to the incoming job until you've made a VERP =
explosion to the submitting MTA.  Then, you can rely on the client =
coming back if the job doesn't succeed the first time around, or of the =
queue on the sending host to do the same thing.  You needn't keep your =
own spool, check it occasionally, run it consistently, in short, write a =
new MTA.  And, with an appropriate memory allowance, the MDA can read =
the message and subscribers into memory once, and blast with no further =
disk I/O.  Bonus!  You can go one further step, a daemon does the =
submissions, and knows the recipient list and receives updates; the MTA =
calls a stub which talks to that daemon, feeding a list message and =
awaiting a response, making disk I/O nearly zero during deliveries.

Cheers,
Sabahattin