<> <> <> <> DIRECTORY AlpineEnvironment, TransactionMap; VolumeGroup: DEFINITIONS = BEGIN LockOption: TYPE = AlpineEnvironment.LockOption; nullVolumeGroupID: VolumeGroupID = AlpineEnvironment.nullVolumeGroupID; nullVolumeID: VolumeID = AlpineEnvironment.nullVolumeID; PageCount: TYPE = AlpineEnvironment.PageCount; VolOrVolGroupID: TYPE = AlpineEnvironment.VolOrVolGroupID; VolumeGroupID: TYPE = AlpineEnvironment.VolumeGroupID; VolumeID: TYPE = AlpineEnvironment.VolumeID; Open: PROCEDURE [volumeGroupID: VolumeGroupID, volumes: LIST OF VolumeID, trans: TransactionMap.Handle]; <> <> Close: PROCEDURE [volumeGroupID: VolumeGroupID, trans: TransactionMap.Handle]; <> <> Identify: PROCEDURE [volID: VolOrVolGroupID, trans: TransactionMap.Handle _ TransactionMap.nullHandle, lock: LockOption _ [none, wait]] RETURNS [volumeID: VolumeID, volumeGroupID: VolumeGroupID]; <> <> GetVolumes: PROCEDURE [volumeGroupID: VolumeGroupID, trans: TransactionMap.Handle _ TransactionMap.nullHandle, lock: LockOption _ [none, wait]] RETURNS [volumes: LIST OF VolumeID]; <> <> GetNext: PROCEDURE [volumeGroupID: VolumeGroupID, trans: TransactionMap.Handle _ TransactionMap.nullHandle, lock: LockOption _ [none, wait]] RETURNS [nextVolumeGroup: VolumeGroupID]; <> <> SelectVolumeForCreate: PROCEDURE [volumeGroupID: VolumeGroupID, count: PageCount] RETURNS [volumeID: VolumeID]; <> <> Lock: PROCEDURE [volumeGroupID: VolumeGroupID, trans: TransactionMap.Handle, lock: LockOption _ [read, wait]]; <> <> Failed: ERROR [why: Failure]; Failure: TYPE = {duplicateVol, duplicateVolGroup, empty, insufficientSpace, nullVolGroupID, unknownVolOrVolGroupID, unknownVolumeGroupID}; END.