From 14561c6510f6fe7acb192bd43789f6ce01b2246e Mon Sep 17 00:00:00 2001 From: Gary Rong Date: Wed, 18 Jun 2025 13:56:45 +0800 Subject: [PATCH] core/rawdb: improve range deletion --- core/rawdb/accessors_history.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core/rawdb/accessors_history.go b/core/rawdb/accessors_history.go index 4de6bb6954..cf1073f387 100644 --- a/core/rawdb/accessors_history.go +++ b/core/rawdb/accessors_history.go @@ -18,6 +18,7 @@ package rawdb import ( "bytes" + "errors" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethdb" @@ -162,7 +163,17 @@ func increaseKey(key []byte) []byte { func DeleteStateHistoryIndex(db ethdb.KeyValueRangeDeleter) { start := StateHistoryIndexPrefix limit := increaseKey(bytes.Clone(StateHistoryIndexPrefix)) - if err := db.DeleteRange(start, limit); err != nil { + + // Try to remove the data in the range by a loop, as the leveldb + // doesn't support the native range deletion. + for { + err := db.DeleteRange(start, limit) + if err == nil { + return + } + if errors.Is(err, ethdb.ErrTooManyKeys) { + continue + } log.Crit("Failed to delete history index range", "err", err) } }