summaryrefslogtreecommitdiff
path: root/Mailman/Queue
diff options
context:
space:
mode:
authormsapiro2006-07-09 03:57:47 +0000
committermsapiro2006-07-09 03:57:47 +0000
commit337beba04cf052acb9f33cc4f1862b2841924973 (patch)
tree9838cde05cc22b3c129500ef3dae61d2bd0e6267 /Mailman/Queue
parentb35c41b681648dd8be61d68e1c71d48e149f3389 (diff)
downloadmailman-337beba04cf052acb9f33cc4f1862b2841924973.tar.gz
mailman-337beba04cf052acb9f33cc4f1862b2841924973.tar.zst
mailman-337beba04cf052acb9f33cc4f1862b2841924973.zip
- Switchboard.py - Closed very tiny holes at the upper ends of queue
slices that could result in unprocessable queue entries. Improved FIFO processing when two queue entries have the same timestamp.
Diffstat (limited to 'Mailman/Queue')
-rw-r--r--Mailman/Queue/Switchboard.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/Mailman/Queue/Switchboard.py b/Mailman/Queue/Switchboard.py
index d9fc5dc27..4741580e7 100644
--- a/Mailman/Queue/Switchboard.py
+++ b/Mailman/Queue/Switchboard.py
@@ -52,6 +52,9 @@ shamax = 0xffffffffffffffffffffffffffffffffffffffffL
# (when False). Pickles are more efficient because the message doesn't need
# to be re-parsed every time it's unqueued, but pickles are not human readable.
SAVE_MSGS_AS_PICKLES = True
+# Small increment to add to time in case two entries have the same time. This
+# prevents skipping one of two entries with the same time until the next pass.
+DELTA = .0001
@@ -156,9 +159,13 @@ class Switchboard:
filebase = os.path.splitext(f)[0]
when, digest = filebase.split('+')
# Throw out any files which don't match our bitrange. BAW: test
- # performance and end-cases of this algorithm.
- if lower is None or (lower <= long(digest, 16) < upper):
- times[float(when)] = filebase
+ # performance and end-cases of this algorithm. MAS: both
+ # comparisons need to be <= to get complete range.
+ if lower is None or (lower <= long(digest, 16) <= upper):
+ key = float(when)
+ while times.has_key(key):
+ key += DELTA
+ times[key] = filebase
# FIFO sort
keys = times.keys()
keys.sort()