-- CoordinatorInternal.mesa
-- Procedures internal to coordinator implementation.
-- Last edited by
-- MBrown on November 4, 1982 11:50 am
DIRECTORY
AlpineEnvironment,
Coordinator,
Process USING [Seconds];
CoordinatorInternal: DEFINITIONS LOCKS c USING c: Handle =
BEGIN
VolumeID: TYPE = AlpineEnvironment.VolumeID;
Handle: TYPE = Coordinator.Handle;
WorkerHandle: TYPE = Coordinator.WorkerHandle;
Call: TYPE = Coordinator.Call;
Results: TYPE = Coordinator.Results;
SecondsTimeoutForResultsReturned: Process.Seconds = 5;
SecondsWaitAfterCommFailure: INT = 15;
MaxCoordinators: INT = 30;
PassParms: PROC [p: Parms];
-- Caller holds coordinator monitor for p.c.
Parms: TYPE = RECORD [
proc: Call, -- the proc to call
c: Handle, -- to pass transID and to monitor return of results
w: WorkerHandle, -- the worker to call
newTrans: AlpineEnvironment.TransID, -- used by proc = prepare only
requiredOutcome: AlpineEnvironment.CommitOrAbort -- used by proc = finish only
];
ReturnResults: ENTRY PROC [c: Handle, w: WorkerHandle, r: Results] = INLINE {
-- Caller holds no monitor.
w.first.resultsOfMostRecentCall ← r;
w.first.callInProgress ← none;
NOTIFY c.resultsReturned;
};
NoticeCoordinatorBegin: PROC [trans: AlpineEnvironment.TransID];
-- Called during analysis pass of recovery for each CoordinatorBegin record seen.
--Supplies implicit parameters to InitTransIDGenerator below.
InitTransIDGenerator: PROC [fileStore: VolumeID];
-- Must be called before calling NextTransID.
NextTransID: PROC [c: Handle];
-- Atomically generates the next trans ID and writes a coordinatorBegin log
--record containing it. As a side-effect, fills in the transID and forceRecord
--fields of c.
END.