YggInternal.mesa
Copyright Ó 1987, 1988 by Xerox Corporation. All rights reserved.
Last edited by:
MBrown on January 31, 1984 11:44:24 am PST
Kolling on October 28, 1983 2:13 pm
Taft on April 10, 1983 5:11 pm
Hauser, March 7, 1985 2:18:51 pm PST
Carl Hauser, July 12, 1985 9:59:34 am PDT
Bob Hagmann May 12, 1988 8:18:42 am PDT
DIRECTORY
ConstArith,
YggDID;
YggInternal: DEFINITIONS = BEGIN
File
FileHandle: TYPE = REF FileHandleRep; -- same as YggFile.FileHandle
FileHandleRep: TYPE;
Document: TYPE = REF DocumentRep; -- same as DIDMap.Document
DocumentRep: TYPE;
OpenDoc: TYPE = REF OpenDocRep; -- same as YggOpenDoc.OpenDoc
OpenDocRep: TYPE;
FilePageMgr
FPMFileHandle: TYPE = REF FPMFileObject; -- base type of FilePageMgr.FPMFileHandle
FPMFileObject: TYPE;
Lock
LockID: TYPE = RECORD [entity: UniversalID, subEntity: ID2, subSubEntity: LockSubID, did: YggDID.DID];
UniversalID: TYPE [3*SIZE[CARD32]]; -- can be compressed someday by implementing a separate map
ID2: TYPE [SIZE[CARD32]]; -- large enough to hold file ID within volume
LockSubID: TYPE [2*SIZE[CARD32]]; -- large enough to hold [tag, page number within file]
nullLockIDRep: ARRAY [0..SIZE[LockID]/SIZE[CARD32]) OF CARD32 = [0,0,0,0,0,0,0];
nullLockID: LockID = LOOPHOLE[nullLockIDRep];
LockTransHeader: TYPE = REF LockTransHeaderObject;
LockTransHeaderObject: TYPE;
Log
LogRecordID: TYPE = ConstArith.Const;
nullLogRecordID, firstRecordID: LogRecordID = [zero, 0, 0];
lastRecordID: LogRecordID = [positive, LAST[CARD], LAST[CARD]];
LogRecordType: TYPE = MACHINE DEPENDENT {
Include lots of spares so that new LogRecordTypes can be introduced without invalidating existing log files. If you change these, keep the corresponding subranges (below) up-to-date.
--ControlRecord-- noop (0), checkpointBegin, checkpointComplete, coordinatorBegin (10), coordinatorRegisterWorker, coordinatorCollecting, coordinatorCompleting, coordinatorComplete, workerBegin (30), workerReady, workerCompleting, workerComplete,
--FileRecord-- writePages (100), setSize, create, delete, lock,
--Reserved-- reserved (200), (LAST[INTEGER]) }; -- s/b LAST[CARDINAL] but for compiler bug
ControlRecord: TYPE = LogRecordType [noop..writePages);
FileRecord: TYPE = LogRecordType [writePages..reserved);
LogRecordPhaseType: TYPE = {
 Identifies during which phase of recovery the record is needed.
analysis, -- only needed in analysis phase (e.g., transaction commit)
redo, -- only needed in redo phase (e.g., writePages)
undo, -- only needed in undo phase
redoUndo, -- needed in both redo and undo phases
other -- other records (e. g., checkpointBegin)
};
LogMap
LogMap: TYPE = REF LogMapRep; -- base type of LogMap.LogMap
LogMapRep: TYPE;
Transaction
TransHandle: TYPE = REF TransObject; -- Base type of TransactionMap.Handle
TransObject: TYPE;
WorkerOutcome: TYPE = {abort, readOnly, commit};
Difficulty: TYPE = {zero, normal, hard};
WorkLevel: TYPE = Difficulty [normal .. hard];
TransState: TYPE = {committed, aborted, ready};
CoordinatorHandle: TYPE = REF CoordinatorObject;
CoordinatorObject: TYPE;
END.