MCPcopy Create free account
hub / github.com/DNAProject/DNA / run

Method run

consensus/vbft/node_sync.go:113–242  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

111}
112
113func (self *Syncer) run() {
114 self.server.quitWg.Add(1)
115 defer self.server.quitWg.Done()
116
117 for {
118 select {
119 case <-self.syncCheckReqC:
120 case req := <-self.blockSyncReqC:
121 if req.targetBlockNum == 0 {
122 // cancel fetcher for peer
123 for _, id := range req.targetPeers {
124 self.cancelFetcherForPeer(self.peers[id])
125 }
126 continue
127 }
128
129 log.Infof("server %d, got sync req(%d, %d) to %v",
130 self.server.Index, req.startBlockNum, req.targetBlockNum, req.targetPeers)
131 if req.startBlockNum <= self.server.GetCommittedBlockNo() {
132 req.startBlockNum = self.server.GetCommittedBlockNo() + 1
133 log.Infof("server %d, sync req start change to %d",
134 self.server.Index, req.startBlockNum)
135 }
136 for ; req.startBlockNum <= req.targetBlockNum; req.startBlockNum++ {
137 blk, _ := self.server.blockPool.getSealedBlock(req.startBlockNum)
138 if blk == nil {
139 log.Infof("server %d, on starting syncing %d, nil block from ledger",
140 self.server.Index, req.startBlockNum)
141 break
142 }
143 if err := self.server.fastForwardBlock(blk); err != nil {
144 log.Infof("server %d, on starting syncing %d, %s",
145 self.server.Index, req.startBlockNum, err)
146 break
147 }
148 }
149 if req.startBlockNum > req.targetBlockNum {
150 continue
151 }
152 self.onNewBlockSyncReq(req)
153
154 case syncMsg := <-self.syncMsgC:
155 if p, present := self.peers[syncMsg.fromPeer]; present {
156 if p.active {
157 p.msgC <- syncMsg.msg
158 } else {
159 // report err
160 p.msgC <- nil
161 }
162 } else {
163 // report error
164 }
165
166 case blkMsgFromPeer := <-self.blockFromPeerC:
167 blkNum := blkMsgFromPeer.block.getBlockNum()
168 if blkNum < self.nextReqBlkNum {
169 continue
170 }

Callers 1

startPeerSyncerMethod · 0.45

Calls 15

cancelFetcherForPeerMethod · 0.95
onNewBlockSyncReqMethod · 0.95
getProposerMethod · 0.95
blockConsensusDoneMethod · 0.95
blockCheckMerkleRootMethod · 0.95
getPrevBlockHashMethod · 0.95
InfofFunction · 0.92
ErrorfFunction · 0.92
DebugfFunction · 0.92
AddMethod · 0.80
GetCommittedBlockNoMethod · 0.80

Tested by

no test coverage detected