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
|
// 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 {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue