From f532e4439a2ed0f9609f54b9e7d1d51a95e8d586 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 28 Mar 2025 12:13:54 +0100 Subject: [PATCH] core/filtermaps: add function for disabling --- core/filtermaps/indexer.go | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/core/filtermaps/indexer.go b/core/filtermaps/indexer.go index 86e0218349..a142c16cf8 100644 --- a/core/filtermaps/indexer.go +++ b/core/filtermaps/indexer.go @@ -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