Re: [Exim] -qq option

Top Page
Delete this message
Reply to this message
Author: Philip Hazel
Date:  
To: Chris Keane
CC: exim-users
Subject: Re: [Exim] -qq option
On Mon, 10 Jul 2000, Chris Keane wrote:

> However, I'm think the behaviour of 'exim -qq' is not what's expected.
> Suppose ppp0 is inactive; then all remote mail will get passed to a
> queryprogram router which will return "DEFER". Then when ppp0 becomes
> active, 'exim -qqf' gets run, and at this point the queryprogram router
> returns
>
>   OK    remote_smtp    some.smtp.server    bydns_a

>
> for every message. So I'm under the impression that the first pass of
> 'exim -qq' should mean that *all* the outgoing messages in the queue get
> routed to some.smtp.server, and so the second pass should deliver them
> all in a single SMTP session (batch_max is unset). But if I run with
> 'exim -qqf -d9', it seems that each message is going in a separate SMTP
> session.
>
> Am I just misinterpreting what's expected here?


If I have understood you right, I don't think so, but I'm not sure. Can
you send me the -qqf output? ... No, don't bother. I've looked at the
code. The problem is the "f". It is forcing a delivery in the first
queue run instead of doing the queueing thing. I think this is because
the code is in common with what happens when queue_smtp is set; a force
overrides that. I have forgotten to cut that out when doing the 2-stage
queue run. I will do some tests and fix this in due course. Meanwhile,
look at lines starting at 1626 in transports/smtp.c:

    if (!deliver_force && (queue_smtp ||                                  
        match_isinlist(addrlist->domain, &queue_smtp_domains,TRUE,TRUE,NULL)))
      {                                                                      
      expired = FALSE;                                                       
      for (addr = addrlist; addr != NULL; addr = addr->next)     
        {                           
        if (addr->transport_return != DEFER) continue;                       
        addr->message = "domain matches queue_smtp_domains, or -odqs set";  
        }                                                                 
      continue;      /* With next host */
      }                                           


Try changing the first one to read

    if ((!deliver_force || queue_2stage) && (queue_smtp ||                                  


You do seem to be doing well at finding buglets.

(Of course, an alternative is to use -qq instead of -qqf.)


-- 
Philip Hazel            University of Cambridge Computing Service,
ph10@???      Cambridge, England. Phone: +44 1223 334714.