|
|
1.1 ! root 1: .SH ! 2: Deliver ! 3: .PP ! 4: The \fBdeliver\fR process changed little until late 1984, ! 5: when a dead-host caching facility and advanced retry mechanisms ! 6: were added to \fBdeliver\fR. ! 7: Until then, the major changes to \fBdeliver\fR were ! 8: bug fixes and changes to enhance error recovery. ! 9: Most notably, the mechanism to return mail was made much more persistent. ! 10: In MMDFI, if a message could not be returned to the sender, it ! 11: was ``dropped on the floor''. This is not acceptable. ! 12: The new mechanism first tries to return to the sender; if that fails, ! 13: an attempt is made to send the message to the local ``Postmaster'' ! 14: address. If this too fails, then \fBdeliver\fR tries to write the message ! 15: into a ``dead letter'' file ! 16: (usually /usr/mmdf/lock/home/DeadLetters). ! 17: The last resort is to scream loudly into the log files. ! 18: .PP ! 19: The recent changes to \fBdeliver\fR are ! 20: designed to reduce \fBdeliver\fR's load ! 21: on a system that handles a large amount of mail. ! 22: The first change is to move the dead-host caching function out ! 23: of the channels (currently only SMTP) and into \fBdeliver\fR. This has ! 24: two advantages. ! 25: First, \fBdeliver\fR no longer has to hand every address to ! 26: the channel to find out that the host is dead. This was expensive, since ! 27: communications between \fBdeliver\fR and the channel ! 28: are interactive using pipes ! 29: and thus involved a great deal of context-switching and pipe I/O. ! 30: Second, the dead-host caching is now a generally available facility that ! 31: can be used by any channel without duplication of code. ! 32: .PP ! 33: The second change is to add a mechanism for storing the retry history ! 34: for each dead host on each channel including retry count and last retry ! 35: time. ! 36: From this information it is possible to implement intelligent ! 37: retry strategies using exponential backoff and maximal retry times. ! 38: This greatly reduces the overhead caused by recalcitrant hosts ! 39: that are unavailable over a long period of time. ! 40: The retry history change is conditionally compiled ! 41: into deliver since it can, ! 42: by design, use quite a bit of memory if there are a lot of dead ! 43: hosts or pending messages (or both!). ! 44: Machines with a relatively limited address space may not ! 45: be able to use this feature.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.