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