| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
queuing of bounce events out of the process's memory and into a 'bounce event'
file, essentially consisting of a stream of pickles. Every once in a while
the qrunner wakes up and processes the event file, which is named to be
specific to each qrunner instance. The actually processing is factored out
into a mixin class which is now subclassed by both the BounceRunner and
OutgoingRunner classes (since the latter has to handle SMTP rejects as
bounces).
Specific changes here include:
OutgoingRunner: Use BounceMixin as a base class. We can now get rid of the
whole _permfailures and _permfail_counter stuff since we'll just use the mixin
class as the basic logic for bounce handling.
_dispose(): Simplified since we can just use _queue_bounces() when a message
is rejected at SMTP time, although if that triggers a probe, the attached
message will be the one for which delivery was attempted since there really
isn't any bounce. Also, make this method handle probe bounces.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
queuing of bounce events out of the process's memory and into a 'bounce event'
file, essentially consisting of a stream of pickles. Every once in a while
the qrunner wakes up and processes the event file, which is named to be
specific to each qrunner instance. The actually processing is factored out
into a mixin class which is now subclassed by both the BounceRunner and
OutgoingRunner classes (since the latter has to handle SMTP rejects as
bounces).
Specific changes include:
REGISTER_BOUNCES_EVERY: Promote to a Defaults.py.in variable.
BounceMixin: Mixin class for handling the basics of bounce event queuing,
periodic processing, and registering, as well as cleanup. It also contains a
_probe_bounce() method for handling bounces of the probe message (which cause
an immediate disable).
BounceRunner: Add BounceMixin as a base class.
|
|
|
|
|
|
|
|
|
|
|
| |
one-file-per-queued-message architecture. The message object and metadata
dictionary are now written to the same .pck file -- in that order -- instead
of to separate files which were more complicated to manage. dequeue()
especially simplifies considerably.
Also, get rid of the special _Switchboard hack, as well as the
MarshalSwitchboard, ASCIISwitchboard, and BSDDBSwitchboard implementations.
Also get rid of the DumperSwitchboard class.
|
| |
|
|
|
|
| |
SHIGENO Kazutaka.
|
|
|
|
|
| |
HeaderParseError, so if that happens just ignore the Subject header for
command purposes.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Promote SYNC_AFTER_WRITE to a Defaults.py/mm_cfg.py variable after
all.
|
| |
|
|
|
| |
'Release_2_1-maint'.
|
| |
|
| |
|
|
|
|
|
|
| |
dequeue(): If we can't read a .db file, initialize data to the empty
dictionary, since the following test expects to do a has_key() on the
value. Closes SF bug #707608.
|
| |
|
|
|
|
| |
Ademar de Souza Reis Jr
|
| |
|
|
'Release_2_1-maint'.
|