Looks interesting, but I'm not too keen on that patch. I'd much
rather see subclasses used for this, since the changes are very
particular to your daemon (i.e. catching specific die() strings).
Should be very trivial to do this as a couple of subclasses.
On 24-May-06, at 7:45 AM, Lars Roland wrote:
The link found at the end of this email points to a high-performance
qpsmtpd daemon (or use the attached files), which is meant as a
replacement of the included qpsmtpd-forkserver.
We call it high-performance since it handles high load significantly
better than <qpsmtpd-forkserver> (at least that's what we've
experienced). Our tests show that a single server is able to handle
more
than 1 million messages per day (scanning with ClamAV and
spamassassin).
Difference in relation to <qpsmtpd-forkserver>:
- pre-fork children
- reuse child
- renice of parent to ensure reaper and re-spawn of children
- reload option to graceful reinitialize plugins
Usage:
--
cd /path/to/qpsmtpd (path to vanilla version of qpsmtpd)
wget http://www.softscan.dk/doc/qpsmtpd/qpsmtpd-highperf-daemon.tar.gz
tar zxvf qpsmtpd-highperf-daemon.tar.gz
patch -p1 < qpsmtpd-prefork.patch
--
Continue to install qpsmtpd as you normally would, then copy
<qpsmtpd-highperf> to a desired location and start the daemon.
See <qpsmtpd-highperf --help> for daemon options.
Needed patches: Two modules must be patched to avoid <exit>,
as it terminates the child. <Exit> has been replaced with <die>,
allowing the daemon to catch finished children and reuse them.
Requirements: Patched version of qpsmtpd and Perl module
<IPC::Shareable>. Children use the shareable memory to load/save
connection information.
Considerations: Since children are reused it's important that a
child is
reset after/before use. It would be greatly appreciated if those with
better knowledge of the inner workings of qpsmtpd could comment on the
current used solution in TcpServer.pm. We solved the problem by
resetting <$self->{_connection}> and <$self->{_transaction}> in the
<start_connection> function .
Stability: The daemon has been tested without problems on Debian Sarge
with the following plugins:
--
check_badmailfrom
check_badrcptto
check_badrcptto_patterns
check_loop
check_relay
check_spamhelo
hosts_allow
queue/qmail
rcpt_ok
tls
--
Download daemon and patch here:
http://www.softscan.co.uk/doc/qpsmtpd/qpsmtpd-highperf-daemon.tar.gz
(md5: 413bcd27f1df237d3adb71a3808f7901)
<qpsmtpd-highperf>
<qpsmtpd-prefork.patch>