-- AlpineVolume.mesa -- Last edited by -- Kolling on March 9, 1983 11:08 am -- MBrown on March 1, 1983 4:13 pm -- This is an interim interface. We expect it to evolve in the direction of: control of --volume group locking, controlling the online/offline status of volume groups, etc. DIRECTORY AlpineEnvironment; AlpineVolume: DEFINITIONS = BEGIN Conversation: TYPE = AlpineEnvironment.Conversation; LockOption: TYPE = AlpineEnvironment.LockOption; TransID: TYPE = AlpineEnvironment.TransID; nullTransID: TransID = AlpineEnvironment.nullTransID; VolumeID: TYPE = AlpineEnvironment.VolumeID; VolumeGroupID: TYPE = AlpineEnvironment.VolumeGroupID; nullVolumeGroupID: VolumeGroupID = AlpineEnvironment.nullVolumeGroupID; GetNextGroup: PROC [ conversation: Conversation, transID: TransID ← nullTransID, previousGroup: VolumeGroupID ← nullVolumeGroupID, lock: LockOption ← [none, wait]] RETURNS [volumeGroupID: VolumeGroupID]; -- ! Unknown {volumeGroupID}; -- Stateless enumerator for the on-line volume groups of this Alpine instance. -- previousGroup = nullVolumeGroupID starts an enumeration, and -- volumeGroupID = nullVolumeGroupID is returned at the end of an enumeration. -- For now, the transID and lock parms are ignored. The proposed usage is as follows: -- If transID # nullTransID and lock.mode # none then sets the specified lock on the -- returned volume group. Setting a read lock guarantees that the volume group -- will remain on-line for the remainder of the transaction. Setting a write lock -- excludes all other access to the volume group for the remainder of the transaction -- (including opening files on the volume group); this requires the caller to be -- an asserted AlpineWheel. GetGroup: PROC [ conversation: Conversation, transID: TransID ← nullTransID, volumeGroupID: VolumeGroupID, lock: LockOption ← [none, wait]] RETURNS [volumes: LIST OF VolumeID]; -- ! Unknown {volumeGroupID}; -- Returns the list of volumes belonging to the specified volumeGroup. -- Locking is as for GetNextGroup. GetEnclosingGroup: PROC [ conversation: Conversation, transID: TransID ← nullTransID, volumeID: VolumeID, lock: LockOption ← [none, wait]] RETURNS [volumeGroupID: VolumeGroupID]; -- ! Unknown {volumeID}; -- Returns the VolumeGroupID of the volume group containing the specified -- volume. -- Locking is as for GetNextGroup. AccessFailed: ERROR [missingAccess: AlpineEnvironment.NeededAccess]; Unknown: ERROR [what: AlpineEnvironment.UnknownType]; StaticallyInvalid: ERROR; END.