<> <> <> <> <> DIRECTORY AlpineEnvironment USING [allOwnerProperties, CommitOrAbort, FileStore, LockFailure, LockOption, NeededAccess, nullVolumeGroupID, OperationFailure, Outcome, OwnerName, OwnerPropertySet, OwnerPropertyValuePair, PageCount, TransID, UnknownType, VolumeID, VolumeGroupID], AlpInstance USING [Handle], AlpineTransaction USING [RequestedOutcome]; AlpTransaction: CEDAR DEFINITIONS = BEGIN allOwnerProperties: OwnerPropertySet = AlpineEnvironment.allOwnerProperties; FileStore: TYPE = AlpineEnvironment.FileStore; LockOption: TYPE = AlpineEnvironment.LockOption; nullVolumeGroupID: VolumeGroupID = AlpineEnvironment.nullVolumeGroupID; Outcome: TYPE = AlpineEnvironment.Outcome; OwnerName: TYPE = AlpineEnvironment.OwnerName; OwnerPropertySet: TYPE = AlpineEnvironment.OwnerPropertySet; OwnerPropertyValuePair: TYPE = AlpineEnvironment.OwnerPropertyValuePair; PageCount: TYPE = AlpineEnvironment.PageCount; RequestedOutcome: TYPE = AlpineTransaction.RequestedOutcome; TransID: TYPE = AlpineEnvironment.TransID; VolumeID: TYPE = AlpineEnvironment.VolumeID; VolumeGroupID: TYPE = AlpineEnvironment.VolumeGroupID; AccessFailed: READONLY ERROR [missingAccess: AlpineEnvironment.NeededAccess]; LockFailed: READONLY ERROR [why: AlpineEnvironment.LockFailure]; OperationFailed: READONLY ERROR [why: AlpineEnvironment.OperationFailure]; StaticallyInvalid: READONLY ERROR; Unknown: READONLY ERROR [what: AlpineEnvironment.UnknownType]; PossiblyDamaged: READONLY SIGNAL; Handle: TYPE = REF Object; Object: TYPE = RECORD[inst: AlpInstance.Handle, transID: TransID]; <> <<>> <> Create: PROCEDURE [instHandle: AlpInstance.Handle, createLocalWorker: BOOLEAN _ TRUE] RETURNS [handle: Handle]; <> <], and is guaranteed not to raise any of the errors raised by CreateWorker.>> CreateWithTransID: PROCEDURE [instHandle: AlpInstance.Handle, transID: TransID, createLocalWorker: BOOLEAN _ TRUE] RETURNS [handle: Handle]; <> <> CreateWorker: PROCEDURE[handle: Handle, coordinator: FileStore]; <> <> Finish: PROCEDURE[handle: Handle, requestedOutcome: RequestedOutcome, continue: BOOLEAN _ FALSE] RETURNS[outcome: Outcome]; <> <> AssertAlpineWheel: PROCEDURE[handle: Handle, enable: BOOLEAN]; <> <> <<>> <> GetVolumeGroup: PROCEDURE[handle: Handle, volumeGroupID: VolumeGroupID, lock: LockOption _ [none, wait]] RETURNS[volumes: LIST OF VolumeID]; <> <> GetNextVolumeGroup: PROCEDURE[handle: Handle, previousGroup: VolumeGroupID _ nullVolumeGroupID, lock: LockOption _ [none, wait]] RETURNS[volumeGroupID: VolumeGroupID]; <> <> <> GetEnclosingVolumeGroup: PROCEDURE[handle: Handle, volumeID: VolumeID, lock: LockOption _ [none, wait]] RETURNS[volumeGroupID: VolumeGroupID]; <> <> <<>> <> CreateOwner: PROCEDURE[handle: Handle, volumeGroupID: VolumeGroupID, owner: OwnerName, properties: LIST OF OwnerPropertyValuePair, enforceTotalQuota: BOOLEAN _ FALSE] RETURNS[spaceLeftOnVolumeGroup: PageCount]; <> <> DestroyOwner: PROCEDURE[handle: Handle, volumeGroupID: VolumeGroupID, owner: OwnerName]; <> <> ReadNextOwner: PROCEDURE[handle: Handle, volumeGroupID: VolumeGroupID, previousOwner: OwnerName _ NIL, desiredProperties: OwnerPropertySet _ allOwnerProperties] RETURNS[owner: OwnerName, properties: LIST OF OwnerPropertyValuePair]; <> <> ReadOwnerProperties: PROCEDURE[handle: Handle, volumeGroupID: VolumeGroupID, owner: OwnerName, desiredProperties: OwnerPropertySet _ allOwnerProperties] RETURNS[properties: LIST OF OwnerPropertyValuePair]; <> <> WriteOwnerProperties: PROCEDURE[handle: Handle, volumeGroupID: VolumeGroupID, owner: OwnerName, overCommitQuotasIfNeeded: BOOLEAN _ FALSE, properties: LIST OF OwnerPropertyValuePair]; <> <> <> <> <> <> ReadOwnerDBProperties: PROCEDURE[handle: Handle, volumeGroupID: VolumeGroupID] RETURNS[nOwners, nEntriesUsed, nEntries: NAT, totalQuota, totalSpaceInUse, volumeGroupSize: PageCount]; <> <> <<>> <> ReorganizeOwnerDB: PROCEDURE[handle: Handle, volumeGroupID: VolumeGroupID, nEntries: NAT]; <> <> <<>> UnlockOwnerDB: PROC [handle: Handle, volumeGroupID: VolumeGroupID]; <> <> END. <<>> <> <<>> <> <> <> <<>>