From daefaafa5c0b6f6d9d134cefbf054a104c198f5d Mon Sep 17 00:00:00 2001 From: KamiD <44460798+KamiD@users.noreply.github.com> Date: Wed, 5 May 2021 05:06:58 +0800 Subject: [PATCH] fix large genesis file commit (#374) * fix large genesis file import * Update nodedb.go * changing genesis version check * fix linter issues Co-authored-by: Robert Zaremba --- nodedb.go | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) 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()