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