-- 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.