Coda File System

local/global conflict with only 1 client!!

From: Greg Troxel <gdt_at_fnord.ir.bbn.com>
Date: 13 Oct 2000 15:22:05 -0400
I've recently started to put more and more of my files into coda, so
I'm seeing more problems :-)

I was emacsing a file on a client, and ended up disconnected due to
IPsec flaking on me.  The disconnection was such that venus->vice
packets still got through, but vice->venus did not (I was getting
messages on the console that said packet received for unknown SPI).
After a few minutes I restarted IKE etc. to fix IPsec, and then found
that I had a local/global conflict.   I had not done anything near
this directory on any other clients.  The server had a zero-length
file and the local version had 400-odd bytes.  This was trivial to
repair with preservelocal, but it was very odd that it happened.

I have some crazed speculation on how this happened:

venus does some operations, all is well
network becomes half-disconnected as above
user edits file, causing emacs to create #foo# autosave
venus does Store[0]
			server receives Store[0], does it, acks
venus does not get ack
venus goes disconnected
emacs create succeeds
emacs writes 400 bytes into the file, adding Store[400] to CML

[time passes]

venus coalesces the two stores

connectivity is restored

venus notices the server is up, or cfs cs etc.

venus sends a Store[468] based on the VV from the create/store 0
and this doesn't match.



Now, I don't really understand things very well, but I thought I'd
throw this out.  It might make sense to add a rule that operations
which have ever been sent to any server (but not acked) cannot get
coalesced.  This assumes that the coalescing is the problem, not just
the fact that it's being done as a reintegration rather than a
rexmission of the previous.

I'm guessing that this 1-way connectivity is not that common, aside
from people with problems like me.

        Greg Troxel <gdt_at_ir.bbn.com>
Received on 2000-10-13 15:31:14