Beispiel #1
0
        /// <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);
            }
        }
Beispiel #2
0
        /// <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();
        }
Beispiel #3
0
        protected void WriteHybridLogMetaInfo()
        {
            string filename = DirectoryConfiguration.GetHybridLogCheckpointMetaFileName(_hybridLogCheckpointToken);

            using (var file = new StreamWriter(filename, false))
            {
                _hybridLogCheckpoint.info.Write(file);
                file.Flush();
            }
        }