@@ -79,6 +79,10 @@ const (
7979 ChainData = "chaindata"
8080)
8181
82+ const (
83+ MaxBlockHandleDelayMs = 3000 // max delay for block handles, max 3000 ms
84+ )
85+
8286var (
8387 sendBlockTimer = metrics .NewRegisteredTimer ("chain/delay/block/send" , nil )
8488 recvBlockTimer = metrics .NewRegisteredTimer ("chain/delay/block/recv" , nil )
@@ -901,32 +905,39 @@ func (s *Ethereum) reportRecentBlocksLoop() {
901905 records ["BlockTime" ] = common .FormatMilliTime (blockMsTime )
902906 metrics .GetOrRegisterLabel ("report-blocks" , nil ).Mark (records )
903907
904- if sendBlockTime > blockMsTime {
908+ if validTimeMetric ( blockMsTime , sendBlockTime ) {
905909 sendBlockTimer .Update (time .Duration (sendBlockTime - blockMsTime ))
906910 }
907- if recvNewBlockTime > blockMsTime {
911+ if validTimeMetric ( blockMsTime , recvNewBlockTime ) {
908912 recvBlockTimer .Update (time .Duration (recvNewBlockTime - blockMsTime ))
909913 }
910- if startImportBlockTime > blockMsTime {
914+ if validTimeMetric ( blockMsTime , startImportBlockTime ) {
911915 startInsertBlockTimer .Update (time .Duration (startImportBlockTime - blockMsTime ))
912916 }
913- if sendVoteTime > blockMsTime {
917+ if validTimeMetric ( blockMsTime , sendVoteTime ) {
914918 sendVoteTimer .Update (time .Duration (sendVoteTime - blockMsTime ))
915919 }
916- if firstVoteTime > blockMsTime {
920+ if validTimeMetric ( blockMsTime , firstVoteTime ) {
917921 firstVoteTimer .Update (time .Duration (firstVoteTime - blockMsTime ))
918922 }
919- if recvMajorityTime > blockMsTime {
923+ if validTimeMetric ( blockMsTime , recvMajorityTime ) {
920924 majorityVoteTimer .Update (time .Duration (recvMajorityTime - blockMsTime ))
921925 }
922- if importedBlockTime > blockMsTime {
926+ if validTimeMetric ( blockMsTime , importedBlockTime ) {
923927 importedBlockTimer .Update (time .Duration (importedBlockTime - blockMsTime ))
924928 }
925- if startMiningTime < blockMsTime {
929+ if validTimeMetric ( startMiningTime , blockMsTime ) {
926930 startMiningTimer .Update (time .Duration (blockMsTime - startMiningTime ))
927931 }
928932 case <- s .stopCh :
929933 return
930934 }
931935 }
932936}
937+
938+ func validTimeMetric (startMs , endMs int64 ) bool {
939+ if startMs >= endMs {
940+ return false
941+ }
942+ return endMs - startMs <= MaxBlockHandleDelayMs
943+ }
0 commit comments