Oberon || Library || Module Index || Search Engine || Definition || Module


Ulm's Oberon Library:
RobustRoots


NAME

RobustRoots - robust root nodes

SYNOPSIS

TYPE ImportedRoot = POINTER TO ImportedRootRec;
TYPE ImportedRootRec = RECORD (Disciplines.ObjectRec) END;


PROCEDURE Import(address: Networks.Address; path: ARRAY OF CHAR; auth: Shards.Lid; errors: RelatedEvents.Object); PROCEDURE ImportR(address: Networks.Address; root: Names.Node; path: ARRAY OF CHAR; auth: Shards.Lid; errors: RelatedEvents.Object); PROCEDURE TemporaryImport(address: Networks.Address; path: ARRAY OF CHAR; auth: Shards.Lid; errors: RelatedEvents.Object; VAR import: ImportedRoot); PROCEDURE TemporaryImportR(address: Networks.Address; root: Names.Node; path: ARRAY OF CHAR; auth: Shards.Lid; errors: RelatedEvents.Object; VAR import: ImportedRoot);

DESCRIPTION

Root nodes are the roots of a particular Oberon name space. A local root node is provided by Names.root, representing ``/''. The root node of a public name space served by an Oberon name server is usually accessible through a service following the protocol of NamesBootService. During its initialization, UnixNames attempts to import the root node of the local Oberon name space as ``/pub''. Likewise, Oberon name servers may maintain links to each other. These links to root nodes are, however, fragile and cannot survive through RobustObjects as RobustObjects requires a working name space that depends on these links.

Robustness, as defined by RobustObjects, is the ability of a proxy object of RemoteObjects to survive a broken network connection or the termination of the original object. RobustRoots, in contrast, does not preserve the proxy objects of imported roots. Instead, RobustRoots just attempts to re-import a terminated root object through NamesBootService and, if this is successful, RobustRoots attempts to insert the new proxy object under the given path name. If re-imports fail, new attempts are scheduled after some delay.

Hence, RobustRoots does not replace RobustObjects but allows to tie separate name spaces reliably such that the techniques of PathConditions and RobustObjects work over name spaces that extend over multiple Oberon name servers.

A robust import relation can be easily terminated for objects imported by RobustObjects by terminating the proxy object. This, however, does not work for root nodes imported by RobustRoots as RobustRoots would immediately attempt to re-import the root node again. The persistence of RobustRoots to re-import a root node can be stopped by following two methods only:

All four import procedures take an address parameter that is directly passed to NamesBootService.Import. The path is interpreted by Paths relatively to Names.root (Import and TemporaryImport) or to the given root (ImportR and TemporaryImportR). The authorization shard auth is passed to Names.Insert. TemporaryImport and TemporaryImportR return a reference object which upon termination stops all further attempts to re-import the root node.

DIAGNOSTICS

All error events during attempts to import the root node are related to errors.

SEE ALSO

NamesBootService
service which exports root nodes at known addresses
Names
Oberon name spaces
Path
interpretation of paths within Oberon name spaces
RobustObjects
proxy objects that survive their original objects
UnixNames
imports the root node of the local Oberon name server

Edited by: borchert, last change: 2005/04/28, revision: 1.1, converted to HTML: 2005/04/28

Oberon || Library || Module Index || Search Engine || Definition || Module