<> <> <> <> 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]; 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]; END. <<>> <> <<>> <>