[816] in testers

home help back first fref pref prev next nref lref last post

Re: Proper/better (?) fix to VAX afs time skew

daemon@ATHENA.MIT.EDU (daemon@ATHENA.MIT.EDU)
Mon May 21 08:09:57 1990

Date: Mon, 21 May 90 08:09:13 -0400
To: Richard Basch <probe@MIT.EDU>
Cc: epeisach@MIT.EDU, testers@MIT.EDU, bug-afs@MIT.EDU
In-Reply-To: Richard Basch's message of Mon, 21 May 90 07:52:28 -0400,
From: Richard Basch <probe@MIT.EDU>

   Date: Mon, 21 May 90 07:52:28 -0400
   From: Richard Basch <probe@MIT.EDU>
   X-Work: 1 Amherst St. E40-318, Cambridge, MA 02139, (617)253-0100


      From: epeisach@ATHENA.MIT.EDU
      Date: Sun, 20 May 90 22:23:22 -0400

   	. . .

      There is one concern I have with my change: When writing to a file, the
      Dataversion must change so that flushing it will do something. I have
      not verified that the code is proper in that area, but I do appear to be
      soring files, so I assume it works. (Not really the right assumption so
      it needs to be checked). There is another versionnumber that deals with
      mod's, so this fix should be examined with this other aspect in
      light....

   First, let me state from looking at the patch for about an hour and the
   various paths, your patch looks correct, with the possible exception of
   the write path, which I was unable to trace... apparently, the write
   path involves the callback mechanism, and there at least seems to be
   code to detect changes on the server as the callback mechanism updates
   the f.Unique field of the cache entry.  afs_StoreDCache seems to send
   out the data to the server, and I suspect that it receives a callback
   after that in order to obtain the new version number.  Essentially, it
   is the FidCmp() macro that detects changes in the f.Unique field (and
   the f.Vnode, f.Volume, and f.Cell fields) and appropriate action is then
   taken... checking all this logic may take a few weeks.

   -Richard

You'll love this one... the only way it could work, from looking at the
client code is:

1) You do a store.  DFEntryMod is reset.
2) A callback is received...
	f.Unique
	f.Vnode
	f.Volume
	f.Cell
   are all updated for the cache entry.
3) Next time an operation is done, the FidCmp() checks will fail because
   of the different Unique values.  The next ProcessFS() will update the
   local concept of the active data version number.

Exactly what happens here is a little bit of a mystery... I am still
trying to see if I missed something in the mechanism that detects that
the latest version is still on that client... the callback does have
"writer" information, and there seems to be some processing based on
that.  Anyway, a full analysis will entail examining the callback
mechanism on the server end also.

-Richard

home help back first fref pref prev next nref lref last post