From 4635d9b36bfc6528d4e64386f73ca605c80cc83f Mon Sep 17 00:00:00 2001 From: Ahmed Yasin Koculu Date: Mon, 8 Aug 2022 04:18:35 +0200 Subject: [PATCH] Fix multi segment incorrect key meta data issue. --- .../Segments/Disk/MultiSectorDiskSegment.cs | 47 ++++++++++++------- .../Disk/MultiSectorDiskSegmentCreator.cs | 12 ++--- 2 files changed, 37 insertions(+), 22 deletions(-) diff --git a/src/ZoneTree/Segments/Disk/MultiSectorDiskSegment.cs b/src/ZoneTree/Segments/Disk/MultiSectorDiskSegment.cs index 3152c0a..bf8356b 100644 --- a/src/ZoneTree/Segments/Disk/MultiSectorDiskSegment.cs +++ b/src/ZoneTree/Segments/Disk/MultiSectorDiskSegment.cs @@ -308,19 +308,47 @@ public sealed class MultiSectorDiskSegment : IDiskSegment : IDiskSegment(this); } - public TValue GetValue(int index) - { - var off = 0; - var sectorIndex = 0; - while (off + Sectors[sectorIndex].Length <= index) - { - off += Sectors[sectorIndex].Length; - ++sectorIndex; - } - var localIndex = index - off; - return Sectors[sectorIndex].GetValue(localIndex); - } - public void InitSparseArray(int size) { } diff --git a/src/ZoneTree/Segments/Disk/MultiSectorDiskSegmentCreator.cs b/src/ZoneTree/Segments/Disk/MultiSectorDiskSegmentCreator.cs index 89ce0da..d0e5aee 100644 --- a/src/ZoneTree/Segments/Disk/MultiSectorDiskSegmentCreator.cs +++ b/src/ZoneTree/Segments/Disk/MultiSectorDiskSegmentCreator.cs @@ -155,10 +155,10 @@ public sealed class MultiSectorDiskSegmentCreator : IDiskSegmentCr { var len = Sectors.Count * 2; bw.Write(len); - for (var i = 0; i < len; i += 2) + for (var i = 0; i < len; ++i) { - var a = i / 2; - var b = a + 1; + var a = i++; + var b = i; var k1 = SectorKeys[a]; var bytes = KeySerializer.Serialize(k1); bw.Write(bytes.Length); @@ -175,10 +175,10 @@ public sealed class MultiSectorDiskSegmentCreator : IDiskSegmentCr { var len = Sectors.Count * 2; bw.Write(len); - for (var i = 0; i < len; i += 2) + for (var i = 0; i < len; ++i) { - var a = i / 2; - var b = a + 1; + var a = i++; + var b = i; var v1 = SectorValues[a]; var bytes = ValueSerializer.Serialize(v1); bw.Write(bytes.Length);