YggWorker.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Defines the volatile and persistent state of a worker.
Worker.Handle is the concrete form of YggInternal.TransactionHandle.
Last edited by
MBrown on January 30, 1984 11:50:47 am PST
Taft on 1-Feb-82 12:57:26
Hauser, March 8, 1985 11:13:52 am PST
Bob Hagmann May 3, 1988 10:07:26 am PDT
DIRECTORY
YggEnvironment USING [Outcome, TransID, nullTransID],
YggImport USING [Handle, nullHandle],
YggInternal USING [Difficulty, LockTransHeader,
LogRecordID, nullLogRecordID, OpenDoc, WorkerOutcome, WorkLevel],
BasicTime USING [GMT],
YggDummyProcess USING [Milliseconds],
YggDummyRPC USING [ConversationID];
YggWorker: DEFINITIONS =
BEGIN
State: TYPE = { unknown, active, preparing, ready, completing,
fpmComplete, fpmCompleteBeingForcedOut, complete };
StateDuringRecovery: TYPE = { active, ready, committed, aborted };
Outcome: TYPE = YggEnvironment.Outcome --{abort, commit, unknown}--;
Object: TYPE = MONITORED RECORD [
transID: YggEnvironment.TransID ← YggEnvironment.nullTransID, --immutable--
beginRecord: YggInternal.LogRecordID ← YggInternal.nullLogRecordID, --immutable--
coordinator: YggImport.Handle ← YggImport.nullHandle, --immutable--
locks: YggInternal.LockTransHeader ← NIL, --immutable--
coordinatorIsRemote: BOOLTRUE,
state: State ← unknown, --increases monotonically to complete--
outcome: Outcome ← unknown, --changes during state transition ready -> completing--
allowableDifficulty: Difficulty ← hard,
hard -> normal -> zero during preparing or completing state.
Prevents new actions that dirty owner DB caches (CreateFile, ...) from starting
during Prepare. ReadPages and WritePages are allowed during Prepare.
nStarts: [0..maxStarts] ← 0,
Number of actions in progress for this worker. More precisely, the
number of StartWorking calls that returned TRUE, minus number of StopWorking calls.
stateDuringRecovery: StateDuringRecovery ← active,
State maintained during the analysis pass of recovery.
timeOfLastStartWork: BasicTime.GMT,
Time of last successful call to StartWork.
estimatedUpdateCost: INT ← 0,
0 means that the transaction is readonly. The estimatedUpdateCost increases during
the transaction.
openDocList: YggInternal.OpenDoc ← NIL,
Data structure giving access to all files opened by this transaction.
enabledWheelList: LIST OF YggDummyRPC.ConversationID ← NIL,
List of all conversations that are enabled to perform "protected" Alpine operations
under this transaction.
continueWorker: Handle ← nullHandle, --holds continuation transaction, if any--
next: Handle ← nullHandle --WorkerMap data structure--
];
Handle: TYPE = REF Object;
nullHandle: Handle = NIL;
shortWaitTime: YggDummyProcess.Milliseconds = 100;
Timeout for a condition variable on which workers wait in order to let
some transient condition pass.
Difficulty: TYPE = YggInternal.Difficulty; --{zero, normal, hard}
WorkLevel: TYPE = YggInternal.WorkLevel; --Difficulty [normal .. hard]
no interface procedure involving transactions has zero difficulty
most have normal difficulty
anything that can dirty a cache that must be flushed during Prepare is hard.
maxStarts: CARDINAL = 7;
Bound on number of concurrent actions allowed for a single worker.
Persistent worker state.
Note that workerReady and workerComplete log records contain no information
other than the transaction ID, so we don't define structures for them here.
BeginLogRep: TYPE = MACHINE DEPENDENT RECORD [
coordinator: StrBody];
CompletingLogRep: TYPE = MACHINE DEPENDENT RECORD [
outcome: YggInternal.WorkerOutcome];
StrBody: TYPE = MACHINE DEPENDENT RECORD [
length: CARDINAL ← 0, maxLength: CARDINAL64,
text: PACKED ARRAY[0..64) OF CHAR];
END.
Hauser, March 8, 1985 11:13:36 am PST
Nodified, added copyright.