mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-25 06:06:44 +00:00
core/rawdb: improve range deletion
This commit is contained in:
parent
fdac3b7756
commit
14561c6510
1 changed files with 12 additions and 1 deletions
|
|
@ -18,6 +18,7 @@ package rawdb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"errors"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/ethdb"
|
"github.com/ethereum/go-ethereum/ethdb"
|
||||||
|
|
@ -162,7 +163,17 @@ func increaseKey(key []byte) []byte {
|
||||||
func DeleteStateHistoryIndex(db ethdb.KeyValueRangeDeleter) {
|
func DeleteStateHistoryIndex(db ethdb.KeyValueRangeDeleter) {
|
||||||
start := StateHistoryIndexPrefix
|
start := StateHistoryIndexPrefix
|
||||||
limit := increaseKey(bytes.Clone(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)
|
log.Crit("Failed to delete history index range", "err", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue