<> <> <> <> <> <> <> <> DIRECTORY BasicTime USING [GMT], YggEnvironment, YggImport USING [Handle], YggInternal USING [LogRecordID, nullLogRecordID], Rope USING [ROPE]; YggCoordinator: CEDAR DEFINITIONS LOCKS c USING c: Handle = BEGIN Object: TYPE = MONITORED RECORD [ transID: YggEnvironment.TransID _ TRASH, --immutable-- beginRecord: YggInternal.LogRecordID _ YggInternal.nullLogRecordID, --immutable-- state: State _ active, <> outcome: Outcome _ unknown, < completing.>> finishInProgress: BOOL _ FALSE, <> aWorkerBecameReady: BOOL _ FALSE, <> workers: WorkerHandle _ NIL, <> resultsReturned: CONDITION, <> <> forceRecord: YggInternal.LogRecordID _ YggInternal.nullLogRecordID, <> extras: REF Info _ NIL, <> next: Handle _ nullHandle <> ]; Handle: TYPE = REF Object; nullHandle: Handle = NIL; State: TYPE = {active, collecting, completing, complete}; Outcome: TYPE = YggEnvironment.Outcome --{abort, commit, unknown}--; WorkerObject: TYPE = RECORD [ worker: YggImport.Handle, --immutable-- state: WorkerState _ active, --increases monotonically from active to complete-- communicationTrouble: BOOL _ FALSE, callInProgress: Call _ none, --communication in progress with worker-- resultsOfMostRecentCall: Results _ [none, none[]], timeForNextCall: BasicTime.GMT _ TRASH, <> lastPrepareResult: Results _ [none, none[]], lastFinishResult: Results _ [none, none[]] ]; WorkerHandle: TYPE = LIST OF WorkerObject; WorkerState: TYPE = { active, ready, complete }; Call: TYPE = { none, prepare, finish }; Results: TYPE = RECORD [ communicationError: CommunicationError, body: SELECT call: Call FROM none => [], prepare => [prepareResult: YggEnvironment.WorkerState], finish => [] ENDCASE ]; Info: TYPE = RECORD [userRName: Rope.ROPE]; CommunicationError: TYPE = { none, bindingFailed, callFailed, busy }; <> <> <> <> <> <> RegisterWorkerLogRep: TYPE = MACHINE DEPENDENT RECORD [ worker: StrBody]; CompletingLogRep: TYPE = MACHINE DEPENDENT RECORD [ outcome: YggEnvironment.CommitOrAbort]; StrBody: TYPE = MACHINE DEPENDENT RECORD [ length: CARDINAL _ 0, maxLength: CARDINAL _ 64, text: PACKED ARRAY[0..64) OF CHAR]; END. CHANGE LOG. <> <> <> <> <<>>