From 8108ac9d17156a9d55e3c721deaa72400d38e64d Mon Sep 17 00:00:00 2001 From: Erik Grinaker Date: Wed, 29 Apr 2020 13:54:37 +0200 Subject: [PATCH] blockchain/v2: respect fast_sync option (#4772) Not thoroughly tested, but seems to work. Will do further testing as this is integrated with state sync. Fixes #4688. --- CHANGELOG_PENDING.md | 1 + blockchain/v2/reactor.go | 14 +++++++++----- blockchain/v2/reactor_test.go | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 41c694dd2..6ed6f2055 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -45,4 +45,5 @@ Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermi ### BUG FIXES: - [blockchain/v2] [\#4761](https://github.com/tendermint/tendermint/pull/4761) Fix excessive CPU usage caused by spinning on closed channels (@erikgrinaker) +- [blockchain/v2] Respect `fast_sync` option (@erikgrinaker) - [light] [\#4741](https://github.com/tendermint/tendermint/pull/4741) Correctly return `ErrSignedHeaderNotFound` and `ErrValidatorSetNotFound` on corresponding RPC errors (@erikgrinaker) diff --git a/blockchain/v2/reactor.go b/blockchain/v2/reactor.go index 0bf345237..60c73e6a8 100644 --- a/blockchain/v2/reactor.go +++ b/blockchain/v2/reactor.go @@ -129,6 +129,7 @@ type blockStore interface { type BlockchainReactor struct { p2p.BaseReactor + fastSync bool // if true, enable fast sync on start events chan Event // XXX: Rename eventsFromPeers scheduler *Routine processor *Routine @@ -156,7 +157,7 @@ type blockApplier interface { // XXX: unify naming in this package around tmState // XXX: V1 stores a copy of state as initialState, which is never mutated. Is that nessesary? func newReactor(state state.State, store blockStore, reporter behaviour.Reporter, - blockApplier blockApplier, bufferSize int) *BlockchainReactor { + blockApplier blockApplier, bufferSize int, fastSync bool) *BlockchainReactor { scheduler := newScheduler(state.LastBlockHeight, time.Now()) pContext := newProcessorContext(store, blockApplier, state) // TODO: Fix naming to just newProcesssor @@ -170,6 +171,7 @@ func newReactor(state state.State, store blockStore, reporter behaviour.Reporter store: store, reporter: reporter, logger: log.NewNopLogger(), + fastSync: fastSync, } } @@ -180,7 +182,7 @@ func NewBlockchainReactor( store blockStore, fastSync bool) *BlockchainReactor { reporter := behaviour.NewMockReporter() - return newReactor(state, store, reporter, blockApplier, 1000) + return newReactor(state, store, reporter, blockApplier, 1000, fastSync) } // SetSwitch implements Reactor interface. @@ -224,9 +226,11 @@ func (r *BlockchainReactor) SetLogger(logger log.Logger) { // Start implements cmn.Service interface func (r *BlockchainReactor) Start() error { r.reporter = behaviour.NewSwitchReporter(r.BaseReactor.Switch) - go r.scheduler.start() - go r.processor.start() - go r.demux() + if r.fastSync { + go r.scheduler.start() + go r.processor.start() + go r.demux() + } return nil } diff --git a/blockchain/v2/reactor_test.go b/blockchain/v2/reactor_test.go index e782c35ac..3cc3c4426 100644 --- a/blockchain/v2/reactor_test.go +++ b/blockchain/v2/reactor_test.go @@ -156,7 +156,7 @@ func newTestReactor(p testReactorParams) *BlockchainReactor { sm.SaveState(db, state) } - r := newReactor(state, store, reporter, appl, p.bufferSize) + r := newReactor(state, store, reporter, appl, p.bufferSize, true) logger := log.TestingLogger() r.SetLogger(logger.With("module", "blockchain"))