-- Transport Mechanism Registration Server - Access to the B-Tree --
-- [Juniper]<Grapevine>MS>RegBTreeDefs.mesa
-- Andrew Birrell 27-Oct-82 15:56:08 --
DIRECTORY
BodyDefs: FROM "BodyDefs"
USING[ RName, Timestamp ],
HeapDefs: FROM "HeapDefs"
USING[ ObjectNumber, ReaderHandle, WriterHandle ],
ProtocolDefs: FROM "ProtocolDefs"
USING[ RNameType ];
RegBTreeDefs: DEFINITIONS = BEGIN
RegBTree: PROGRAM;
RegistryObject: TYPE = RECORD[ type: ProtocolDefs.RNameType,
stamp: BodyDefs.Timestamp,
reader: HeapDefs.ReaderHandle ];
LookupReason: TYPE = {readNone, readGroup, readIndividual, readEither,
readAny};
Lookup: PROCEDURE[name: BodyDefs.RName, reason: LookupReason ]
RETURNS[ info: RegistryObject ];
Insert: PROCEDURE[ name: BodyDefs.RName,
type: ProtocolDefs.RNameType,
stamp: POINTER TO BodyDefs.Timestamp,
writer: HeapDefs.WriterHandle,
info: POINTER TO RegistryObject ];
KnownRegistry: PROC[name: BodyDefs.RName, yes: BOOLEAN];
-- Record that the entry (which is a group in the GV registry) is/isnt
-- a registry known locally.
RegState: TYPE = { yes--local registry--,
no --non-local registry--,
bad--not a registry-- };
TestKnownReg: PROC[name: BodyDefs.RName]
RETURNS[state: RegState];
-- Tells whether the name is/isnt in a registry which is recorded as a
-- registry known locally.
UpdateFailed: ERROR[info: RegistryObject];
-- this is raised by Insert if the relevant B-Tree entry differs from the
-- entry that existed when the corresponding Lookup was performed.
-- The update should be re-calculated. The parameter of this signal is
-- the info produced now by a lookup of the B-Tree. This is the primary
-- means of synchronising on accesses to the registration server's
-- B-Tree. --
EnumerateTree: PROCEDURE[ type: ProtocolDefs.RNameType,
action: PROCEDURE[BodyDefs.RName] ];
-- calls "action" for each entry in the B-Tree of the given type --
MarkKnown: SIGNAL;
-- Ugh! But it's upwards compatible. Raised during EnumerateTree to
-- request that entry be marked as a known registry.
KeepObject: PROCEDURE[ name: BodyDefs.RName,
type: ProtocolDefs.RNameType,
stamp: POINTER TO BodyDefs.Timestamp,
number: HeapDefs.ObjectNumber ];
-- Called for object found during the restart sequence, only --
RegPurger: PROC;
-- forks the RS BTree purger process --
END.