private FileMetadata WriteMergedTable(Version version, MergeEnumerator mergeEnumerator, ref int count) { var newFileMeta = new FileMetadata { FileNumber = version.GetNewFileNumber() }; var newFileInfo = new FileInfo(GetTableFileName(newFileMeta.FileNumber)); using FileStream newFileStream = newFileInfo.Create(); var creator = new TableCreator(newFileStream); byte[] smallestKey = null; byte[] largestKey = null; ReadOnlyMemory <byte> prevKey = null; while (mergeEnumerator.MoveNext()) { BlockEntry entry = mergeEnumerator.Current; count++; ReadOnlyMemory <byte> key = entry.Key; if (prevKey.Length != 0) { if (prevKey.Span.UserKey().SequenceEqual(key.Span.UserKey())) { Log.Warn($"Duplicate keys - Prev Key: {prevKey.ToHexString()}, Key: {key.ToHexString()}"); continue; } } prevKey = key; creator.Add(key.Span, entry.Data.Span); smallestKey ??= key.ToArray(); largestKey = key.ToArray(); if (creator.CurrentSize > Options.MaxTableFileSize) { break; } } creator.Finish(); newFileMeta.SmallestKey = smallestKey; newFileMeta.LargestKey = largestKey; newFileInfo.Refresh(); newFileMeta.FileSize = (ulong)newFileInfo.Length; return(newFileMeta); }