add reification limit test
This commit is contained in:
parent
cbd23c2b1b
commit
2795995989
@ -495,8 +495,102 @@ func testSplitStoreReification(t *testing.T, f func(context.Context, blockstore.
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testSplitStoreReificationLimit(t *testing.T, f func(context.Context, blockstore.Blockstore, cid.Cid) error) {
|
||||||
|
ds := dssync.MutexWrap(datastore.NewMapDatastore())
|
||||||
|
hot := newMockStore()
|
||||||
|
cold := newMockStore()
|
||||||
|
|
||||||
|
mkRandomBlock := func() blocks.Block {
|
||||||
|
data := make([]byte, 128)
|
||||||
|
_, err := rand.Read(data)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return blocks.NewBlock(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
block1 := mkRandomBlock()
|
||||||
|
block2 := mkRandomBlock()
|
||||||
|
block3 := mkRandomBlock()
|
||||||
|
|
||||||
|
hdr := mock.MkBlock(nil, 0, 0)
|
||||||
|
hdr.Messages = block1.Cid()
|
||||||
|
hdr.ParentMessageReceipts = block2.Cid()
|
||||||
|
hdr.ParentStateRoot = block3.Cid()
|
||||||
|
block4, err := hdr.ToStorageBlock()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
allBlocks := []blocks.Block{block1, block2, block3, block4}
|
||||||
|
for _, blk := range allBlocks {
|
||||||
|
err := cold.Put(context.Background(), blk)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
path, err := ioutil.TempDir("", "splitstore.*")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Cleanup(func() {
|
||||||
|
_ = os.RemoveAll(path)
|
||||||
|
})
|
||||||
|
|
||||||
|
ss, err := Open(path, ds, hot, cold, &Config{MarkSetType: "map"})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer ss.Close() //nolint
|
||||||
|
|
||||||
|
ss.warmupEpoch = 1
|
||||||
|
go ss.reifyOrchestrator()
|
||||||
|
|
||||||
|
waitForReification := func() {
|
||||||
|
for {
|
||||||
|
ss.reifyMx.Lock()
|
||||||
|
ready := len(ss.reifyPend) == 0 && len(ss.reifyInProgress) == 0
|
||||||
|
ss.reifyMx.Unlock()
|
||||||
|
|
||||||
|
if ready {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
time.Sleep(time.Millisecond)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// do a hot access -- nothing should be reified as the limit should be exceeded
|
||||||
|
oldReifyLimit := ReifyLimit
|
||||||
|
ReifyLimit = 2
|
||||||
|
t.Cleanup(func() {
|
||||||
|
ReifyLimit = oldReifyLimit
|
||||||
|
})
|
||||||
|
|
||||||
|
err = f(blockstore.WithHotView(context.Background()), ss, block4.Cid())
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
waitForReification()
|
||||||
|
|
||||||
|
for _, blk := range allBlocks {
|
||||||
|
has, err := hot.Has(context.Background(), blk.Cid())
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if has {
|
||||||
|
t.Fatal("block unexpectedly reified")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func TestSplitStoreReification(t *testing.T) {
|
func TestSplitStoreReification(t *testing.T) {
|
||||||
EnableReification = true
|
|
||||||
t.Log("test reification with Has")
|
t.Log("test reification with Has")
|
||||||
testSplitStoreReification(t, func(ctx context.Context, s blockstore.Blockstore, c cid.Cid) error {
|
testSplitStoreReification(t, func(ctx context.Context, s blockstore.Blockstore, c cid.Cid) error {
|
||||||
_, err := s.Has(ctx, c)
|
_, err := s.Has(ctx, c)
|
||||||
@ -516,6 +610,11 @@ func TestSplitStoreReification(t *testing.T) {
|
|||||||
testSplitStoreReification(t, func(ctx context.Context, s blockstore.Blockstore, c cid.Cid) error {
|
testSplitStoreReification(t, func(ctx context.Context, s blockstore.Blockstore, c cid.Cid) error {
|
||||||
return s.View(ctx, c, func(_ []byte) error { return nil })
|
return s.View(ctx, c, func(_ []byte) error { return nil })
|
||||||
})
|
})
|
||||||
|
t.Log("test reification limit")
|
||||||
|
testSplitStoreReificationLimit(t, func(ctx context.Context, s blockstore.Blockstore, c cid.Cid) error {
|
||||||
|
_, err := s.Has(ctx, c)
|
||||||
|
return err
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
type mockChain struct {
|
type mockChain struct {
|
||||||
|
Loading…
Reference in New Issue
Block a user