diff options
| author | Eric Yang <lanqingy@usc.edu> | 2022-09-06 23:51:27 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-06 23:51:27 -0700 |
| commit | b324a6536c07ff57340ff62b5d5318d05ff5666c (patch) | |
| tree | 076b2eeabdcd1c677b623327dc8791460abe215a /weed/storage/volume_read_test.go | |
| parent | c07ab9c060eafe26cc0b4246d507d5b33f32f317 (diff) | |
| download | seaweedfs-b324a6536c07ff57340ff62b5d5318d05ff5666c.tar.xz seaweedfs-b324a6536c07ff57340ff62b5d5318d05ff5666c.zip | |
ADHOC: add read needle meta grpc (#3581)
* ADHOC: add read needle meta grpc
* add test
* nit
Co-authored-by: root <root@HQ-10MSTD3EY.roblox.local>
Diffstat (limited to 'weed/storage/volume_read_test.go')
| -rw-r--r-- | weed/storage/volume_read_test.go | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/weed/storage/volume_read_test.go b/weed/storage/volume_read_test.go new file mode 100644 index 000000000..f1d0aa2fc --- /dev/null +++ b/weed/storage/volume_read_test.go @@ -0,0 +1,91 @@ +package storage + +import ( + "github.com/seaweedfs/seaweedfs/weed/storage/needle" + "github.com/seaweedfs/seaweedfs/weed/storage/super_block" + "github.com/seaweedfs/seaweedfs/weed/storage/types" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestReadNeedMetaWithWritesAndUpdates(t *testing.T) { + dir := t.TempDir() + + v, err := NewVolume(dir, dir, "", 1, NeedleMapInMemory, &super_block.ReplicaPlacement{}, &needle.TTL{}, 0, 0) + if err != nil { + t.Fatalf("volume creation: %v", err) + } + type WriteInfo struct { + offset int64 + size int32 + } + writeInfos := make([]WriteInfo, 30) + mockLastUpdateTime := uint64(1000000000000) + // initialize 20 needles then update first 10 needles + for i := 1; i <= 30; i++ { + n := newRandomNeedle(uint64(i % 20)) + n.Flags = 0x08 + n.LastModified = mockLastUpdateTime + mockLastUpdateTime += 2000 + offset, _, _, err := v.writeNeedle2(n, true, false) + if err != nil { + t.Fatalf("write needle %d: %v", i, err) + } + writeInfos[i-1] = WriteInfo{offset: int64(offset), size: int32(n.Size)} + } + expectedLastUpdateTime := uint64(1000000000000) + for i := 0; i < 30; i++ { + testNeedle := new(needle.Needle) + testNeedle.Id = types.Uint64ToNeedleId(uint64(i + 1%20)) + testNeedle.Flags = 0x08 + v.readNeedleMetaAt(testNeedle, writeInfos[i].offset, writeInfos[i].size) + actualLastModifiedTime := testNeedle.LastModified + assert.Equal(t, expectedLastUpdateTime, actualLastModifiedTime, "The two words should be the same.") + expectedLastUpdateTime += 2000 + } +} + +func TestReadNeedMetaWithDeletesThenWrites(t *testing.T) { + dir := t.TempDir() + + v, err := NewVolume(dir, dir, "", 1, NeedleMapInMemory, &super_block.ReplicaPlacement{}, &needle.TTL{}, 0, 0) + if err != nil { + t.Fatalf("volume creation: %v", err) + } + type WriteInfo struct { + offset int64 + size int32 + } + writeInfos := make([]WriteInfo, 10) + mockLastUpdateTime := uint64(1000000000000) + for i := 1; i <= 10; i++ { + n := newRandomNeedle(uint64(i % 5)) + n.Flags = 0x08 + n.LastModified = mockLastUpdateTime + mockLastUpdateTime += 2000 + offset, _, _, err := v.writeNeedle2(n, true, false) + if err != nil { + t.Fatalf("write needle %d: %v", i, err) + } + if i < 5 { + size, err := v.deleteNeedle2(n) + if err != nil { + t.Fatalf("delete needle %d: %v", i, err) + } + writeInfos[i-1] = WriteInfo{offset: int64(offset), size: int32(size)} + } else { + writeInfos[i-1] = WriteInfo{offset: int64(offset), size: int32(n.Size)} + } + } + + expectedLastUpdateTime := uint64(1000000000000) + for i := 0; i < 10; i++ { + testNeedle := new(needle.Needle) + testNeedle.Id = types.Uint64ToNeedleId(uint64(i + 1%5)) + testNeedle.Flags = 0x08 + v.readNeedleMetaAt(testNeedle, writeInfos[i].offset, writeInfos[i].size) + actualLastModifiedTime := testNeedle.LastModified + assert.Equal(t, expectedLastUpdateTime, actualLastModifiedTime, "The two words should be the same.") + expectedLastUpdateTime += 2000 + } +} |
