From 940145b36871b3ac4255d677f61b94af9a3862bf Mon Sep 17 00:00:00 2001 From: Adrian Brink Date: Wed, 3 Jan 2018 11:57:42 +0100 Subject: [PATCH] Bullet points for reactor and poolRoutine --- blockchain/reactor.go | 16 +++++++++------- .../specification/new-spec/blockchain_reactor.md | 16 +++++++++++++++- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/blockchain/reactor.go b/blockchain/reactor.go index f8b1fc520..c92064d79 100644 --- a/blockchain/reactor.go +++ b/blockchain/reactor.go @@ -49,12 +49,13 @@ type BlockchainReactor struct { // immutable initialState sm.State - blockExec *sm.BlockExecutor - store *BlockStore - pool *BlockPool - fastSync bool - requestsCh chan BlockRequest - timeoutsCh chan p2p.ID + blockExec *sm.BlockExecutor + store *BlockStore + pool *BlockPool + fastSync bool + + requestsCh <-chan BlockRequest + timeoutsCh <-chan p2p.ID } // NewBlockchainReactor returns new reactor instance. @@ -127,7 +128,8 @@ func (bcR *BlockchainReactor) GetChannels() []*p2p.ChannelDescriptor { // AddPeer implements Reactor by sending our state to peer. func (bcR *BlockchainReactor) AddPeer(peer p2p.Peer) { - if !peer.Send(BlockchainChannel, struct{ BlockchainMessage }{&bcStatusResponseMessage{bcR.store.Height()}}) { + if !peer.Send(BlockchainChannel, + struct{ BlockchainMessage }{&bcStatusResponseMessage{bcR.store.Height()}}) { // doing nothing, will try later in `poolRoutine` } // peer is added to the pool once we receive the first diff --git a/docs/specification/new-spec/blockchain_reactor.md b/docs/specification/new-spec/blockchain_reactor.md index 204932205..ded1bc275 100644 --- a/docs/specification/new-spec/blockchain_reactor.md +++ b/docs/specification/new-spec/blockchain_reactor.md @@ -6,7 +6,21 @@ the blocks to disk and play blocks to the ABCI app. ## Block Reactor -* coordinates synching with other peers +* coordinates the pool for synching +* coordinates the store for persistence +* coordinates the playing of blocks towards the app using a sm.BlockExecutor +* handles switching between fastsync and consensus +* it is a p2p.BaseReactor +* starts the pool.Start() and its poolRoutine() +* registers all the concrete types and interfaces for serialisation + +### poolRoutine + +* requests blocks from a specific peer based on the pool +* periodically asks for status updates +* tries to switch to consensus +* tries to sync the app by taking downloaded blocks from the pool, gives them to the app and stores + them on disk ## Block Pool