SYNOPSIS
qmail-todo
DESCRIPTION
s/qmail with a high local and remote concurrency number is able to
deliver a tremendous amount of messages (throughput). Depending on the
provided resources however, often this can not be achieved since
qmail-send becomes a bottleneck on delivery.
qmail-send preprocesses all new messages before deploying them for
local or for remote delivering. In a particulur run, qmail-send does
one 'todo' processing, but has the ability to close multiple jobs. Due
to this layout, potentially qmail-send can not feed all the new
available (local/remote) delivery slots and therefore, it is not
possible to achieve the maximum throughput.
This is a minor problem, given qmail-send is able to complete this in
short time; but due to many file system calls (fsync and (un)link) a
'todo' run is expensive and throttles the throughput.
qmail-todo solves this 'silly qmail (queue) problem' which is apparent
only on system with high injection rates, delegating the scheduling of
'todo' runs to a dedicated process.
COMMUNICATION
qmail-todo interfaces with qmail-send on file descriptors [1,8] on
sending and [7,0] for receiving. qmail-todo communicates with
qmail-clean on file descriptors [2,0] for sending and [3,1] for
receiving.
qmail-todo and qmail-send share an extended and peristent message
exchange format:
D[LRB]<mesgid>
Start delivery for new message with id <messid>.
the character L, R or B defines the type
of delivery, local, remote or both respectively.
L<string>
Dump string to the logger without adding additional
'\n' or similar.
qmail-todo sends "\0" terminated messages, whereas qmail-send just
sends one character to qmail-todo.
BIG PICTURE
+-------+ +-------+
| clean | | clean |
+--0-1--+ +--0-1--+ +-----------+
trigger ^ | ^ | +->0,1 lspawn |
| | v | v / +-----------+
+-------+ v +--2-3--+ +--5-6--+ /
| | | | 0<--7 1,2>-+
| queue | | | todo | | send |
| | | | 1-->8 3,4<-+
+-------+ +-------+ +---0---+ \
| \ +-----------+
v +->0,1 rspwan |
+---0---+ +-----------+
| logger|
+-------+
qmail-todo exits 0 if the messages have been processed successfully.
It exits 1 in case there is a communication problem with qmail-send.
The exit code 111 together with a diagnostic message is facilitated by
qmail-todo in case it failes reading the required control files.
DIAGNOSTICS
qmail-todo provides additional diagnostic messages to qmail-send to be
displayed in the logs. In particular, in case of problems creating and
(un)linking files.
CREDITS
qmail-todo included in s/qmail has been created by Andre Oppermann
(http://www.nrg4u.com) as part of this LDAP patch for qmail. This man-
page uses parts of his EXTERNAL discription.
SEE ALSO
qmail-send(8), qmail-queue(8).
8 s/qmail:(qmail-todo)
Man(1) output converted with
man2html
and me.