(Illustration by Gaich Muramatsu)
In some email I received from Jan Harkes <jaharkes_at_cs.cmu.edu> on Tue, 8 Jul 2003 11:39:45 -0400, wrote: > On Tue, Jul 08, 2003 at 03:27:41PM +0100, lou wrote: [...] > AFS3 concurrent O_RDWR scenario > > client2 > foo = open('foo', O_RDWR); > write(foo, "a"); > > client1 > foo = open('foo', O_RDWR); > write(foo, "test"); > close(foo); > /* foo now contains "test" */ > > client2 > close(foo); > /* surprise! foo now contains "t" */ You mean 'a' not 't' right? > I actually like it that Coda gives me a conflict in these situations, at > least I get to keep both pieces. That's good enough, but wont it be more sensible instead of taking a whole volume into a disconnect write mode to happen something like: stat(file,..) // == foo if(open-with-rw){ read(file) && write(file-temp) file = file-temp; } // copy the content into a different file content +warning foo = open(file, O_RDWR); // do writes/reads The first win, and the last will have to merge files locally if someone wants to write in them. But that option should be available only in times of RW rather than reads, none of those reads would pass the (open-with-rw) condition.. have a weird feeling that this will hit the performance. Actually I havent thought too much about it in general, since I know that merging content of files (especially binaries or db files) is not an easy job, at least not so easy to automate. But there are still few workarounds which can be done. Just brainstorming around. Thanks. cheers -louReceived on 2003-07-08 12:14:42