mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 07:06:42 +00:00
core/filtermaps: add function for disabling
This commit is contained in:
parent
2d469a4ace
commit
f532e4439a
1 changed files with 16 additions and 15 deletions
|
|
@ -50,20 +50,14 @@ func (f *FilterMaps) indexerLoop() {
|
|||
continue
|
||||
}
|
||||
if err := f.init(); err != nil {
|
||||
log.Error("Error initializing log index; reverting to unindexed mode", "error", err)
|
||||
f.reset()
|
||||
f.disabled = true
|
||||
close(f.disabledCh)
|
||||
f.disableForError("initialization", err)
|
||||
f.reset() // remove broken index from DB
|
||||
return
|
||||
}
|
||||
}
|
||||
if !f.targetHeadIndexed() {
|
||||
if err := f.tryIndexHead(); err != nil {
|
||||
log.Error("Log index head rendering failed; reverting to unindexed mode", "error", err)
|
||||
// disable indexer without resetting database; maybe a client
|
||||
// update can fix the issue without reindexing
|
||||
f.disabled = true
|
||||
close(f.disabledCh)
|
||||
f.disableForError("head rendering", err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
|
|
@ -74,17 +68,13 @@ func (f *FilterMaps) indexerLoop() {
|
|||
f.lastFinal = f.finalBlock
|
||||
}
|
||||
if done, err := f.tryIndexTail(); err != nil {
|
||||
log.Error("Log index tail rendering failed; reverting to unindexed mode", "error", err)
|
||||
f.disabled = true
|
||||
close(f.disabledCh)
|
||||
f.disableForError("tail rendering", err)
|
||||
return
|
||||
} else if !done {
|
||||
continue
|
||||
}
|
||||
if done, err := f.tryUnindexTail(); err != nil {
|
||||
log.Error("Log index tail unindexing failed; reverting to unindexed mode", "error", err)
|
||||
f.disabled = true
|
||||
close(f.disabledCh)
|
||||
f.disableForError("tail unindexing", err)
|
||||
return
|
||||
} else if !done {
|
||||
continue
|
||||
|
|
@ -96,6 +86,17 @@ func (f *FilterMaps) indexerLoop() {
|
|||
}
|
||||
}
|
||||
|
||||
// disableForError is called when the indexer encounters a database error, for example a
|
||||
// missing receipt. We can't continue operating when the database is broken, so the
|
||||
// indexer goes into disabled state.
|
||||
// Note that the partial index is left in disk; maybe a client update can fix the
|
||||
// issue without reindexing.
|
||||
func (f *FilterMaps) disableForError(op string, err error) {
|
||||
log.Error("Log index "+op+" failed, reverting to unindexed mode", "error", err)
|
||||
f.disabled = true
|
||||
close(f.disabledCh)
|
||||
}
|
||||
|
||||
type targetUpdate struct {
|
||||
targetView *ChainView
|
||||
historyCutoff, finalBlock uint64
|
||||
|
|
|
|||
Loading…
Reference in a new issue