Skip to content

Commit 2ed75ab

Browse files
committed
add metrics
Signed-off-by: kyrie-yl <[email protected]>
1 parent f7ef016 commit 2ed75ab

File tree

2 files changed

+45
-36
lines changed

2 files changed

+45
-36
lines changed

core/block_validator.go

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/ethereum/go-ethereum/consensus"
2424
"github.com/ethereum/go-ethereum/core/state"
2525
"github.com/ethereum/go-ethereum/core/types"
26+
"github.com/ethereum/go-ethereum/log"
2627
"github.com/ethereum/go-ethereum/params"
2728
"github.com/ethereum/go-ethereum/trie"
2829
)
@@ -48,6 +49,7 @@ func NewBlockValidator(config *params.ChainConfig, blockchain *BlockChain, engin
4849
bc: blockchain,
4950
}
5051
if mode.NeedRemoteVerify() {
52+
log.Info("this node is a fast node with remote state verifier.")
5153
validator.remoteValidator = NewVerifyManager(blockchain, peers, mode == InsecureVerify)
5254
go validator.remoteValidator.mainLoop()
5355
}

core/remote_state_verifier.go

+43-36
Original file line numberDiff line numberDiff line change
@@ -30,29 +30,11 @@ const (
3030
)
3131

3232
var (
33-
remoteVerifyTaskCounter = metrics.NewRegisteredCounter("remote/state/verify/task/total", nil)
34-
35-
statusFullVerifiedMeter = metrics.NewRegisteredMeter("status/full/verified/messages/total", nil)
36-
statusUntrustedVerifiedMeter = metrics.NewRegisteredMeter("status/untrusted/verified/messages/total", nil)
37-
38-
statusDiffHashMismatchMeter = metrics.NewRegisteredMeter("status/diffhash/mismatch/messages/total", nil)
39-
statusImpossibleForkMeter = metrics.NewRegisteredMeter("status/impossible/fork/messages/total", nil)
40-
41-
statusBlockTooNewMeter = metrics.NewRegisteredMeter("status/block/too/new/messages/total", nil)
42-
statusBlockNewerMeter = metrics.NewRegisteredMeter("status/block/newer/messages/total", nil)
43-
statusPossibleForkMeter = metrics.NewRegisteredMeter("status/possible/fork/messages/total", nil)
44-
statusUnexpectedErrorMeter = metrics.NewRegisteredMeter("status/unexpected/error/total", nil)
45-
46-
codeMap = map[uint16]metrics.Meter{
47-
0x101: statusFullVerifiedMeter,
48-
0x102: statusUntrustedVerifiedMeter,
49-
0x201: statusDiffHashMismatchMeter,
50-
0x202: statusImpossibleForkMeter,
51-
0x301: statusBlockTooNewMeter,
52-
0x302: statusBlockNewerMeter,
53-
0x303: statusPossibleForkMeter,
54-
0x400: statusUnexpectedErrorMeter,
55-
}
33+
remoteVerifyTaskCounter = metrics.NewRegisteredCounter("remote/state/verify/task/total", nil)
34+
succeedRemoteVerifyTaskMeter = metrics.NewRegisteredMeter("succeed/remote/verify/task", nil)
35+
failedRemoteVerifyTaskMeter = metrics.NewRegisteredMeter("failed/remote/verify/task", nil)
36+
37+
succeedTaskExecutionTimer = metrics.NewRegisteredTimer("succeed/task/execution", nil)
5638
)
5739

5840
type remoteVerifyManager struct {
@@ -106,6 +88,8 @@ func (vm *remoteVerifyManager) mainLoop() {
10688
if task, ok := vm.tasks[hash]; ok {
10789
delete(vm.tasks, hash)
10890
remoteVerifyTaskCounter.Dec(1)
91+
succeedRemoteVerifyTaskMeter.Mark(1)
92+
succeedTaskExecutionTimer.Update(time.Since(task.startAt))
10993
close(task.terminalCh)
11094
}
11195
case <-pruneTicker.C:
@@ -114,6 +98,7 @@ func (vm *remoteVerifyManager) mainLoop() {
11498
vm.bc.CurrentHeader().Number.Uint64()-task.blockHeader.Number.Uint64() > pruneHeightDiff {
11599
delete(vm.tasks, hash)
116100
remoteVerifyTaskCounter.Dec(1)
101+
failedRemoteVerifyTaskMeter.Mark(1)
117102
close(task.terminalCh)
118103
}
119104
}
@@ -247,24 +232,41 @@ func (vt *verifyTask) Start(verifyCh chan common.Hash) {
247232
for {
248233
select {
249234
case msg := <-vt.messageCh:
250-
if metric, exist := codeMap[msg.verifyResult.Status.Code]; exist {
251-
metric.Mark(1)
252-
}
253-
switch msg.verifyResult.Status {
254-
case types.StatusFullVerified:
255-
statusFullVerifiedMeter.Mark(1)
256-
vt.compareRootHashAndWrite(msg, verifyCh)
257-
case types.StatusPartiallyVerified:
258-
statusUntrustedVerifiedMeter.Mark(1)
259-
log.Warn("block %s , num= %s is untrusted verified", msg.verifyResult.BlockHash, msg.verifyResult.BlockNumber)
260-
if vt.allowUntrusted {
235+
switch msg.verifyResult.Status.Code / 100 {
236+
case 1:
237+
switch msg.verifyResult.Status {
238+
case types.StatusFullVerified:
261239
vt.compareRootHashAndWrite(msg, verifyCh)
240+
newRecievedMsgTypeGauge("fullVerified", msg.peerId).Inc(1)
241+
case types.StatusPartiallyVerified:
242+
log.Warn("block %s , num= %s is untrusted verified", msg.verifyResult.BlockHash, msg.verifyResult.BlockNumber)
243+
if vt.allowUntrusted {
244+
vt.compareRootHashAndWrite(msg, verifyCh)
245+
}
246+
newRecievedMsgTypeGauge("partialVerified", msg.peerId).Inc(1)
262247
}
263-
case types.StatusUnexpectedError, types.StatusImpossibleFork, types.StatusDiffHashMismatch:
248+
249+
case 2, 4:
264250
vt.BadPeers[msg.peerId] = struct{}{}
265251
log.Info("peer %s is not available: code %d, msg %s,", msg.peerId, msg.verifyResult.Status.Code, msg.verifyResult.Status.Msg)
266-
case types.StatusBlockTooNew, types.StatusBlockNewer, types.StatusPossibleFork:
252+
switch msg.verifyResult.Status {
253+
case types.StatusDiffHashMismatch:
254+
newRecievedMsgTypeGauge("diffHashMismatch", msg.peerId).Inc(1)
255+
case types.StatusImpossibleFork:
256+
newRecievedMsgTypeGauge("impossibleFork", msg.peerId).Inc(1)
257+
case types.StatusUnexpectedError:
258+
newRecievedMsgTypeGauge("unexpectedError", msg.peerId).Inc(1)
259+
}
260+
case 3:
267261
log.Info("return msg from peer %s for block %s is %s", msg.peerId, msg.verifyResult.BlockHash, msg.verifyResult.Status.Msg)
262+
switch msg.verifyResult.Status {
263+
case types.StatusBlockTooNew:
264+
newRecievedMsgTypeGauge("blockTooNew", msg.peerId).Inc(1)
265+
case types.StatusBlockNewer:
266+
newRecievedMsgTypeGauge("blockNewer", msg.peerId).Inc(1)
267+
case types.StatusPossibleFork:
268+
newRecievedMsgTypeGauge("possibleFork", msg.peerId).Inc(1)
269+
}
268270
}
269271
case <-resend.C:
270272
// if a task has run over 15s, try all the vaild peers to verify.
@@ -390,3 +392,8 @@ func (mode *VerifyMode) UnmarshalText(text []byte) error {
390392
func (mode VerifyMode) NeedRemoteVerify() bool {
391393
return mode == FullVerify || mode == InsecureVerify
392394
}
395+
396+
func newRecievedMsgTypeGauge(msgType, peerId string) metrics.Gauge {
397+
m := fmt.Sprintf("recieved/%s/message/from/%s", msgType, peerId)
398+
return metrics.GetOrRegisterGauge(m, nil)
399+
}

0 commit comments

Comments
 (0)