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.