-- AlpineTransaction.mesa
-- Last edited by
--   MBrown on March 1, 1983 3:30 pm
--   Taft on 29-Jan-82 10:14:13
--   Kolling on March 8, 1983 2:35 pm
DIRECTORY
  AlpineEnvironment;
AlpineTransaction: DEFINITIONS =
  BEGIN
  Conversation: TYPE = AlpineEnvironment.Conversation;
  TransID: TYPE = AlpineEnvironment.TransID;
  FileStore: TYPE = AlpineEnvironment.FileStore;
  Create: PROC [conversation: Conversation, createLocalWorker: BOOL ← TRUE]
   RETURNS [transID: TransID];
      --! OperationFailed {busy};
      -- Call from client to coordinator.
      -- If createLocalWorker, then calls CreateWorker[conversation, transID, <self>],
      -- and is guaranteed not to raise any of the errors raised by CreateWorker.
  CreateWorker: PROC [
    conversation: Conversation,
    transID: TransID,
    coordinator: FileStore];
      --! Unknown {coordinator, transID};
      -- Call from client to worker.
      -- This procedure returns (i.e. does not raise an error) iff trans becomes active
      -- (prepared to do work) on the called server.  Of course, there is no guarantee
      -- that this state will last for any length of time.
  AssertAlpineWheel: PROC [
    conversation: Conversation,
    transID: TransID,
    enable: BOOL ← TRUE];
    -- ! OperationFailed {regServersUnavailable, notAlpineWheel},
    -- ! Unknown {transID}.
    -- When called with enable = TRUE, causes all subsequent calls for this
    -- (conversation, transID) pair to pass all access control checks without further
    -- checking; raises OperationFailed [notAlpineWheel] if the caller identified by
    -- conversationis not a member of the AlpineWheels group for this server.  When
    -- called with enable = FALSE, causes normal access control checking to resume
    -- for this (conversation, transID) pair.
  RequestedOutcome: TYPE = AlpineEnvironment.CommitOrAbort;
  Outcome: TYPE = AlpineEnvironment.Outcome;
  Finish: PROC [
    conversation: Conversation,
    transID: TransID,
    requestedOutcome: RequestedOutcome --{abort, commit}--,
    continue: BOOL ← FALSE]
    RETURNS [outcome: Outcome --{abort, commit, unknown}--,
    newTrans: TransID];
      --! (none);
      -- Call from client to coordinator.
      -- newTrans is meaningless unless requestedOutcome = commit, continue = TRUE,
      -- and outcome = commit.
  Unknown: ERROR [what: AlpineEnvironment.UnknownType];
  OperationFailed: ERROR [why: AlpineEnvironment.OperationFailure];
  
  END.
CHANGE LOG
Changed by MBrown on January 21, 1983 10:28 pm
-- Added createLocalWorker parm to Create.  Renamed trans -> transID to be consistent
-- with AlpineFile.
Changed by MBrown on March 1, 1983 3:29 pm
-- Moved AssertAlpineWheel here, from AlpineOwner; it now raises
-- OperationFailed [notAlpineWheel] instead of AccessFailed [alpineWheel].