public Builder With(VersionEdit versionEdit) { // TODO Update compaction pointers // Delete files foreach (var iter in versionEdit.DeletedFiles) { var level = iter.Item1; var number = iter.Item2; _levels[level].DeletedFiles.Add(number); } // Add new files foreach (var iter in versionEdit.NewFiles) { var level = iter.Item1; var f = iter.Item2; _levels[level].AddedFiles.Add(f); _levels[level].DeletedFiles.Remove(f.Number); } return(this); }
public static VersionEdit DecodeFrom(Stream stream) { var pb = new CodedInputStream(stream); var v = new VersionEdit(); while (pb.Position < stream.Length) { var tag = (Tag)pb.ReadInt32(); switch (tag) { case Tag.Comparator: v.Comparator = pb.ReadString(); break; case Tag.LogNumber: v.LogNumber = pb.ReadUInt64(); break; case Tag.NextFileNumber: v.NextFileNumber = pb.ReadUInt64(); break; case Tag.LastSequence: v.LastSequence = pb.ReadUInt64(); // TODO break; case Tag.CompactPointer: v._compactPointers.Add(new Tuple <int, InternalKey>( ReadLevel(pb), // level ReadInternalKey(pb) // internal key )); break; case Tag.DeletedFile: v.DeletedFiles.Add(new Tuple <int, ulong>( ReadLevel(pb), // level pb.ReadUInt64()) // number ); break; case Tag.NewFile: v._newFiles.Add(new Tuple <int, FileMetaData>( ReadLevel(pb), // level new FileMetaData { Number = pb.ReadUInt64(), FileSize = pb.ReadUInt64(), Smallest = ReadInternalKey(pb), Largest = ReadInternalKey(pb) }) ); break; case Tag.PrevLogNumber: v.PrevLogNumber = pb.ReadUInt64(); break; default: throw new ArgumentOutOfRangeException(); } } return(v); }