MCPcopy Create free account
hub / github.com/CPChain/chain / blocksHandler

Method blocksHandler

protocols/cpc/syncer/syncer.go:343–401  ·  view source on GitHub ↗
(errCh chan error, successCh chan struct{}, mode SyncMode)

Source from the content-addressed store, hash-verified

341}
342
343func (s *Synchronizer) blocksHandler(errCh chan error, successCh chan struct{}, mode SyncMode) {
344 for {
345 if atomic.LoadInt32(&s.finishFetch) == int32(1) && s.blocksQueue.empty() {
346 successCh <- struct{}{}
347 return
348 }
349 task, err := s.blocksQueue.get()
350 if err != nil {
351 if err == ErrTimeout {
352 continue
353 }
354 log.Error("block queue get error", "err", err)
355 errCh <- err
356 return
357 }
358 s.progressLock.Lock()
359 if mode == FastSync {
360 s.progress.CurrentBlock = s.blockchain.CurrentFastBlock().NumberU64()
361 } else {
362 s.progress.CurrentBlock = s.blockchain.CurrentBlock().NumberU64()
363 }
364 s.progressLock.Unlock()
365
366 if mode == FullSync {
367 if _, err := s.blockchain.InsertChain(task.data.(types.Blocks)); err != nil {
368 log.Debug("insert chain", "err", err)
369 errCh <- err
370 return
371 }
372 } else {
373 var start = time.Now()
374 data := task.data.(blocksWithReceipts)
375 _, err := s.blockchain.InsertHeaderChain(data.headers, 16)
376 if err != nil {
377 errCh <- err
378 return
379 }
380 log.Debug("validate and insert headers", "elapsed", common.PrettyDuration(time.Since(start)))
381 start = time.Now()
382 blocksNew := make([]*types.Block, len(data.headers))
383 for i, header := range data.headers {
384 blocksNew[i] = types.NewBlockWithHeader(header).WithBody(data.bodies[i])
385 }
386 if _, err := s.blockchain.InsertReceiptChain(blocksNew, data.receipts); err != nil {
387 log.Error("insert receipts error", "err", err)
388 errCh <- err
389 return
390 }
391 // send metrics msg to monitor(prometheus)
392 if chainmetrics.NeedPushMetrics() {
393 go func() {
394 chainmetrics.UpdateBlockNumberGauge(float64(s.blockchain.CurrentFastBlock().NumberU64()))
395 chainmetrics.ReportBlockNumberGauge("blocknumber")
396 }()
397 }
398 log.Debug("insert blocks with receipts", "elapsed", common.PrettyDuration(time.Since(start)))
399 }
400 }

Callers 1

synchroniseMethod · 0.95

Calls 14

LockMethod · 0.80
NumberU64Method · 0.80
UnlockMethod · 0.80
DebugMethod · 0.80
WithBodyMethod · 0.80
ErrorMethod · 0.65
CurrentFastBlockMethod · 0.65
CurrentBlockMethod · 0.65
InsertChainMethod · 0.65
NowMethod · 0.65
InsertHeaderChainMethod · 0.65
InsertReceiptChainMethod · 0.65

Tested by

no test coverage detected