<> <> < YgTransactionMap.Handle, and public operations on YgTransactionMap.Handle.>> <> <> <> <> <> <> DIRECTORY BasicTime, YggEnvironment, YggInternal; YggTransactionMap: DEFINITIONS = BEGIN Conversation: TYPE = YggEnvironment.Conversation; TransID: TYPE = YggEnvironment.TransID; <> Handle: TYPE = YggInternal.TransHandle; nullHandle: Handle = NIL; <> Register: PROC [self: Handle] RETURNS [alreadyRegistered: BOOL]; <> <> <> GetHandle: PROC [transID: TransID] RETURNS [Handle]; <> Unregister: PROC [self: Handle]; EnumProc: TYPE = PROC [Handle] RETURNS [stop: BOOL]; LockedEnumerate: PROC [proc: EnumProc]; <> <> <> UnlockedEnumerate: PROC [proc: EnumProc]; <> <> <> <> GetTransID: PROC [self: Handle] RETURNS [TransID]; <> StartWork: PROC [self: Handle, difficulty: YggInternal.WorkLevel _ normal] RETURNS [canWork: BOOL]; <> <> <> <> <> <> <> StopWork: PROC [self: Handle, estimatedUpdateCost: INT]; <> <> <> <> GetTimeOfLastStartWork: PROC [self: Handle] RETURNS [BasicTime.GMT]; <> <> GetEstimatedUpdateCost: PROC [self: Handle] RETURNS [INT]; <> EnableYggdrasilWheel: PROC [self: Handle, conversation: Conversation, enable: BOOL]; IsYggdrasilWheel: PROC [self: Handle, conversation: Conversation] RETURNS [enabled: BOOL]; <> <> <> <> <> <> <> GetLockHeader: PROC [self: Handle] RETURNS [lockHeader: YggInternal.LockTransHeaderHandle]; <> IsCommitted: PROC [self: Handle] RETURNS [BOOL]; <> <> TransState: TYPE = YggInternal.TransState; --{committed, aborted, ready}-- StateDuringRecovery: PROC [self: Handle] RETURNS [TransState]; <> <> AbortUnilaterally: PROC [self: Handle, why: AbortReason]; <> <> AbortReason: TYPE = { clientRequest, deadlock, timeout, blockingNewLockRequest, tooManyTransactions, oldUncommittedUpdates }; AssertUpdatesAreComplete: PROC [self: Handle]; <> <<(if self committed) or have been undone (if self aborted), at the level of the>> <> <> <> END. <> <> <<>>