core/filtermaps: only print logs during range delete if something is actually being deleted

This commit is contained in:
Zsolt Felfoldi 2025-03-31 10:27:43 +02:00
parent 1a29cdb818
commit ca98df771c
3 changed files with 16 additions and 14 deletions

View file

@ -383,14 +383,14 @@ func (f *FilterMaps) removeBloomBits() {
// safeDeleteWithLogs is a wrapper for a function that performs a safe range // safeDeleteWithLogs is a wrapper for a function that performs a safe range
// delete operation using rawdb.SafeDeleteRange. It emits log messages if the // delete operation using rawdb.SafeDeleteRange. It emits log messages if the
// process takes long enough to call the stop callback. // process takes long enough to call the stop callback.
func (f *FilterMaps) safeDeleteWithLogs(deleteFn func(db ethdb.KeyValueStore, hashScheme bool, stopCb func() bool) error, action string, stopCb func() bool) error { func (f *FilterMaps) safeDeleteWithLogs(deleteFn func(db ethdb.KeyValueStore, hashScheme bool, stopCb func(bool) bool) error, action string, stopCb func() bool) error {
var ( var (
start = time.Now() start = time.Now()
logPrinted bool logPrinted bool
lastLogPrinted = start lastLogPrinted = start
) )
switch err := deleteFn(f.db, f.hashScheme, func() bool { switch err := deleteFn(f.db, f.hashScheme, func(deleted bool) bool {
if !logPrinted || time.Since(lastLogPrinted) > time.Second*10 { if deleted && !logPrinted || time.Since(lastLogPrinted) > time.Second*10 {
log.Info(action+" in progress...", "elapsed", time.Since(start)) log.Info(action+" in progress...", "elapsed", time.Since(start))
logPrinted, lastLogPrinted = true, time.Now() logPrinted, lastLogPrinted = true, time.Now()
} }
@ -723,7 +723,7 @@ func (f *FilterMaps) deleteTailEpoch(epoch uint32) (bool, error) {
return false, errors.New("invalid tail epoch number") return false, errors.New("invalid tail epoch number")
} }
// remove index data // remove index data
if err := f.safeDeleteWithLogs(func(db ethdb.KeyValueStore, hashScheme bool, stopCb func() bool) error { if err := f.safeDeleteWithLogs(func(db ethdb.KeyValueStore, hashScheme bool, stopCb func(bool) bool) error {
first := f.mapRowIndex(firstMap, 0) first := f.mapRowIndex(firstMap, 0)
count := f.mapRowIndex(firstMap+f.mapsPerEpoch, 0) - first count := f.mapRowIndex(firstMap+f.mapsPerEpoch, 0) - first
if err := rawdb.DeleteFilterMapRows(f.db, common.NewRange(first, count), hashScheme, stopCb); err != nil { if err := rawdb.DeleteFilterMapRows(f.db, common.NewRange(first, count), hashScheme, stopCb); err != nil {

View file

@ -354,7 +354,7 @@ func WriteFilterMapBaseRows(db ethdb.KeyValueWriter, mapRowIndex uint64, rows []
} }
} }
func DeleteFilterMapRows(db ethdb.KeyValueStore, mapRows common.Range[uint64], hashScheme bool, stopCallback func() bool) error { func DeleteFilterMapRows(db ethdb.KeyValueStore, mapRows common.Range[uint64], hashScheme bool, stopCallback func(bool) bool) error {
return SafeDeleteRange(db, filterMapRowKey(mapRows.First(), false), filterMapRowKey(mapRows.AfterLast(), false), hashScheme, stopCallback) return SafeDeleteRange(db, filterMapRowKey(mapRows.First(), false), filterMapRowKey(mapRows.AfterLast(), false), hashScheme, stopCallback)
} }
@ -392,7 +392,7 @@ func DeleteFilterMapLastBlock(db ethdb.KeyValueWriter, mapIndex uint32) {
} }
} }
func DeleteFilterMapLastBlocks(db ethdb.KeyValueStore, maps common.Range[uint32], hashScheme bool, stopCallback func() bool) error { func DeleteFilterMapLastBlocks(db ethdb.KeyValueStore, maps common.Range[uint32], hashScheme bool, stopCallback func(bool) bool) error {
return SafeDeleteRange(db, filterMapLastBlockKey(maps.First()), filterMapLastBlockKey(maps.AfterLast()), hashScheme, stopCallback) return SafeDeleteRange(db, filterMapLastBlockKey(maps.First()), filterMapLastBlockKey(maps.AfterLast()), hashScheme, stopCallback)
} }
@ -427,7 +427,7 @@ func DeleteBlockLvPointer(db ethdb.KeyValueWriter, blockNumber uint64) {
} }
} }
func DeleteBlockLvPointers(db ethdb.KeyValueStore, blocks common.Range[uint64], hashScheme bool, stopCallback func() bool) error { func DeleteBlockLvPointers(db ethdb.KeyValueStore, blocks common.Range[uint64], hashScheme bool, stopCallback func(bool) bool) error {
return SafeDeleteRange(db, filterMapBlockLVKey(blocks.First()), filterMapBlockLVKey(blocks.AfterLast()), hashScheme, stopCallback) return SafeDeleteRange(db, filterMapBlockLVKey(blocks.First()), filterMapBlockLVKey(blocks.AfterLast()), hashScheme, stopCallback)
} }
@ -479,20 +479,20 @@ func DeleteFilterMapsRange(db ethdb.KeyValueWriter) {
} }
// deletePrefixRange deletes everything with the given prefix from the database. // deletePrefixRange deletes everything with the given prefix from the database.
func deletePrefixRange(db ethdb.KeyValueStore, prefix []byte, hashScheme bool, stopCallback func() bool) error { func deletePrefixRange(db ethdb.KeyValueStore, prefix []byte, hashScheme bool, stopCallback func(bool) bool) error {
end := bytes.Clone(prefix) end := bytes.Clone(prefix)
end[len(end)-1]++ end[len(end)-1]++
return SafeDeleteRange(db, prefix, end, hashScheme, stopCallback) return SafeDeleteRange(db, prefix, end, hashScheme, stopCallback)
} }
// DeleteFilterMapsDb removes the entire filter maps database // DeleteFilterMapsDb removes the entire filter maps database
func DeleteFilterMapsDb(db ethdb.KeyValueStore, hashScheme bool, stopCallback func() bool) error { func DeleteFilterMapsDb(db ethdb.KeyValueStore, hashScheme bool, stopCallback func(bool) bool) error {
return deletePrefixRange(db, []byte(filterMapsPrefix), hashScheme, stopCallback) return deletePrefixRange(db, []byte(filterMapsPrefix), hashScheme, stopCallback)
} }
// DeleteFilterMapsDb removes the old bloombits database and the associated // DeleteFilterMapsDb removes the old bloombits database and the associated
// chain indexer database. // chain indexer database.
func DeleteBloomBitsDb(db ethdb.KeyValueStore, hashScheme bool, stopCallback func() bool) error { func DeleteBloomBitsDb(db ethdb.KeyValueStore, hashScheme bool, stopCallback func(bool) bool) error {
if err := deletePrefixRange(db, bloomBitsPrefix, hashScheme, stopCallback); err != nil { if err := deletePrefixRange(db, bloomBitsPrefix, hashScheme, stopCallback); err != nil {
return err return err
} }

View file

@ -621,8 +621,10 @@ func ReadChainMetadata(db ethdb.KeyValueStore) [][]string {
// very slow depending on the number of entries. In this case stopCallback // very slow depending on the number of entries. In this case stopCallback
// is periodically called and if it returns an error then SafeDeleteRange // is periodically called and if it returns an error then SafeDeleteRange
// stops and also returns that error. The callback is not called if native // stops and also returns that error. The callback is not called if native
// range delete is used or there are a small number of keys only. // range delete is used or there are a small number of keys only. The bool
func SafeDeleteRange(db ethdb.KeyValueStore, start, end []byte, hashScheme bool, stopCallback func() bool) error { // argument passed to the callback is true if enrties have actually been
// deleted already.
func SafeDeleteRange(db ethdb.KeyValueStore, start, end []byte, hashScheme bool, stopCallback func(bool) bool) error {
if !hashScheme { if !hashScheme {
// delete entire range; use fast native range delete on pebble db // delete entire range; use fast native range delete on pebble db
for { for {
@ -630,7 +632,7 @@ func SafeDeleteRange(db ethdb.KeyValueStore, start, end []byte, hashScheme bool,
case nil: case nil:
return nil return nil
case leveldb.ErrTooManyKeys: case leveldb.ErrTooManyKeys:
if stopCallback() { if stopCallback(true) {
return ErrDeleteRangeInterrupted return ErrDeleteRangeInterrupted
} }
default: default:
@ -667,7 +669,7 @@ func SafeDeleteRange(db ethdb.KeyValueStore, start, end []byte, hashScheme bool,
if err := batch.Write(); err != nil { if err := batch.Write(); err != nil {
return err return err
} }
if stopCallback() { if stopCallback(deleted != 0) {
return ErrDeleteRangeInterrupted return ErrDeleteRangeInterrupted
} }
start = append(bytes.Clone(it.Key()), 0) // appending a zero gives us the next possible key start = append(bytes.Clone(it.Key()), 0) // appending a zero gives us the next possible key