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