On Tue, Jul 24, 2001 at 10:35:39PM -0400, Jinsuo Zhang wrote:
> Dear all:
> Could someboday tell me how the CML solve the problem in this
> scenario:
> 1. editor is used to edit file paper.doc .
> 2. editor copy paper.doc into to .paper.doc.swap
create .paper.doc.swap
store .paper.doc.swap
> 3. the modification is on the temporary file.
store .paper.doc.swap (optimizes away the previous store in the CML)
> 4. after every save(clicking save in editor save menu), the content
> in temporary file is copied into paper.doc
store paper.doc
Actually it looks like you are describing how 'vim' is updating files
and the save action there is really:
rename paper.doc paper.doc.orig
create paper.doc
store paper.doc
remove paper.doc.orig
> then, how Coda trace the regional modification and replay in
> server?
It remembers al the create/store/rename/remove/setattr operations. Coda
also does optimizations to reduce the size of the CML and the amount of
data to be sent back to the server.
i.e.
operation overwrites previous
store store, utimes
chown chown
chmod chmod
utimes utimes
remove store, chown, chmod, utimes
removedir chown, chmod, utimes
Then there are whole sequences that can be removed when the last
operation in the sequence is seen, such as,
create (store|chown|chmod|utimes|link|unlink|rename)* remove
All of this is described in great detail in chapter 6 of James Kistler's
thesis "Disconnected Operation in a Distributed File System", which can
be found at
http://www.cs.cmu.edu/afs/cs/project/coda-www/ResearchWebPages/docs-coda.html
Jan