Nope, you;ve got it backwards. To begin, the same basic problem
applies to both. If an operation succeeds, but the
acknowledgement gets lost on the network, then the time-out
cause a retry which will fail because the target item exists.
So, even the user that created the lock doesn't know that
*their* operation succeeded.
With "mkdir", that is fatal - there is no way to look at a
directory and tell which program created it (well maybe you
could manage to have every process use a different group).
With "ln", it is not. As long as each process uses their own
private file with distinguishable contents (like its process
id), then if the link succeeds the created lock file will
contain the creator's process id - *even* if NFS gets confused
and says that the operation failed. So, as long as you ignore
the status of the "ln" attempt, but instead read the lock file
and compare with the process id you tried to register, you can
safely determine whether you created a lock file.
Stateless protocols have a definite downside.
-- Perl's grammar can not be reduced to BNF. The work of | John Macdonald parsing perl is distributed between yacc, the lexer, | jmm@elegant.com smoke and mirrors. - Chaim Frenkel |