ph10 2005/09/19 12:56:11 BST
Modified files:
exim-doc/doc-txt ChangeLog NewStuff
exim-src ACKNOWLEDGMENTS
exim-src/src readconf.c retry.c
Log:
Michael Haardt's randomized retry stuff, using the new letter "H".
Revision Changes Path
1.236 +3 -0 exim/exim-doc/doc-txt/ChangeLog
1.72 +10 -0 exim/exim-doc/doc-txt/NewStuff
1.35 +2 -1 exim/exim-src/ACKNOWLEDGMENTS
1.13 +2 -1 exim/exim-src/src/readconf.c
1.4 +12 -3 exim/exim-src/src/retry.c
Index: ChangeLog
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
retrieving revision 1.235
retrieving revision 1.236
diff -u -r1.235 -r1.236
--- ChangeLog 19 Sep 2005 09:41:37 -0000 1.235
+++ ChangeLog 19 Sep 2005 11:56:11 -0000 1.236
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.235 2005/09/19 09:41:37 fanf2 Exp $
+$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.236 2005/09/19 11:56:11 ph10 Exp $
Change log file for Exim from version 4.21
-------------------------------------------
@@ -206,6 +206,9 @@
TF/06 The fix for widen_domains has also been applied to qualify_single and
search_parents which are the other dnslookup options that can cause
header rewrites.
+
+PH/49 Michael Haardt's randomized retrying, but as a separate retry parameter
+ type ("H").
Exim version 4.52
Index: NewStuff
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/NewStuff,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -r1.71 -r1.72
--- NewStuff 15 Sep 2005 12:22:41 -0000 1.71
+++ NewStuff 19 Sep 2005 11:56:11 -0000 1.72
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.71 2005/09/15 12:22:41 fanf2 Exp $
+$Cambridge: exim/exim-doc/doc-txt/NewStuff,v 1.72 2005/09/19 11:56:11 ph10 Exp $
New Features in Exim
--------------------
@@ -154,6 +154,16 @@
TF/01 There's a new script in util/ratelimit.pl which extracts sending
rates from log files, to assist with choosing appropriate settings
when deploying the ratelimit ACL condition.
+
+PH/13 A new letter, "H", is available in retry parameter sets. It is similar
+ to "G" (geometric increasing time intervals), except that the interval
+ before the next retry is randomized. Each time, the previous interval is
+ multiplied by the factor in order to get a maximum for the next interval.
+ The mininum interval is the first argument of the parameter, and an
+ actual interval is chosen randomly between them. Such a rule has been
+ found to be helpful in cluster configurations when all the members of the
+ cluster restart at once, and may synchronize their queue processing
+ times.
Exim version 4.52
Index: ACKNOWLEDGMENTS
===================================================================
RCS file: /home/cvs/exim/exim-src/ACKNOWLEDGMENTS,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- ACKNOWLEDGMENTS 12 Sep 2005 13:50:03 -0000 1.34
+++ ACKNOWLEDGMENTS 19 Sep 2005 11:56:11 -0000 1.35
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-src/ACKNOWLEDGMENTS,v 1.34 2005/09/12 13:50:03 ph10 Exp $
+$Cambridge: exim/exim-src/ACKNOWLEDGMENTS,v 1.35 2005/09/19 11:56:11 ph10 Exp $
EXIM ACKNOWLEDGEMENTS
@@ -20,7 +20,7 @@
Philip Hazel
Lists created: 20 November 2002
-Last updated: 12 September 2005
+Last updated: 19 September 2005
THE OLD LIST
@@ -146,6 +146,7 @@
continued maintenance of same
Patch for faster sort algorithm in queue.c
Patch for LDAP timeout handling
+ ... and several more
Thomas Hager Patch for saslauthd crash bug
Richard Hall Fix for file descriptor leak in redirection
Steve Haslam Lots of stuff, including
Index: readconf.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/readconf.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- readconf.c 8 Aug 2005 10:48:27 -0000 1.12
+++ readconf.c 19 Sep 2005 11:56:11 -0000 1.13
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/readconf.c,v 1.12 2005/08/08 10:48:27 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/readconf.c,v 1.13 2005/09/19 11:56:11 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -3554,6 +3554,7 @@
break;
case 'G': /* Geometrically increasing intervals */
+ case 'H': /* Ditto, but with randomness */
rule->p1 = retry_arg(&p, 0);
rule->p2 = retry_arg(&p, 1);
break;
@@ -3564,7 +3565,7 @@
}
if (rule->timeout <= 0 || rule->p1 <= 0 ||
- (rule->rule == 'G' && rule->p2 < 1000))
+ (rule->rule != 'F' && rule->p2 < 1000))
log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN,
"bad parameters for retry rule");
Index: retry.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/retry.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- retry.c 29 Jun 2005 14:17:01 -0000 1.3
+++ retry.c 19 Sep 2005 11:56:11 -0000 1.4
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/retry.c,v 1.3 2005/06/29 14:17:01 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/retry.c,v 1.4 2005/09/19 11:56:11 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -739,15 +739,24 @@
if (rule == NULL) next_try = now; else
{
if (rule->rule == 'F') next_try = now + rule->p1;
- else /* assume rule = 'G' */
+ else /* rule = 'G' or 'H' */
{
int last_predicted_gap =
retry_record->next_try - retry_record->last_try;
int last_actual_gap = now - retry_record->last_try;
int lastgap = (last_predicted_gap < last_actual_gap)?
last_predicted_gap : last_actual_gap;
- next_try = now + ((lastgap < rule->p1)? rule->p1 :
- (lastgap * rule->p2)/1000);
+ int next_gap = (lastgap * rule->p2)/1000;
+ if (rule->rule == 'G')
+ {
+ next_try = now + ((lastgap < rule->p1)? rule->p1 : next_gap);
+ }
+ else /* The 'H' rule */
+ {
+ next_try = now + rule->p1;
+ if (next_gap > rule->p1)
+ next_try += random_number(next_gap - rule->p1);
+ }
}
}