<> <> <> <> <> <> <> <> DIRECTORY YggEnvironment; YggTransMgr: DEFINITIONS = BEGIN < coordinator.>> <> <> RegisterWorker: PROC [ conversation: YggEnvironment.Conversation, trans: YggEnvironment.TransID] RETURNS [RegisterWorkerResult]; <> RegisterWorkerResult: TYPE = {ok, transNotActive, duplicateCall}; < worker.>> <> <> WorkerPrepare: PROC [ conversation: YggEnvironment.Conversation, trans: YggEnvironment.TransID, newTrans: YggEnvironment.TransID] RETURNS [WorkerState --{notReady, readOnlyReady, ready}--]; <> <> <> <> <> <> <> <<>> <> <> <> <> <> <> <> <> WorkerFinish: PROC [ conversation: YggEnvironment.Conversation, trans: YggEnvironment.TransID, requiredOutcome: RequiredOutcome --{abort, commit}--]; <> <> <> <> RequiredOutcome: TYPE = YggEnvironment.CommitOrAbort; WorkerState: TYPE = YggEnvironment.WorkerState; Refused: ERROR [why: Refusal]; Refusal: TYPE = {wrongCoordinator, notReady}; END. <> <> <<>>