mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 15:16:43 +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
|
continue
|
||||||
}
|
}
|
||||||
if err := f.init(); err != nil {
|
if err := f.init(); err != nil {
|
||||||
log.Error("Error initializing log index; reverting to unindexed mode", "error", err)
|
f.disableForError("initialization", err)
|
||||||
f.reset()
|
f.reset() // remove broken index from DB
|
||||||
f.disabled = true
|
|
||||||
close(f.disabledCh)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !f.targetHeadIndexed() {
|
if !f.targetHeadIndexed() {
|
||||||
if err := f.tryIndexHead(); err != nil {
|
if err := f.tryIndexHead(); err != nil {
|
||||||
log.Error("Log index head rendering failed; reverting to unindexed mode", "error", err)
|
f.disableForError("head rendering", err)
|
||||||
// disable indexer without resetting database; maybe a client
|
|
||||||
// update can fix the issue without reindexing
|
|
||||||
f.disabled = true
|
|
||||||
close(f.disabledCh)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -74,17 +68,13 @@ func (f *FilterMaps) indexerLoop() {
|
||||||
f.lastFinal = f.finalBlock
|
f.lastFinal = f.finalBlock
|
||||||
}
|
}
|
||||||
if done, err := f.tryIndexTail(); err != nil {
|
if done, err := f.tryIndexTail(); err != nil {
|
||||||
log.Error("Log index tail rendering failed; reverting to unindexed mode", "error", err)
|
f.disableForError("tail rendering", err)
|
||||||
f.disabled = true
|
|
||||||
close(f.disabledCh)
|
|
||||||
return
|
return
|
||||||
} else if !done {
|
} else if !done {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if done, err := f.tryUnindexTail(); err != nil {
|
if done, err := f.tryUnindexTail(); err != nil {
|
||||||
log.Error("Log index tail unindexing failed; reverting to unindexed mode", "error", err)
|
f.disableForError("tail unindexing", err)
|
||||||
f.disabled = true
|
|
||||||
close(f.disabledCh)
|
|
||||||
return
|
return
|
||||||
} else if !done {
|
} else if !done {
|
||||||
continue
|
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 {
|
type targetUpdate struct {
|
||||||
targetView *ChainView
|
targetView *ChainView
|
||||||
historyCutoff, finalBlock uint64
|
historyCutoff, finalBlock uint64
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue