private void GetRecoveryInfoFromLatestCheckpoints(out HybridLogCheckpointInfo recoveredHLCInfo, out IndexCheckpointInfo recoveredICInfo) { Debug.WriteLine("********* Primary Recovery Information ********"); recoveredHLCInfo = default; foreach (var hybridLogToken in checkpointManager.GetLogCheckpointTokens()) { try { recoveredHLCInfo = new HybridLogCheckpointInfo(); recoveredHLCInfo.Recover(hybridLogToken, checkpointManager, hlog.LogPageSizeBits); } catch { continue; } Debug.WriteLine("HybridLog Checkpoint: {0}", hybridLogToken); break; } if (recoveredHLCInfo.IsDefault()) { throw new FasterException("Unable to find valid index token"); } recoveredHLCInfo.info.DebugPrint(); recoveredICInfo = default; foreach (var indexToken in checkpointManager.GetIndexCheckpointTokens()) { try { // Recovery appropriate context information recoveredICInfo = new IndexCheckpointInfo(); recoveredICInfo.Recover(indexToken, checkpointManager); } catch { continue; } if (!IsCompatible(recoveredICInfo.info, recoveredHLCInfo.info)) { recoveredICInfo = default; continue; } Debug.WriteLine("Index Checkpoint: {0}", indexToken); recoveredICInfo.info.DebugPrint(); break; } if (recoveredICInfo.IsDefault()) { Debug.WriteLine("No index checkpoint found, recovering from beginning of log"); } }
private void InternalRecoverFromLatestCheckpoints(int numPagesToPreload, bool undoFutureVersions) { Debug.WriteLine("********* Primary Recovery Information ********"); HybridLogCheckpointInfo recoveredHLCInfo = default; foreach (var hybridLogToken in checkpointManager.GetLogCheckpointTokens()) { try { recoveredHLCInfo = new HybridLogCheckpointInfo(); recoveredHLCInfo.Recover(hybridLogToken, checkpointManager); } catch { continue; } Debug.WriteLine("HybridLog Checkpoint: {0}", hybridLogToken); break; } if (recoveredHLCInfo.IsDefault()) { throw new FasterException("Unable to find valid index token"); } recoveredHLCInfo.info.DebugPrint(); IndexCheckpointInfo recoveredICInfo = default; foreach (var indexToken in checkpointManager.GetIndexCheckpointTokens()) { try { // Recovery appropriate context information recoveredICInfo = new IndexCheckpointInfo(); recoveredICInfo.Recover(indexToken, checkpointManager); } catch { continue; } if (!IsCompatible(recoveredICInfo.info, recoveredHLCInfo.info)) { recoveredICInfo = default; continue; } Debug.WriteLine("Index Checkpoint: {0}", indexToken); recoveredICInfo.info.DebugPrint(); break; } if (recoveredICInfo.IsDefault()) { Debug.WriteLine("No index checkpoint found, recovering from beginning of log"); } InternalRecover(recoveredICInfo, recoveredHLCInfo, numPagesToPreload, undoFutureVersions); }