/// <summary> /// Recover info from token /// </summary> /// <param name="token"></param> /// <param name="directoryConfiguration"></param> /// <returns></returns> internal bool Recover(Guid token, DirectoryConfiguration directoryConfiguration) { string checkpointInfoFile = directoryConfiguration.GetHybridLogCheckpointMetaFileName(token); using (var reader = new StreamReader(checkpointInfoFile)) { Initialize(reader); } int num_threads = numThreads; for (int i = 0; i < num_threads; i++) { var guid = guids[i]; using (var reader = new StreamReader(directoryConfiguration.GetHybridLogCheckpointContextFileName(token, guid))) { var ctx = new SerializedFasterExecutionContext(); ctx.Load(reader); continueTokens.Add(ctx.guid, ctx.serialNum); } } if (continueTokens.Count == num_threads) { return(true); } else { return(false); } }
/// <summary> /// Commit log checkpoint (snapshot and fold-over) /// </summary> /// <param name="logToken"></param> /// <param name="commitMetadata"></param> public void CommitLogCheckpoint(Guid logToken, byte[] commitMetadata) { string filename = directoryConfiguration.GetHybridLogCheckpointMetaFileName(logToken); using (BinaryWriter writer = new(new FileStream(filename, FileMode.Create))) { writer.Write(commitMetadata.Length); writer.Write(commitMetadata); writer.Flush(); } string completed_filename = directoryConfiguration.GetHybridLogCheckpointFolder(logToken); completed_filename += Path.DirectorySeparatorChar + "completed.dat"; using FileStream file = new(completed_filename, FileMode.Create); file.Flush(); }
protected void WriteHybridLogMetaInfo() { string filename = DirectoryConfiguration.GetHybridLogCheckpointMetaFileName(_hybridLogCheckpointToken); using (var file = new StreamWriter(filename, false)) { _hybridLogCheckpoint.info.Write(file); file.Flush(); } }