mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 15:16:43 +00:00
core/filtermaps: only print logs during range delete if something is actually being deleted
This commit is contained in:
parent
1a29cdb818
commit
ca98df771c
3 changed files with 16 additions and 14 deletions
|
|
@ -383,14 +383,14 @@ func (f *FilterMaps) removeBloomBits() {
|
|||
// safeDeleteWithLogs is a wrapper for a function that performs a safe range
|
||||
// delete operation using rawdb.SafeDeleteRange. It emits log messages if the
|
||||
// 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 (
|
||||
start = time.Now()
|
||||
logPrinted bool
|
||||
lastLogPrinted = start
|
||||
)
|
||||
switch err := deleteFn(f.db, f.hashScheme, func() bool {
|
||||
if !logPrinted || time.Since(lastLogPrinted) > time.Second*10 {
|
||||
switch err := deleteFn(f.db, f.hashScheme, func(deleted bool) bool {
|
||||
if deleted && !logPrinted || time.Since(lastLogPrinted) > time.Second*10 {
|
||||
log.Info(action+" in progress...", "elapsed", time.Since(start))
|
||||
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")
|
||||
}
|
||||
// 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)
|
||||
count := f.mapRowIndex(firstMap+f.mapsPerEpoch, 0) - first
|
||||
if err := rawdb.DeleteFilterMapRows(f.db, common.NewRange(first, count), hashScheme, stopCb); err != nil {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
@ -479,20 +479,20 @@ func DeleteFilterMapsRange(db ethdb.KeyValueWriter) {
|
|||
}
|
||||
|
||||
// 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[len(end)-1]++
|
||||
return SafeDeleteRange(db, prefix, end, hashScheme, stopCallback)
|
||||
}
|
||||
|
||||
// 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)
|
||||
}
|
||||
|
||||
// DeleteFilterMapsDb removes the old bloombits database and the associated
|
||||
// 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 {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -621,8 +621,10 @@ func ReadChainMetadata(db ethdb.KeyValueStore) [][]string {
|
|||
// very slow depending on the number of entries. In this case stopCallback
|
||||
// is periodically called and if it returns an error then SafeDeleteRange
|
||||
// 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.
|
||||
func SafeDeleteRange(db ethdb.KeyValueStore, start, end []byte, hashScheme bool, stopCallback func() bool) error {
|
||||
// range delete is used or there are a small number of keys only. The bool
|
||||
// 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 {
|
||||
// delete entire range; use fast native range delete on pebble db
|
||||
for {
|
||||
|
|
@ -630,7 +632,7 @@ func SafeDeleteRange(db ethdb.KeyValueStore, start, end []byte, hashScheme bool,
|
|||
case nil:
|
||||
return nil
|
||||
case leveldb.ErrTooManyKeys:
|
||||
if stopCallback() {
|
||||
if stopCallback(true) {
|
||||
return ErrDeleteRangeInterrupted
|
||||
}
|
||||
default:
|
||||
|
|
@ -667,7 +669,7 @@ func SafeDeleteRange(db ethdb.KeyValueStore, start, end []byte, hashScheme bool,
|
|||
if err := batch.Write(); err != nil {
|
||||
return err
|
||||
}
|
||||
if stopCallback() {
|
||||
if stopCallback(deleted != 0) {
|
||||
return ErrDeleteRangeInterrupted
|
||||
}
|
||||
start = append(bytes.Clone(it.Key()), 0) // appending a zero gives us the next possible key
|
||||
|
|
|
|||
Loading…
Reference in a new issue