From 0a0825598f39e06a0460e43392acc839aa33df45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=92=E1=85=A1=E1=86=AB=E1=84=8B=E1=85=AF=E1=86=AB?= =?UTF-8?q?=E1=84=8C=E1=85=AE=E1=86=AB?= Date: Tue, 28 May 2024 09:00:16 +0900 Subject: [PATCH] core/state/snapshot, ethdb/rocksdb: Fixed RocksDB Iterator error. --- core/state/snapshot/generate.go | 3 +-- ethdb/rocksdb/rocksdb.go | 5 +++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/state/snapshot/generate.go b/core/state/snapshot/generate.go index dadce4ea5cee..769989aec21c 100644 --- a/core/state/snapshot/generate.go +++ b/core/state/snapshot/generate.go @@ -615,8 +615,7 @@ func generateAccounts(ctx *generatorContext, dl *diskLayer, accMarker []byte) er // If the iterated account is the contract, create a further loop to // verify or regenerate the contract storage. if acc.Root == emptyRoot { - log.Debug("removeStorageAt skip for rocksdb") - // ctx.removeStorageAt(account) + ctx.removeStorageAt(account) } else { var storeMarker []byte if accMarker != nil && bytes.Equal(account[:], accMarker) && len(dl.genMarker) > common.HashLength { diff --git a/ethdb/rocksdb/rocksdb.go b/ethdb/rocksdb/rocksdb.go index f19a7a6802a3..e0466aad3012 100644 --- a/ethdb/rocksdb/rocksdb.go +++ b/ethdb/rocksdb/rocksdb.go @@ -272,6 +272,11 @@ func (it *RDBIterator) Next() bool { if it.first { it.first = false } else { + // Added conditions to prevent Rocksdb Iterator error. + // Valid() call is a RocksDB requirement. + if C.rocksdb_iter_valid(it.it) == 0 { + return false + } C.rocksdb_iter_next(it.it) } return C.rocksdb_iter_valid(it.it) != 0