Commit 8a189752 authored by liuyuhang's avatar liuyuhang

add test and modify bug

parent 66826aa4
......@@ -20,6 +20,10 @@ var (
kvmvccMavlFork int64 = 200 * 10000
)
const (
canceSize = 2048 //可以缓存2048个roothash, height对
)
// SetLogLevel set log level
func SetLogLevel(level string) {
......@@ -78,26 +82,26 @@ func New(cfg *types.Store, sub []byte) queue.Module {
subMavlcfg.EnableMavlPrune = subcfg.EnableMavlPrune
subMavlcfg.PruneHeight = subcfg.PruneHeight
}
cance, err := lru.New(1024)
cance, err := lru.New(canceSize)
if err != nil {
panic("new KVMVCCMavlStore fail")
}
kvms = &KVMVCCMavlStore{bs, NewKVMVCC(cfg, &subKVMVCCcfg, bs.GetDB()),
NewMavl(cfg, &subMavlcfg, bs.GetDB()), cance}
kvms = &KVMVCCMavlStore{bs, NewKVMVCC(&subKVMVCCcfg, bs.GetDB()),
NewMavl(&subMavlcfg, bs.GetDB()), cance}
bs.SetChild(kvms)
return kvms
}
// Close the KVMVCCStore module
// Close the KVMVCCMavlStore module
func (kvmMavls *KVMVCCMavlStore) Close() {
kvmMavls.BaseStore.Close()
kvmMavls.KVMVCCStore.Close()
kvmMavls.MavlStore.Close()
kmlog.Info("store kvdb closed")
kmlog.Info("store kvmMavls closed")
}
// Set kvs with statehash to KVMVCCStore
// Set kvs with statehash to KVMVCCMavlStore
func (kvmMavls *KVMVCCMavlStore) Set(datas *types.StoreSet, sync bool) ([]byte, error) {
// 这里后续需要考虑分叉回退
if datas.Height < kvmvccMavlFork {
......@@ -105,7 +109,7 @@ func (kvmMavls *KVMVCCMavlStore) Set(datas *types.StoreSet, sync bool) ([]byte,
if err != nil {
return hash, err
}
_, err = kvmMavls.KVMVCCStore.Set(datas, sync)
_, err = kvmMavls.KVMVCCStore.Set(datas, hash, sync)
if err != nil {
return hash, err
}
......@@ -115,14 +119,14 @@ func (kvmMavls *KVMVCCMavlStore) Set(datas *types.StoreSet, sync bool) ([]byte,
return hash, err
}
// 仅仅做kvmvcc
hash, err := kvmMavls.KVMVCCStore.Set(datas, sync)
hash, err := kvmMavls.KVMVCCStore.Set(datas, nil, sync)
if err == nil {
kvmMavls.cance.Add(string(hash), datas.Height)
}
return hash, err
}
// Get kvs with statehash from KVMVCCStore
// Get kvs with statehash from KVMVCCMavlStore
func (kvmMavls *KVMVCCMavlStore) Get(datas *types.StoreGet) [][]byte {
if value, ok := kvmMavls.cance.Get(string(datas.StateHash)); ok {
if value.(int64) < kvmvccMavlFork {
......@@ -133,7 +137,7 @@ func (kvmMavls *KVMVCCMavlStore) Get(datas *types.StoreGet) [][]byte {
return kvmMavls.KVMVCCStore.Get(datas)
}
// MemSet set kvs to the mem of KVMVCCStore module and return the StateHash
// MemSet set kvs to the mem of KVMVCCMavlStore module and return the StateHash
func (kvmMavls *KVMVCCMavlStore) MemSet(datas *types.StoreSet, sync bool) ([]byte, error) {
// 这里后续需要考虑分叉回退
if datas.Height < kvmvccMavlFork {
......@@ -141,7 +145,7 @@ func (kvmMavls *KVMVCCMavlStore) MemSet(datas *types.StoreSet, sync bool) ([]byt
if err != nil {
return hash, err
}
_, err = kvmMavls.KVMVCCStore.MemSet(datas, sync)
_, err = kvmMavls.KVMVCCStore.MemSet(datas, hash, sync)
if err != nil {
return hash, err
}
......@@ -151,14 +155,14 @@ func (kvmMavls *KVMVCCMavlStore) MemSet(datas *types.StoreSet, sync bool) ([]byt
return hash, err
}
// 仅仅做kvmvcc
hash, err := kvmMavls.KVMVCCStore.MemSet(datas, sync)
hash, err := kvmMavls.KVMVCCStore.MemSet(datas, nil, sync)
if err == nil {
kvmMavls.cance.Add(string(hash), datas.Height)
}
return hash, err
}
// Commit kvs in the mem of KVMVCCStore module to state db and return the StateHash
// Commit kvs in the mem of KVMVCCMavlStore module to state db and return the StateHash
func (kvmMavls *KVMVCCMavlStore) Commit(req *types.ReqHash) ([]byte, error) {
if value, ok := kvmMavls.cance.Get(string(req.Hash)); ok {
if value.(int64) < kvmvccMavlFork {
......@@ -177,7 +181,7 @@ func (kvmMavls *KVMVCCMavlStore) Commit(req *types.ReqHash) ([]byte, error) {
return kvmMavls.KVMVCCStore.Commit(req)
}
// Rollback kvs in the mem of KVMVCCStore module and return the StateHash
// Rollback kvs in the mem of KVMVCCMavlStore module and return the StateHash
func (kvmMavls *KVMVCCMavlStore) Rollback(req *types.ReqHash) ([]byte, error) {
if value, ok := kvmMavls.cance.Get(string(req.Hash)); ok {
if value.(int64) < kvmvccMavlFork {
......@@ -201,10 +205,13 @@ func (kvmMavls *KVMVCCMavlStore) IterateRangeByStateHash(statehash []byte, start
if value, ok := kvmMavls.cance.Get(string(statehash)); ok {
if value.(int64) < kvmvccMavlFork {
kvmMavls.MavlStore.IterateRangeByStateHash(statehash, start, end, ascending, fn)
return
}
kvmMavls.KVMVCCStore.IterateRangeByStateHash(statehash, start, end, ascending, fn)
return
}
kvmMavls.KVMVCCStore.IterateRangeByStateHash(statehash, start, end, ascending, fn)
return
}
// ProcEvent handles supported events
......
This diff is collapsed.
......@@ -26,7 +26,7 @@ type KVMVCCStore struct {
// NewKVMVCC construct KVMVCCStore module
func NewKVMVCC(cfg *types.Store, sub *subKVMVCCConfig, db dbm.DB) *KVMVCCStore {
func NewKVMVCC(sub *subKVMVCCConfig, db dbm.DB) *KVMVCCStore {
var kvs *KVMVCCStore
enable := false
if sub != nil {
......@@ -46,8 +46,10 @@ func (mvccs *KVMVCCStore) Close() {
}
// Set kvs with statehash to KVMVCCStore
func (mvccs *KVMVCCStore) Set(datas *types.StoreSet, sync bool) ([]byte, error) {
hash := calcHash(datas)
func (mvccs *KVMVCCStore) Set(datas *types.StoreSet, hash []byte, sync bool) ([]byte, error) {
if hash == nil {
hash = calcHash(datas)
}
kvlist, err := mvccs.mvcc.AddMVCC(datas.KV, hash, datas.StateHash, datas.Height)
if err != nil {
return nil, err
......@@ -76,12 +78,14 @@ func (mvccs *KVMVCCStore) Get(datas *types.StoreGet) [][]byte {
}
// MemSet set kvs to the mem of KVMVCCStore module and return the StateHash
func (mvccs *KVMVCCStore) MemSet(datas *types.StoreSet, sync bool) ([]byte, error) {
func (mvccs *KVMVCCStore) MemSet(datas *types.StoreSet, hash []byte, sync bool) ([]byte, error) {
kvset, err := mvccs.checkVersion(datas.Height)
if err != nil {
return nil, err
}
hash := calcHash(datas)
if hash == nil {
hash = calcHash(datas)
}
//kmlog.Debug("KVMVCCStore MemSet AddMVCC", "prestatehash", common.ToHex(datas.StateHash), "hash", common.ToHex(hash), "height", datas.Height)
kvlist, err := mvccs.mvcc.AddMVCC(datas.KV, hash, datas.StateHash, datas.Height)
if err != nil {
......
......@@ -26,7 +26,7 @@ type MavlStore struct {
}
// NewMavl new mavl store module
func NewMavl(cfg *types.Store, sub *subMavlConfig, db dbm.DB) *MavlStore {
func NewMavl(sub *subMavlConfig, db dbm.DB) *MavlStore {
var subcfg subMavlConfig
if sub != nil {
subcfg.EnableMavlPrefix = sub.EnableMavlPrefix
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment