From 4c74d20356a5b19cd138f913ffed0ba6fee85b22 Mon Sep 17 00:00:00 2001 From: pk910 Date: Tue, 15 Aug 2023 17:14:59 +0200 Subject: [PATCH] fixed deadlock in indexer due to processing epochs before genesis --- cmd/explorer/main.go | 1 - indexer/indexer.go | 13 +++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cmd/explorer/main.go b/cmd/explorer/main.go index 0e64f3ba..78d8d5fe 100644 --- a/cmd/explorer/main.go +++ b/cmd/explorer/main.go @@ -34,7 +34,6 @@ func main() { "config": *configPath, "version": utils.BuildVersion, "chainName": utils.Config.Chain.Config.ConfigName}).Printf("starting") - logger.Debug("test") if utils.Config.Chain.Config.SlotsPerEpoch == 0 || utils.Config.Chain.Config.SecondsPerSlot == 0 { utils.LogFatal(err, "invalid chain configuration specified, you must specify the slots per epoch, seconds per slot and genesis timestamp in the config file", 0) diff --git a/indexer/indexer.go b/indexer/indexer.go index 86e86d42..5a944be4 100644 --- a/indexer/indexer.go +++ b/indexer/indexer.go @@ -257,7 +257,6 @@ func (indexer *Indexer) runIndexer() { logger.Errorf("Indexer Error while fetching genesis: %v", err) } else if genesis != nil { genesisTime := uint64(genesis.Data.GenesisTime) - logger.Infof("RPC Genesis: Time: %v, ForkVersion: %v, GVR: %v", genesisTime, genesis.Data.GenesisForkVersion, genesis.Data.GenesisValidatorsRoot) if genesisTime != utils.Config.Chain.GenesisTimestamp { logger.Warnf("Genesis time from RPC does not match the genesis time from explorer configuration.") } @@ -649,11 +648,13 @@ func (indexer *Indexer) loadEpochValidators(epoch uint64, epochStats *EpochStats func (indexer *Indexer) processIndexing() { // process old epochs currentEpoch := utils.EpochOfSlot(indexer.state.lastHeadBlock) - maxProcessEpoch := currentEpoch - uint64(indexer.epochProcessingDelay) - for indexer.state.lastProcessedEpoch < maxProcessEpoch { - processEpoch := indexer.state.lastProcessedEpoch + 1 - indexer.processEpoch(processEpoch) - indexer.state.lastProcessedEpoch = processEpoch + if currentEpoch >= uint64(indexer.epochProcessingDelay) { + maxProcessEpoch := currentEpoch - uint64(indexer.epochProcessingDelay) + for indexer.state.lastProcessedEpoch < maxProcessEpoch { + processEpoch := indexer.state.lastProcessedEpoch + 1 + indexer.processEpoch(processEpoch) + indexer.state.lastProcessedEpoch = processEpoch + } } }