diff --git a/nodedb.go b/nodedb.go index ed813301e..ea26fc821 100644 --- a/nodedb.go +++ b/nodedb.go @@ -14,8 +14,9 @@ import ( ) const ( - int64Size = 8 - hashSize = sha256.Size + int64Size = 8 + hashSize = sha256.Size + genesisVersion = 1 ) var ( @@ -168,12 +169,31 @@ func (ndb *nodeDB) SaveBranch(node *Node) []byte { node._hash() ndb.SaveNode(node) + // resetBatch only working on generate a genesis block + if node.version <= genesisVersion { + ndb.resetBatch() + } node.leftNode = nil node.rightNode = nil return node.hash } +// resetBatch reset the db batch, keep low memory used +func (ndb *nodeDB) resetBatch() { + var err error + if ndb.opts.Sync { + err = ndb.batch.WriteSync() + } else { + err = ndb.batch.Write() + } + if err != nil { + panic(err) + } + ndb.batch.Close() + ndb.batch = ndb.db.NewBatch() +} + // DeleteVersion deletes a tree version from disk. func (ndb *nodeDB) DeleteVersion(version int64, checkLatestVersion bool) error { ndb.mtx.Lock()