DIRECTORY Camelot, CamelotMIG, Mach, YggBuffMan USING[WriteBytes], YggdrasilInit; YggSRProcsImpl: CEDAR PROGRAM IMPORTS YggBuffMan, YggdrasilInit EXPORTS CamelotMIG ~ BEGIN SRRestoreObjectX: PUBLIC PROC [sPort: Mach.portT, optr: Camelot.optrT, value: Mach.pointerT, valueCnt: CARD] ~ { SRRestoreObject[sPort, optr, value, valueCnt]; }; SRRestoreBatchX: PUBLIC PROC [sPort: Mach.portT, dataPtr: Mach.pointerT, dataPtrCnt: CARD] ~ { SRRestoreBatch [sPort: sPort, dataPtr: dataPtr, dataPtrCnt: dataPtrCnt]; }; SRRePrepareX: PUBLIC PROC [sPort: Mach.portT, btid: Camelot.btidT, prepareData: Mach.pointerT, prepareDataCnt: CARD] ~ { SRRePrepare[sPort: sPort, btid: btid, prepareData: prepareData, prepareDataCnt: prepareDataCnt]; }; SRRecoveryCompleteX: PUBLIC PROC [sPort: Mach.portT] ~ { SRRecoveryComplete[sPort]; }; SRRestoreObject: PROC [sPort: Mach.portT, optr: Camelot.optrT, value: Mach.pointerT, valueCnt: CARD] ~ { YggBuffMan.WriteBytes[optr: optr, value: LOOPHOLE[value], valueCnt: valueCnt]; }; SRRestoreBatch: PROC [sPort: Mach.portT, dataPtr: Mach.pointerT, dataPtrCnt: CARD] ~ { restoreBlock: TYPE = RECORD[ optr: Camelot.optrT, value: Mach.pointerT, valueCnt: CARD ]; nowDataPtr: LONG POINTER TO restoreBlock _ LOOPHOLE[dataPtr]; FOR counter: CARD IN [0..dataPtrCnt) DO TRUSTED {SRRestoreObject[sPort, nowDataPtr.optr, nowDataPtr.value, nowDataPtr.valueCnt]; }; nowDataPtr _ nowDataPtr + UNITS[restoreBlock]; ENDLOOP; }; SRRePrepare: PROC [sPort: Mach.portT, btid: Camelot.btidT, prepareData: Mach.pointerT, prepareDataCnt: CARD] ~ { ERROR; }; SRRecoveryComplete: PROC [sPort: Mach.portT] ~ { YggdrasilInit.RecoveryComplete[]; }; END. €YggSRProcsImpl.mesa Copyright Σ 1988 by Xerox Corporation. All rights reserved. Bob Hagmann November 1, 1988 7:50:01 am PST This module implements the "SR" procedures from Camelot. Camelot will make MIG style RPC's for SR_RestoreObject, SR_RestoreBatch, SR_RePrepare, and SR_RecoveryComplete. The messages for these RPC's have already been fielded and the message has been unmarshalled. See the defs in src/lib/camlib/sys/sr.defs and the generated sr.h for the calling sequences. WARNING: The top level "SR" procedures in this module are made public to the loader via the "-r" switch during compilation. Exported procedures (with X after the name) Global (but not exported!) procedures Global name is SR_RestoreObject. Recovery of an object. The server must pin and update the object. Global name is SR_RestoreBatch. dataPtr points to a bunch of [optr_t, u_int, char[...]] triples that are just like a bunch of SR_RestoreObject calls Global name is SR_RePrepare. RePrepare the transaction. Used after data server restart to rebuild lock tables. Global name is SR_RecoveryComplete. All done (with recovery). Initialization Κ£˜code•Mark outsideHeaderšœ™Kšœ<™