diff --git a/blockchain/utreexoio.go b/blockchain/utreexoio.go index d149720b..aca2c9dd 100644 --- a/blockchain/utreexoio.go +++ b/blockchain/utreexoio.go @@ -155,6 +155,9 @@ func NodesBackendDelete(tx *leveldb.Transaction, k uint64) error { // Delete removes the given key from the underlying map. No-op if the key // doesn't exist. func (m *NodesBackEnd) Delete(k uint64) { + // Don't delete as the same key may get called to be removed multiple times. + // Cache it as removed so that we don't call expensive flushes on keys that + // are not in the database. leaf, _ := m.cache.Get(k) l := utreexobackends.CachedLeaf{ Leaf: leaf.Leaf, @@ -254,7 +257,7 @@ func (m *NodesBackEnd) UsageStats() (int64, int64) { // flush saves all the cached entries to disk and resets the cache map. func (m *NodesBackEnd) Flush(ldbTx *leveldb.Transaction) error { err := m.cache.ForEach(func(k uint64, v utreexobackends.CachedLeaf) error { - if v.IsRemoved() { + if v.IsRemoved() && !v.IsFresh() { err := NodesBackendDelete(ldbTx, k) if err != nil { return err