[exim-cvs] cvs commit: exim/exim-doc/doc-txt ChangeLog exim…

Top Page
Delete this message
Reply to this message
Author: Philip Hazel
Date:  
To: exim-cvs
Subject: [exim-cvs] cvs commit: exim/exim-doc/doc-txt ChangeLog exim/exim-src/src retry.c exim/exim-test runtest exim/exim-test/stderr 0357 0358 0388 0529 5005
ph10 2006/02/09 14:50:59 GMT

  Modified files:
    exim-doc/doc-txt     ChangeLog 
    exim-src/src         retry.c 
    exim-test            runtest 
    exim-test/stderr     0357 0358 0388 0529 5005 
  Log:
  If a message is older than the "first failed" time when computing a
  retry, use the message arrival time instead of the "first failed" time.


  Revision  Changes    Path
  1.289     +10 -0     exim/exim-doc/doc-txt/ChangeLog
  1.7       +18 -1     exim/exim-src/src/retry.c
  1.3       +1 -0      exim/exim-test/runtest
  1.3       +3 -0      exim/exim-test/stderr/0357
  1.3       +4 -0      exim/exim-test/stderr/0358
  1.3       +4 -4      exim/exim-test/stderr/0388
  1.2       +1 -0      exim/exim-test/stderr/0529
  1.3       +2 -0      exim/exim-test/stderr/5005


  Index: ChangeLog
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
  retrieving revision 1.288
  retrieving revision 1.289
  diff -u -r1.288 -r1.289
  --- ChangeLog    8 Feb 2006 16:10:46 -0000    1.288
  +++ ChangeLog    9 Feb 2006 14:50:58 -0000    1.289
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.288 2006/02/08 16:10:46 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.289 2006/02/09 14:50:58 ph10 Exp $


   Change log file for Exim from version 4.21
   -------------------------------------------
  @@ -105,6 +105,16 @@
   PH/18 If quota_warn_message contains a From: header, Exim now refrains from
         adding the default one. Similarly, if it contains a Reply-To: header, the
         errors_reply_to option, if set, is not used.
  +
  +PH/19 When calculating a retry time, Exim used to measure the "time since
  +      failure" by looking at the "first failed" field in the retry record. Now
  +      it does not use this if it is later than than the arrival time of the
  +      message. Instead it uses the arrival time. This makes for better
  +      behaviour in cases where some deliveries succeed, thus re-setting the
  +      "first failed" field. An example is a quota failure for a huge message
  +      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.





  Index: retry.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/retry.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- retry.c    8 Feb 2006 14:28:51 -0000    1.6
  +++ retry.c    9 Feb 2006 14:50:58 -0000    1.7
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/retry.c,v 1.6 2006/02/08 14:28:51 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/retry.c,v 1.7 2006/02/09 14:50:58 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -684,6 +684,16 @@
           /* Compute how long this destination has been failing */


           failing_interval = now - retry_record->first_failed;
  +        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. */
  +
  +        if (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
  @@ -738,7 +748,14 @@


           This implements "timeout this rule if EITHER the host (or routing or
           directing) has been failing for more than the maximum time, OR if the
  -        message has been on the queue for more than the maximum time." */
  +        message has been on the queue for more than the maximum time."
  +
  +        February 2006: It is possible that this code is no longer needed
  +        following the change to the retry calculation to use the message age if
  +        it is larger than the time since first failure. It may be that the
  +        expired flag is always set when the other conditions are met. However,
  +        this is a small bit of code, and it does no harm to leave it in place,
  +        just in case. */


           if (received_time <= retry_record->first_failed &&
               addr == endaddr && !retry_record->expired && rule != NULL)


  Index: runtest
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/runtest,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- runtest    8 Feb 2006 14:28:51 -0000    1.2
  +++ runtest    9 Feb 2006 14:50:58 -0000    1.3
  @@ -1,6 +1,6 @@
   #! /usr/bin/perl -w


-# $Cambridge: exim/exim-test/runtest,v 1.2 2006/02/08 14:28:51 ph10 Exp $
+# $Cambridge: exim/exim-test/runtest,v 1.3 2006/02/09 14:50:58 ph10 Exp $

   ###############################################################################
   # This is the controlling script for the "new" test suite for Exim. It should #
  @@ -417,6 +417,7 @@
     # Time to retry may vary
     s/time to retry = \S+/time to retry = tttt/;
     s/retry record exists: age=\S+/retry record exists: age=ttt/;
  +  s/failing_interval=\S+ message_age=\S+/failing_interval=ttt message_age=ttt/;


     # Date/time in exim -bV output
     s/\d\d-[A-Z][a-z]{2}-\d{4}\s\d\d:\d\d:\d\d/07-Mar-2000 12:21:52/g;


  Index: 0357
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/stderr/0357,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- 0357    8 Feb 2006 14:28:52 -0000    1.2
  +++ 0357    9 Feb 2006 14:50:58 -0000    1.3
  @@ -37,6 +37,7 @@
   userx@???
   locking TESTSUITE/spool/db/retry.lockfile
   retry for R:userx@??? = * 0 0
  +failing_interval=ttt message_age=ttt
   Writing retry data for R:userx@???
     first failed=dddd last try=dddd next try=+1 expired=0
     errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<userx@???>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
  @@ -85,6 +86,7 @@
   locking TESTSUITE/spool/db/retry.lockfile
   deleted retry information for R:test.ex
   retry for R:userx@??? = * 0 0
  +failing_interval=ttt message_age=ttt
   Writing retry data for R:userx@???
     first failed=dddd last try=dddd next try=+1 expired=0
     errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<userx@???>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
  @@ -134,6 +136,7 @@
   locking TESTSUITE/spool/db/retry.lockfile
   deleted retry information for R:test.ex
   retry for R:userx@??? = * 0 0
  +failing_interval=ttt message_age=ttt
   Writing retry data for R:userx@???
     first failed=dddd last try=dddd next try=+2 expired=0
     errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<userx@???>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error


  Index: 0358
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/stderr/0358,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- 0358    8 Feb 2006 14:28:52 -0000    1.2
  +++ 0358    9 Feb 2006 14:50:58 -0000    1.3
  @@ -47,11 +47,13 @@
   usery@???
   locking TESTSUITE/spool/db/retry.lockfile
   retry for R:usery@??? = * 0 0
  +failing_interval=ttt message_age=ttt
   Writing retry data for R:usery@???
     first failed=dddd last try=dddd next try=+1 expired=0
     errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<usery@???>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
   userx@???
   retry for R:userx@??? = * 0 0
  +failing_interval=ttt message_age=ttt
   Writing retry data for R:userx@???
     first failed=dddd last try=dddd next try=+1 expired=0
     errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<userx@???>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
  @@ -117,12 +119,14 @@
   locking TESTSUITE/spool/db/retry.lockfile
   deleted retry information for R:test.ex
   retry for R:usery@??? = * 0 0
  +failing_interval=ttt message_age=ttt
   Writing retry data for R:usery@???
     first failed=dddd last try=dddd next try=+2 expired=0
     errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<usery@???>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
   userx@???
   deleted retry information for R:test.ex
   retry for R:userx@??? = * 0 0
  +failing_interval=ttt message_age=ttt
   Writing retry data for R:userx@???
     first failed=dddd last try=dddd next try=+2 expired=0
     errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<userx@???>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error


  Index: 0388
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/stderr/0388,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- 0388    8 Feb 2006 14:28:52 -0000    1.2
  +++ 0388    9 Feb 2006 14:50:58 -0000    1.3
  @@ -145,9 +145,9 @@
   x@y in "*"? yes (matched "*")
   retry for R:x@y = * 0 0
   dbfn_read: key=R:x@y
  -on queue longer than maximum retry
  +failing_interval=ttt message_age=ttt
   Writing retry data for R:x@y
  -  first failed=dddd last try=dddd next try=+0 expired=0
  +  first failed=dddd last try=dddd next try=+1 expired=1
     errno=-44 more_errno=dd,A SMTP error from remote mail server after RCPT TO:<x@y>: host 127.0.0.1 [127.0.0.1]: 451 Temporary error
   dbfn_write: key=R:x@y
   address match: subject=*@V4NET.0.0.0 pattern=*
  @@ -155,9 +155,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
  -on queue longer than maximum retry
  +failing_interval=ttt message_age=ttt
   Writing retry data for T:V4NET.0.0.0:V4NET.0.0.0:1224
  -  first failed=dddd last try=dddd next try=+0 expired=0
  +  first failed=dddd last try=dddd next try=+1 expired=1
     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


  Index: 0529
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/stderr/0529,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- 0529    8 Feb 2006 14:28:52 -0000    1.1
  +++ 0529    9 Feb 2006 14:50:58 -0000    1.2
  @@ -38,6 +38,7 @@
   TESTSUITE/test-mail/rmbox
   locking TESTSUITE/spool/db/retry.lockfile
   retry for T:TESTSUITE/test-mail/rmbox:x@??? = *@test.ex -22 0
  +failing_interval=ttt message_age=ttt
   Writing retry data for T:TESTSUITE/test-mail/rmbox:x@???
     first failed=dddd last try=dddd next try=+900 expired=0
     errno=-22 more_errno=dd mailbox is full (MTA-imposed quota exceeded while writing to TESTSUITE/test-mail/rmbox)


  Index: 5005
  ===================================================================
  RCS file: /home/cvs/exim/exim-test/stderr/5005,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- 5005    8 Feb 2006 14:28:52 -0000    1.2
  +++ 5005    9 Feb 2006 14:50:58 -0000    1.3
  @@ -486,6 +486,7 @@
   userx@??? in "*"? yes (matched "*")
   retry for T:userx@??? = * 0 0
   dbfn_read: key=T:userx@???
  +failing_interval=ttt message_age=ttt
   Writing retry data for T:userx@???
     first failed=dddd last try=dddd next try=+86400 expired=0
     errno=-22 more_errno=dd mailbox is full (MTA-imposed quota exceeded while writing to tmp/MAILDIR.myhost.test.ex)
  @@ -652,6 +653,7 @@
   userx@??? in "*"? yes (matched "*")
   retry for T:userx@??? = * 0 0
   dbfn_read: key=T:userx@???
  +failing_interval=ttt message_age=ttt
   Writing retry data for T:userx@???
     first failed=dddd last try=dddd next try=+86400 expired=0
     errno=-22 more_errno=dd mailbox is full (MTA-imposed quota exceeded while writing to tmp/MAILDIR.myhost.test.ex)