Werner Spirk wrote:
>
>I have installed mailman-2.1.14 on NFS.
>We use NFS as the common platform between mailman server and
>WWW server.
>
>The problem is that it could happen that
>the subscription of new members ether via the add-members cmd
>or via the WWW surface as an admin did not do:
>the members have got welcome messages, there are log entries
>in the subscribe log but the members aren't in the list
>(no changes/mail addresses in the pck-file).
>
>If you repeat the subscription directly after the first trail
>it will normally do.
>
>There were no activities on the mailman server at that times.


There is an issue that can cause this behavior, but it only occurs if
two parallel processes, e.g. the member add and another member add or
a post to the same list, occur within the same second.


>In the locks log there can be an entry - not always
>when  subsrcriptions fails:
><list>.lock lifetime has expired, breaking
>But there are no lock/unlock entries.


You can get more information including lock/unlock entries in the locks
log by putting

LIST_LOCK_DEBUGGING = On

in mm_cfg.py and restarting Mailman.

Is there anything in Mailman's error log?

I have attached a patch (list_reload.patch.txt) that addresses the
issue I mention above. It may help, but I suspect some kind of NFS
delays are involved. Try setting LIST_LOCK_DEBUGGING = On and report
what's in the locks log.

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

=== modified file 'Mailman/MailList.py'
--- Mailman/MailList.py 2008-08-21 21:35:20 +0000
+++ Mailman/MailList.py 2008-08-22 22:16:29 +0000
@@ -599,8 +599,11 @@
             # file doesn't exist, we'll get an EnvironmentError with errno set
             # to ENOENT (EnvironmentError is the base class of IOError and
             # OSError).
+            # We test strictly less than here because the resolution is whole
+            # seconds and we have seen cases of the file being updated by
+            # another process in the same second.
             mtime = os.path.getmtime(dbfile)
-            if mtime <= self.__timestamp:
+            if mtime < self.__timestamp:
                 # File is not newer
                 return None, None
             fp = open(dbfile)
@@ -618,8 +621,9 @@
                 return None, e
         finally:
             fp.close()
-        # Update timestamp
-        self.__timestamp = mtime
+        # Update the timestamp.  We use current time here rather than mtime
+        # so the test above might succeed the next time.
+        self.__timestamp = int(time.time())
         return dict, None
 
     def Load(self, check_version=True):

------------------------------------------------------
Mailman-Users mailing list Mailman-Users@python.org
http://mail.python.org/mailman/listinfo/mailman-users
Mailman FAQ: http://wiki.list.org/x/AgA3
Security Policy: http://wiki.list.org/x/QIA9
Searchable Archives: http://www.mail-archive.com/mailman-users%40python.org/
Unsubscribe: 
http://mail.python.org/mailman/options/mailman-users/archive%40jab.org

Reply via email to