From 2ae5b480a66fb21abbf6e27ff13af9b05742077a Mon Sep 17 00:00:00 2001 From: "Quentin D." <4972091+Okhoshi@users.noreply.github.com> Date: Fri, 9 May 2025 17:47:53 +0200 Subject: [PATCH] Use the correct constant when computing the offset in SearchNeedleFromSortedIndex (#6771) NeedleHeaderSize happen to have the same size as NeedleMapEntrySize, except when running the 5 bytes offset variant of Seaweedfs, because it does not contain OffsetSize. This causes ECX corruption on deletes, due to the drifting offset computation (offset is always computed on a basis of 16 bytes per record instead of 17 bytes) Signed-off-by: Quentin Devos <4972091+Okhoshi@users.noreply.github.com> --- weed/storage/erasure_coding/ec_volume.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/weed/storage/erasure_coding/ec_volume.go b/weed/storage/erasure_coding/ec_volume.go index ed3ce4e2f..f0b662752 100644 --- a/weed/storage/erasure_coding/ec_volume.go +++ b/weed/storage/erasure_coding/ec_volume.go @@ -3,14 +3,13 @@ package erasure_coding import ( "errors" "fmt" - "github.com/seaweedfs/seaweedfs/weed/glog" "math" "os" + "slices" "sync" "time" - "slices" - + "github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb/master_pb" "github.com/seaweedfs/seaweedfs/weed/pb/volume_server_pb" @@ -263,7 +262,7 @@ func SearchNeedleFromSortedIndex(ecxFile *os.File, ecxFileSize int64, needleId t key, offset, size = idx.IdxFileEntry(buf) if key == needleId { if processNeedleFn != nil { - err = processNeedleFn(ecxFile, m*types.NeedleHeaderSize) + err = processNeedleFn(ecxFile, m*types.NeedleMapEntrySize) } return }