<> <> <> <> <> <> DIRECTORY YggEnvironment, YggLog; YggLogControl: CEDAR DEFINITIONS = BEGIN VolumeID: TYPE = YggEnvironment.VolumeID; FileStore: TYPE = YggEnvironment.FileStore; TransID: TYPE = YggEnvironment.TransID; PageCount: TYPE = YggEnvironment.PageCount; RecordID: TYPE = YggLog.RecordID; RecordType: TYPE = YggLog.RecordType; <> <> <> <> <> <> <> <> Format: PROC [logVolume: VolumeID, logFile, restartFile: YggEnvironment.DID, myFileStore: FileStore]; <> <> <> <> Recover: PROC [logVolume: VolumeID, logFile, restartFile: YggEnvironment.DID]; <> <> <> AnalysisProc: TYPE = PROC [record: RecordID, type: RecordType, trans: TransID]; <> <> <> RegisterAnalysisProc: PROC [recordType: RecordType, analysisProc: AnalysisProc]; ForkCheckpointProcess: PROC [myFileStore: FileStore, wakeupPeriodInSeconds: NAT]; <> <> <> <> <<1) calls each subsystem that writes log records. At present the three subsystems>> <> <> <> <<(probably in another process) to reduce its use. The worker subsystem forces all>> <> <> <<2) writes a checkpointComplete log record if some value in this record is different>> <> <<3) initiates an incremental garbage collection in order to keep zones compact.>> <<(it makes sense to do this in the checkpoint process since step 1 often frees storage).>> CheckpointProc: TYPE = PROC [] RETURNS [keepRecord, startAnalysisRecord: RecordID]; <> <> <> <> <> <> <> <> <> RegisterCheckpointProc: PROC [checkpointProc: CheckpointProc]; WordsUsableByClient: PROC [] RETURNS [words: INT]; <> <> RecordIDOfNextWrite: PROC [] RETURNS [RecordID]; <> <> <> WriteNoopRecords: PROC [nPages: PageCount] RETURNS [followingRecord: RecordID]; <> END. CHANGE LOG Created by MBrown on October 2, 1982 8:24 pm Changed by MBrown on October 7, 1982 5:19 pm <> Changed by MBrown on October 10, 1982 11:11 pm <> Changed by MBrown on November 7, 1982 5:37 pm <> <<>> Changed by Hauser on March 4, 1985 4:02:39 pm PST <> <> <> <> <> <<>>