mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-10-14 10:08:35 +02:00
ec: avoid redundant needle.GetActualSize call in LocateEcShardNeedle (#11629)
LocateEcShardNeedle passed needle.GetActualSize(size, version) to LocateEcShardNeedleInterval, which calls needle.GetActualSize internally. This caused header and padding to be added twice to needle size. Fixes #3864 Co-authored-by: Morteza <m.mohammadi@rahkar.team>
This commit is contained in:
1 parent
624a13ecc6
commit
d0f3fad133
2 files changed
+28
-1
No files matched your search
@@ -982,7 +982,7 @@ func (ev *EcVolume) LocateEcShardNeedle(needleId types.NeedleId, version needle.
|
||||
return types.Offset{}, 0, nil, fmt.Errorf("FindNeedleFromEcx: %w", err)
|
||||
}
|
||||
|
||||
intervals = ev.LocateEcShardNeedleInterval(version, offset.ToActualOffset(), types.Size(needle.GetActualSize(size, version)))
|
||||
intervals = ev.LocateEcShardNeedleInterval(version, offset.ToActualOffset(), size)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -256,3 +256,30 @@ func TestEcVolumeDestroySweepsBothDirs(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestLocateEcShardNeedleMatchesInterval(t *testing.T) {
|
||||
ecxFile, err := os.OpenFile("./test_files/389.ecx", os.O_RDONLY, 0)
|
||||
assert.NoError(t, err)
|
||||
defer ecxFile.Close()
|
||||
|
||||
stat, err := ecxFile.Stat()
|
||||
assert.NoError(t, err)
|
||||
fileSize := stat.Size()
|
||||
|
||||
ev := &EcVolume{
|
||||
VolumeId: needle.VolumeId(389),
|
||||
ecxFile: ecxFile,
|
||||
ecxFileSize: fileSize,
|
||||
Shards: []*EcVolumeShard{
|
||||
{ecdFileSize: 1118830592},
|
||||
},
|
||||
ECContext: NewDefaultECContext("", 389),
|
||||
}
|
||||
|
||||
needleId, _ := types.ParseNeedleId("0f0edb92")
|
||||
offset, size, intervals, err := ev.LocateEcShardNeedle(needleId, needle.GetCurrentVersion())
|
||||
assert.NoError(t, err)
|
||||
|
||||
expectedIntervals := ev.LocateEcShardNeedleInterval(needle.GetCurrentVersion(), offset.ToActualOffset(), size)
|
||||
assert.Equal(t, expectedIntervals, intervals)
|
||||
}
|
||||
Reference in new issue
Block a user