Modify (i.e. fix :-) change 4.61/PH/19: Using message arrival time for
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Thu, 20 Apr 2006 10:57:46 +0000 (10:57 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Thu, 20 Apr 2006 10:57:46 +0000 (10:57 +0000)
"first failed" should *not* apply to host errors.

doc/doc-txt/ChangeLog
src/src/retry.c
test/log/0532
test/rejectlog/0532
test/stderr/0388

index 9f8d80b141fa298b97eb292a79b661592bbcec0d..f51f970716f49029a8d6f59a621778ca0faa3b64 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.342 2006/04/19 11:15:43 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.343 2006/04/20 10:57:46 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -24,6 +24,10 @@ PH/02 When tcp-wrappers is called from Exim, it returns only "deny" or "allow".
 
 PH/03 Add -lutil to the default FreeBSD LIBS setting.
 
 
 PH/03 Add -lutil to the default FreeBSD LIBS setting.
 
+PH/04 Change PH/19 for 4.61 was too wide. It should not be applied to host
+      errors. Otherwise a message that provokes a temporary error (when other
+      messages do not) can cause a whole host to time out.
+
 
 Exim version 4.61
 -----------------
 
 Exim version 4.61
 -----------------
@@ -137,6 +141,7 @@ PH/19 When calculating a retry time, Exim used to measure the "time since
       when small messages continue to be delivered. Without this change, the
       "time since failure" will always be short, possible causing more frequent
       delivery attempts for the huge message than are intended.
       when small messages continue to be delivered. Without this change, the
       "time since failure" will always be short, possible causing more frequent
       delivery attempts for the huge message than are intended.
+      [Note: This change was subsequently modified - see PH/04 for 4.62.]
 
 PH/20 Added $auth1, $auth2, $auth3 to contain authentication data (as well as
       $1, $2, $3) because the numerical variables can be reset during some
 
 PH/20 Added $auth1, $auth2, $auth3 to contain authentication data (as well as
       $1, $2, $3) because the numerical variables can be reset during some
index ca61e5c0c0df1c2e74dabea665d52510341784bf..afb40ef9078101284f3f65f53eeb3874c7b5a6e9 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/retry.c,v 1.9 2006/03/09 15:10:16 ph10 Exp $ */
+/* $Cambridge: exim/src/src/retry.c,v 1.10 2006/04/20 10:57:46 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -698,13 +698,14 @@ for (i = 0; i < 3; i++)
         DEBUG(D_retry) debug_printf("failing_interval=%d message_age=%d\n",
           failing_interval, message_age);
 
         DEBUG(D_retry) debug_printf("failing_interval=%d message_age=%d\n",
           failing_interval, message_age);
 
-        /* If the message has been on the queue longer than the recorded time
-        of failure, use the message's age instead. This can happen when some
-        messages can be delivered and others cannot; a successful delivery will
-        reset the first_failed time, and this can lead to a failing message
-        being retried too often. */
+        /* For a non-host error, if the message has been on the queue longer
+        than the recorded time of failure, use the message's age instead. This
+        can happen when some messages can be delivered and others cannot; a
+        successful delivery will reset the first_failed time, and this can lead
+        to a failing message being retried too often. */
 
 
-        if (message_age > failing_interval) failing_interval = message_age;
+        if ((rti->flags & rf_host) == 0 && message_age > failing_interval)
+          failing_interval = message_age;
 
         /* Search for the current retry rule. The cutoff time of the
         last rule is handled differently to the others. The rule continues
 
         /* Search for the current retry rule. The cutoff time of the
         last rule is handled differently to the others. The rule continues
index 57a1520607eefd0aeec36dbaa33b3044600c0c8c..0a41abcdbc65005e56a4b1c499eeef10376f9934 100644 (file)
@@ -5,4 +5,4 @@
 1999-03-02 09:44:33 10HmaY-0005vi-00 <= CALLER@test.ex U=CALLER P=local S=sss
 1999-03-02 09:44:33 10HmaY-0005vi-00 => rcptok <rcptok@test.ex> R=r1 T=t1
 1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
 1999-03-02 09:44:33 10HmaY-0005vi-00 <= CALLER@test.ex U=CALLER P=local S=sss
 1999-03-02 09:44:33 10HmaY-0005vi-00 => rcptok <rcptok@test.ex> R=r1 T=t1
 1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
-1999-03-02 09:44:33 U=CALLER temporarily rejected connection in "connect" ACL: cannot test add_header condition in connection ACL
+1999-03-02 09:44:33 U=CALLER temporarily rejected connection in "connect" ACL: cannot use add_header condition in connection ACL
index 7a20d074e92d18b2ab4b595b034a4ce73375dac2..5fe9ed4257cb247c2f27cd50b9de38cfcc6aa6df 100644 (file)
@@ -1,2 +1,2 @@
 1999-03-02 09:44:33 U=CALLER F=<mailok@test.ex> rejected RCPT <notok@test.ex>
 1999-03-02 09:44:33 U=CALLER F=<mailok@test.ex> rejected RCPT <notok@test.ex>
-1999-03-02 09:44:33 U=CALLER temporarily rejected connection in "connect" ACL: cannot test add_header condition in connection ACL
+1999-03-02 09:44:33 U=CALLER temporarily rejected connection in "connect" ACL: cannot use add_header condition in connection ACL
index 0af0261ba4408b5f5f5b691ed96d8affe87ef056..ab7d8ae328fcf0b064f5226b351e1fbc561f92bd 100644 (file)
@@ -156,8 +156,9 @@ V4NET.0.0.0 in "*"? yes (matched "*")
 retry for T:V4NET.0.0.0:V4NET.0.0.0:1224 (y) = * 0 0
 dbfn_read: key=T:V4NET.0.0.0:V4NET.0.0.0:1224
 failing_interval=ttt message_age=ttt
 retry for T:V4NET.0.0.0:V4NET.0.0.0:1224 (y) = * 0 0
 dbfn_read: key=T:V4NET.0.0.0:V4NET.0.0.0:1224
 failing_interval=ttt message_age=ttt
+on queue longer than maximum retry
 Writing retry data for T:V4NET.0.0.0:V4NET.0.0.0:1224
 Writing retry data for T:V4NET.0.0.0:V4NET.0.0.0:1224
-  first failed=dddd last try=dddd next try=+1 expired=1
+  first failed=dddd last try=dddd next try=+0 expired=0
   errno=dd more_errno=dd,A Network Error
 dbfn_write: key=T:V4NET.0.0.0:V4NET.0.0.0:1224
 timed out: all retries expired
   errno=dd more_errno=dd,A Network Error
 dbfn_write: key=T:V4NET.0.0.0:V4NET.0.0.0:1224
 timed out: all retries expired