Commit faed2bcc authored by liuyuhang's avatar liuyuhang Committed by vipwzw

add resease global memTree when reach a height

parent 4bbd8262
...@@ -21,6 +21,7 @@ import ( ...@@ -21,6 +21,7 @@ import (
drivers "github.com/33cn/chain33/system/store" drivers "github.com/33cn/chain33/system/store"
"github.com/33cn/chain33/types" "github.com/33cn/chain33/types"
"github.com/hashicorp/golang-lru" "github.com/hashicorp/golang-lru"
"github.com/33cn/chain33/system/store/mavl/db"
) )
var ( var (
...@@ -197,6 +198,8 @@ func (kvmMavls *KVmMavlStore) MemSet(datas *types.StoreSet, sync bool) ([]byte, ...@@ -197,6 +198,8 @@ func (kvmMavls *KVmMavlStore) MemSet(datas *types.StoreSet, sync bool) ([]byte,
} }
// 删除Mavl数据 // 删除Mavl数据
if datas.Height > delMavlDataHeight && !isDelMavlData && !isDelMavling() { if datas.Height > delMavlDataHeight && !isDelMavlData && !isDelMavling() {
// 达到该高度时候,将全局的memTree以及tkCloseCache释放掉
mavl.ReleaseGlobalMem()
wg.Add(1) wg.Add(1)
go DelMavl(kvmMavls.GetDB()) go DelMavl(kvmMavls.GetDB())
} }
......
...@@ -66,6 +66,15 @@ func EnableMemVal(enable bool) { ...@@ -66,6 +66,15 @@ func EnableMemVal(enable bool) {
enableMemVal = enable enableMemVal = enable
} }
func ReleaseGlobalMem() {
if memTree != nil {
memTree = nil
}
if tkCloseCache != nil {
tkCloseCache = nil
}
}
type memNode struct { type memNode struct {
data [][]byte //顺序为lefthash, righthash, key, value data [][]byte //顺序为lefthash, righthash, key, value
Height int32 Height int32
...@@ -542,9 +551,7 @@ func (ndb *nodeDB) SaveNode(t *Tree, node *Node) { ...@@ -542,9 +551,7 @@ func (ndb *nodeDB) SaveNode(t *Tree, node *Node) {
} }
func getNodeMemTree(hash []byte) (*Node, error) { func getNodeMemTree(hash []byte) (*Node, error) {
if memTree == nil && tkCloseCache == nil{ if memTree != nil {
return nil, ErrNodeNotExist
}
elem, ok := memTree.Get(uintkey(farm.Hash64(hash))) elem, ok := memTree.Get(uintkey(farm.Hash64(hash)))
if ok { if ok {
sn := elem.(*memNode) sn := elem.(*memNode)
...@@ -562,8 +569,11 @@ func getNodeMemTree(hash []byte) (*Node, error) { ...@@ -562,8 +569,11 @@ func getNodeMemTree(hash []byte) (*Node, error) {
} }
return node, nil return node, nil
} }
}
if tkCloseCache != nil {
// 从tkCloseCache缓存中获取 // 从tkCloseCache缓存中获取
elem, ok = tkCloseCache.Get(uintkey(farm.Hash64(hash))) elem, ok := tkCloseCache.Get(uintkey(farm.Hash64(hash)))
if ok { if ok {
sn := elem.(*memNode) sn := elem.(*memNode)
node := &Node{ node := &Node{
...@@ -580,6 +590,7 @@ func getNodeMemTree(hash []byte) (*Node, error) { ...@@ -580,6 +590,7 @@ func getNodeMemTree(hash []byte) (*Node, error) {
} }
return node, nil return node, nil
} }
}
return nil, ErrNodeNotExist return nil, ErrNodeNotExist
} }
......
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