[Date Prev][Date Next][Thread Prev][Thread Next][Author Index][Date Index][Thread Index]

Re: A summary of the MDSE meeting.

Minor quibble on URDI:  The marks in the staging stream say:
"If all the changes before this mark AND NONE AFTER have been hung
in the closet, the closet contains a consistent data structure."

The URDI has some other nice properties, which were covered in the
meeting but not in Hill's summary.  Highlights:

 - Single-threaded update, multi-threaded lookup falls out almost
   automatically.  (A lookup thread only needs a consistent view
   of the data structure for the duration of an indivisible
   operation.  It doesn't care if that view is a quarter-second
   out-of-date.  Despite Drexler's wonderful work, we must assume
   indivisible operations will now and then require reading more
   than one snarf.  With the breezes of change making Ents sway
   and entries blow around on extendable hash tables, an unblurred
   snapshot is necessary to keep the lookup thread from getting
   lost in mixed metaphores.)

 - URDI doesn't care what the snarfs contain.  It only cares where
   they are to be stored and where the boundaries of a multi-snarf
   update lie.  Thus it can be specified, coded, and debugged without
   waiting for the data structure definitions to settle, and changes
   to the data structure won't require re-writing it.

 - URDI manages a write cache for snarfs, and must intercept and
   sometimes redirect snarf reads to provide the consistent viewpoint.
   The simple way to do this makes URDI do the read caching and disk
   access optimization as well, with the MDSE threads telling it only
   what they want to see and when they're done with it.  (URDI's caching
   strategy MAY be affected by the data structure organization, but
   doesn't have to track structure changes tightly.  Using a "wrong"
   strategy means fewer cache hits, not algorithm failure.)

 - URDI encapsulates platform-dependent file-access issues, insulating
   the MDSE from the opsystem and hardware.

Just before Christmas Break, Marcm sat down with me and we sketched the
URDI/MDSE interface.  It is a set of nine MDSE->URDI calls, covering
steady-state operation (i.e., not startup or shutdown).  My next steps
are to flesh this into a full spec and code an URDI.  Related research:

 - Following a Drexler-supplied pointer ("Shadow Files") into DBMS
   theory (to see if I'm re-inventing a wheel and/or missing a bet.)

 - Examining the guts behind the "fsync()" system call in SunOS and A/UX.

(I don't expect these to take much time, and each can be abandoned or
 punted if they prove lengthy.)