[Mailman-Users] Newsrunner infinite loop

Mark Sapiro mark at msapiro.net
Thu Aug 14 19:12:32 CEST 2008


Max Lanfranconi wrote:
>
>I have a mailman 2.1.11 installation running about 1000 mailing lists.
>Each of them is bi-directionally gatewayed via NNTP.
>
>I have been hitting the following scenario:
>
>Email 'a' is made of a text body and email 'b' as a text attachment.


Is the attachment Content-Type: text/plain or message/rfc822?


>Email 'b' is made of a text body and another non-text attachment.
>
>Posting email 'a' to any mailing list gets email a distributed to all 
>the mailing list members but puts  NewsRunner in the following infinite 
>loop (1 traceback per second. Needless to say, the posting never makes 
>it to the newsgroup)
>
>Aug 13 14:36:30 2008 (25129) Uncaught runner exception:
>Aug 13 14:36:30 2008 (25129) Traceback (most recent call last):
>  File "/usr/local/mailman/Mailman/Queue/NewsRunner.py", line 86, in 
>_dispose
>    conn.quit()
>  File "/usr/lib/python2.4/nntplib.py", line 600, in quit
>    resp = self.shortcmd('QUIT')
>  File "/usr/lib/python2.4/nntplib.py", line 260, in shortcmd
>    return self.getresp()
>  File "/usr/lib/python2.4/nntplib.py", line 215, in getresp
>    resp = self.getline()
>  File "/usr/lib/python2.4/nntplib.py", line 207, in getline
>    if not line: raise EOFError
>EOFError
>
>
>Any hint about what may cause this ?


The immediate cause is NewsRunner has a try: ... finally: and in the
finally: clause does

            finally:
                if conn:
                    conn.quit()

to close the nntp connection if it is open. It appears that the
connection may be already closed at this point because of a prior
exception. Are there any '(NNTPDirect) xxx error for list ...'
messages in the error log?. If not you could locate the following in
Mailman/Queue/NewsRunner.py

                except nntplib.error_temp, e:
                    syslog('error',
                           '(NNTPDirect) NNTP error for list "%s": %s',
                           mlist.internal_name(), e)
                except socket.error, e:
                    syslog('error',
                           '(NNTPDirect) socket error for list "%s":
%s',
                           mlist.internal_name(), e)
            finally:
                if conn:
                    conn.quit()

and replace

                except nntplib.error_temp, e:

with

                except nntplib.NNTPError, e:

and see if that gives any more information. nntplib does have a debug
facility, but don't try to use it because it writes the debug output
to stdout and NewsRunner doesn't have a stdout so this just causes
more problems.

-- 
Mark Sapiro <mark at msapiro.net>        The highway is for gamblers,
San Francisco Bay Area, California    better use your sense - B. Dylan



More information about the Mailman-Users mailing list