Subject: Byzantine Routers - create/remove

From: Neil Brown <[email-masked]>
Date: Thu, 18 Nov 1999 11:42:21 +1100 (EST)

While thinking about the Byzantine Router problem, I wondered about
REMOVE calls, and the possible problem that a 
   REMOVE
   OPEN/CREATE
sequence could see the REMOVE being redelivered after the create with
undesirable consequences.
Forutately, the protocol as it stands can allow the client to avoid
that.

If the client does a LOOKUP first to get the filehandle (which it
possibly has anyway), and then does:
  COMPOUND { PUTFH dir; LOOKUP name; VERIFY(filehandle==fh); PUTFH  dir; DELETE name }

Then a replay of that compound wont delete the newly created file. 
This doesn't protect against
   link a b
   unlink b
   link a b

but maybe adding the "change" attribute to the VERIFY would help.

I have suggested before that the example for VERIFY in the draft isn't
the best as it doesn't guarantee much due to the lack of atomicity.
Would this be a suitable alternate example?

NeilBrown