diff options
Diffstat (limited to 'weed/storage/volume_write_test.go')
| -rw-r--r-- | weed/storage/volume_write_test.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/weed/storage/volume_write_test.go b/weed/storage/volume_write_test.go new file mode 100644 index 000000000..e0ee3dac7 --- /dev/null +++ b/weed/storage/volume_write_test.go @@ -0,0 +1,69 @@ +package storage + +import ( + "fmt" + "github.com/chrislusf/seaweedfs/weed/storage/needle" + "github.com/chrislusf/seaweedfs/weed/storage/super_block" + "io/ioutil" + "os" + "testing" + "time" +) + +func TestSearchVolumesWithDeletedNeedles(t *testing.T) { + dir, err := ioutil.TempDir("", "example") + if err != nil { + t.Fatalf("temp dir creation: %v", err) + } + defer os.RemoveAll(dir) // clean up + + v, err := NewVolume(dir, dir, "", 1, NeedleMapInMemory, &super_block.ReplicaPlacement{}, &needle.TTL{}, 0, 0) + if err != nil { + t.Fatalf("volume creation: %v", err) + } + + count := 10 + + for i:=1;i<count;i++{ + n := newRandomNeedle(uint64(i)) + _, _, _, err := v.writeNeedle2(n, true, false) + if err != nil { + t.Fatalf("write needle %d: %v", i, err) + } + } + + for i:=1;i<5;i++{ + n := newEmptyNeedle(uint64(i)) + _, err := v.doDeleteRequest(n) + if err != nil { + t.Fatalf("delete needle %d: %v", i, err) + } + } + + ts1 := time.Now().UnixNano() + + var ts2 uint64 + + for i:=5;i<count;i++{ + n := newEmptyNeedle(uint64(i)) + _, err := v.doDeleteRequest(n) + if err != nil { + t.Fatalf("delete needle %d: %v", i, err) + } + ts2 = n.AppendAtNs + } + + offset, isLast, err := v.BinarySearchByAppendAtNs(uint64(ts1)) + if err != nil { + t.Fatalf("lookup by ts: %v", err) + } + fmt.Printf("offset: %v, isLast: %v\n", offset.ToActualOffset(), isLast) + + offset, isLast, err = v.BinarySearchByAppendAtNs(uint64(ts2)) + if err != nil { + t.Fatalf("lookup by ts: %v", err) + } + fmt.Printf("offset: %v, isLast: %v\n", offset.ToActualOffset(), isLast) + + +}
\ No newline at end of file |
