base variabls / logic, need tests
This commit is contained in:
parent
f48881d3a2
commit
60a8a63e62
@ -15,7 +15,8 @@ import (
|
||||
|
||||
const (
|
||||
defaultIAVLCacheSize = 10000
|
||||
defaultIAVLNumHistory = 1<<53 - 1 // DEPRECATED
|
||||
defaultIAVLNumRecent = 1000
|
||||
defaultIAVLStoreEvery = 10000
|
||||
)
|
||||
|
||||
// load the iavl store
|
||||
@ -25,7 +26,7 @@ func LoadIAVLStore(db dbm.DB, id CommitID) (CommitStore, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
store := newIAVLStore(tree, defaultIAVLNumHistory)
|
||||
store := newIAVLStore(tree, defaultIAVLNumRecent, defaultIAVLStoreEvery)
|
||||
return store, nil
|
||||
}
|
||||
|
||||
@ -43,16 +44,17 @@ type iavlStore struct {
|
||||
|
||||
// How many old versions we hold onto.
|
||||
// A value of 0 means keep all history.
|
||||
numHistory int64
|
||||
numRecent int64
|
||||
|
||||
storeEvery int64
|
||||
}
|
||||
|
||||
// CONTRACT: tree should be fully loaded.
|
||||
// TODO: use more numHistory's, so the below nolint can be removed
|
||||
// nolint: unparam
|
||||
func newIAVLStore(tree *iavl.VersionedTree, numHistory int64) *iavlStore {
|
||||
func newIAVLStore(tree *iavl.VersionedTree, numRecent int64, storeEvery int64) *iavlStore {
|
||||
st := &iavlStore{
|
||||
tree: tree,
|
||||
numHistory: numHistory,
|
||||
numRecent: numRecent,
|
||||
storeEvery: storeEvery,
|
||||
}
|
||||
return st
|
||||
}
|
||||
@ -67,13 +69,14 @@ func (st *iavlStore) Commit() CommitID {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Release an old version of history
|
||||
if st.numHistory > 0 && (st.numHistory < st.tree.Version64()) {
|
||||
toRelease := version - st.numHistory
|
||||
err := st.tree.DeleteVersion(toRelease)
|
||||
if err != nil {
|
||||
// TODO: Handle with #870
|
||||
panic(err)
|
||||
// Release an old version of history, if not a sync waypoint
|
||||
if st.numRecent < st.tree.Version64() {
|
||||
toRelease := version - st.numRecent
|
||||
if toRelease%st.storeEvery != 0 {
|
||||
err := st.tree.DeleteVersion(toRelease)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -15,7 +15,8 @@ import (
|
||||
|
||||
var (
|
||||
cacheSize = 100
|
||||
numHistory int64 = 5
|
||||
numRecent int64 = 5
|
||||
storeEvery int64 = 3
|
||||
)
|
||||
|
||||
var (
|
||||
@ -45,7 +46,7 @@ func newTree(t *testing.T, db dbm.DB) (*iavl.VersionedTree, CommitID) {
|
||||
func TestIAVLStoreGetSetHasDelete(t *testing.T) {
|
||||
db := dbm.NewMemDB()
|
||||
tree, _ := newTree(t, db)
|
||||
iavlStore := newIAVLStore(tree, numHistory)
|
||||
iavlStore := newIAVLStore(tree, numRecent, storeEvery)
|
||||
|
||||
key := "hello"
|
||||
|
||||
@ -70,7 +71,7 @@ func TestIAVLStoreGetSetHasDelete(t *testing.T) {
|
||||
func TestIAVLIterator(t *testing.T) {
|
||||
db := dbm.NewMemDB()
|
||||
tree, _ := newTree(t, db)
|
||||
iavlStore := newIAVLStore(tree, numHistory)
|
||||
iavlStore := newIAVLStore(tree, numRecent, storeEvery)
|
||||
iter := iavlStore.Iterator([]byte("aloha"), []byte("hellz"))
|
||||
expected := []string{"aloha", "hello"}
|
||||
var i int
|
||||
@ -143,7 +144,7 @@ func TestIAVLIterator(t *testing.T) {
|
||||
func TestIAVLSubspaceIterator(t *testing.T) {
|
||||
db := dbm.NewMemDB()
|
||||
tree, _ := newTree(t, db)
|
||||
iavlStore := newIAVLStore(tree, numHistory)
|
||||
iavlStore := newIAVLStore(tree, numRecent, storeEvery)
|
||||
|
||||
iavlStore.Set([]byte("test1"), []byte("test1"))
|
||||
iavlStore.Set([]byte("test2"), []byte("test2"))
|
||||
@ -202,7 +203,7 @@ func TestIAVLSubspaceIterator(t *testing.T) {
|
||||
func TestIAVLReverseSubspaceIterator(t *testing.T) {
|
||||
db := dbm.NewMemDB()
|
||||
tree, _ := newTree(t, db)
|
||||
iavlStore := newIAVLStore(tree, numHistory)
|
||||
iavlStore := newIAVLStore(tree, numRecent, storeEvery)
|
||||
|
||||
iavlStore.Set([]byte("test1"), []byte("test1"))
|
||||
iavlStore.Set([]byte("test2"), []byte("test2"))
|
||||
@ -261,7 +262,7 @@ func TestIAVLReverseSubspaceIterator(t *testing.T) {
|
||||
func TestIAVLStoreQuery(t *testing.T) {
|
||||
db := dbm.NewMemDB()
|
||||
tree := iavl.NewVersionedTree(db, cacheSize)
|
||||
iavlStore := newIAVLStore(tree, numHistory)
|
||||
iavlStore := newIAVLStore(tree, numRecent, storeEvery)
|
||||
|
||||
k1, v1 := []byte("key1"), []byte("val1")
|
||||
k2, v2 := []byte("key2"), []byte("val2")
|
||||
|
||||
@ -66,7 +66,7 @@ func testPrefixStore(t *testing.T, baseStore KVStore, prefix []byte) {
|
||||
func TestIAVLStorePrefix(t *testing.T) {
|
||||
db := dbm.NewMemDB()
|
||||
tree := iavl.NewVersionedTree(db, cacheSize)
|
||||
iavlStore := newIAVLStore(tree, numHistory)
|
||||
iavlStore := newIAVLStore(tree, numRecent, storeEvery)
|
||||
|
||||
testPrefixStore(t, iavlStore, []byte("test"))
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user