[Raw Msg Headers][Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Multiple Routers Processing A Single Message (patch enclosed)

> Matti-
> As we have discussed recently, one can enforce single-threadedness of
> renaming of the message files in $POSTOFFICE/router by using link() and
> unlink() and checking the return from unlink().  Participants seemed to be of
> the opinion that unlink() should always be an atomic operation, whereas
> rename() is apparently not always atomic.
> I've implemented this change after testing the theory using file locks for
> several days.  The duplicate messages ceased.

	There were dupes even with file-locks ?

> The diff below changes lib/esyslib.c to never use rename(), but to use link()
> and unlink() instead and check the outcome of the unlink().  If the unlink()
> of "from" fails, then "to" is also unlink()ed and we return -1 to indicate
> failure - either due to an error or because another router process link()ed
> and unlink()ed the file before we could.  This should enforce single-threaded
> renaming in the routers.

	I accepted it in a bit different form.  For  erename()  the rename(2)
	is ok, but for  eqrename()  that is used for acquiring locking, it
	will now always use  link(2)/unlink(2).

	The  rename(2) is nice with NFS, I think.  One message instead of
	a slew of them...

	It looks like ZMailer can never be put on top of Andrew-FS, which
	allows only one link to any file...  (Not that I have any reason
	to want to do that, for that matter.)

> I submit the following diff (against v2.99.46) for your consideration.  I
> have placed the resultant router into production use on several IRIX 5.3
> systems.
> -Andy

	/Matti Aarnio <mea@nic.funet.fi>