[Mailman-Developers] Outgoin queue sugestion
Dan Ohnesorg, admin of POWER
Dan@feld.cvut.cz
Sun, 27 Sep 1998 22:08:43 +0200
On 26 Sep 98, at 18:02, Scott wrote:
> I personally like the idea of locking the files more than I like the
> idea of a daemon delivering queued mail because there will always be
> the worry that something accidentally kills the daemon process while
> no admin is around.
>
> Lock timeouts sound like a good solution and are already available in
> the file locking module.
So I have made it as follows. I haven't used flock module,
becouse I think it is not good for this situacion. We can use it
when there is reorganized code in Utis and OutgoinQueue, so it
is too distributed.
I haven't made backup before modifing my copy, so I cannot
send diffs. My mailman is very different from oficial becouse it
containst features like DSN, administrativ via filter, character set
conversion .... and so I cannot made diff to clean distribution.
Modification is very short. First in Utils.py
in
def TrySMTPDelivery(recipient, sender, text, queue_entry):
is on end added
if failure:
from Logging.StampedLogger import StampedLogger
l = StampedLogger("smtp-failures", "TrySMTPDelivery", immediate=1)
l.write("To %s:\n" % recipient)
l.write("\t %s / %s\n" % (failure[0], failure[1]))
l.flush()
+ import os, re
+ lock = re.sub('mm_q\.','mm_l\.',queue_entry)
+ os.unlink(lock)
And in OutgoingQueue
def dequeueMessage(msg):
+ import os, re
+ lock = re.sub('mm_q\.','mm_l\.',msg)
try:
os.unlink(msg)
+ os.unlink(lock)
except:
from Logging.StampedLogger import StampedLogger
l = StampedLogger("queue", "DequeueMessage", immediate=1)
l.write("Cannot remove:\t %s\n" % msg)
l.flush()
def processQueue():
+ import os, re
files = os.listdir(mm_cfg.DATA_DIR)
for file in files:
if TEMPLATE <> file[:len(TEMPLATE)]:
continue
full_fname = os.path.join(mm_cfg.DATA_DIR, file)
+ lock = re.sub('mm_q\.','mm_l\.',full_fname)
+ existence = os.stat(lock)
+ if not(S_ISREG(existence)):
+ continue
+ l = open(lock,"a+")
+ l.write(os.getpid())
+ l.close()
f = open(full_fname,"r")
recip,sender,text = marshal.load(f)
f.close()
import Utils
Utils.TrySMTPDelivery(recip,sender,text,full_fname)
________________________________________
DDDDDD
DD DD Dan Ohnesorg, supervisor on POWER
DD OOOO Dan@feld.cvut.cz
DD OODDOO Dep. of Power Engineering
DDDDDD OO CTU FEL Prague, Bohemia
OO OO work: +420 2 24352785;+420 2 24972109
OOOO home: +420 311 679679;+420 311 679311
________________________________________
Neodkladej na zitrek, co dnes mohou udelat jini.