Skip to content

Commit e87b7f1

Browse files
authored
metrics: add block failure counters (#4036)
1 parent 994339c commit e87b7f1

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

beacon_chain/validators/validator_duties.nim

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ declareCounter beacon_light_client_optimistic_updates_sent,
6363
declareCounter beacon_blocks_proposed,
6464
"Number of beacon chain blocks sent by this peer"
6565

66+
declareCounter beacon_block_production_errors,
67+
"Number of times we failed to produce a block"
68+
69+
declareCounter beacon_block_payload_errors,
70+
"Number of times execution client failed to produce block payload"
71+
6672
declareGauge(attached_validator_balance,
6773
"Validator balance at slot end of the first 64 validators, in Gwei",
6874
labels = ["pubkey"])
@@ -383,6 +389,7 @@ proc getExecutionPayload(
383389
build_empty_execution_payload(proposalState.bellatrixData.data)
384390

385391
if node.eth1Monitor.isNil:
392+
beacon_block_payload_errors.inc()
386393
warn "getExecutionPayload: eth1Monitor not initialized; using empty execution payload"
387394
return Opt.some empty_execution_payload
388395

@@ -439,9 +446,11 @@ proc getExecutionPayload(
439446
awaitWithTimeout(
440447
get_execution_payload(payload_id, node.consensusManager.eth1Monitor),
441448
GETPAYLOAD_TIMEOUT):
449+
beacon_block_payload_errors.inc()
442450
warn "Getting execution payload from Engine API timed out", payload_id
443451
empty_execution_payload
444452
except CatchableError as err:
453+
beacon_block_payload_errors.inc()
445454
warn "Getting execution payload from Engine API failed",
446455
payload_id, err = err.msg
447456
empty_execution_payload
@@ -462,6 +471,7 @@ proc getExecutionPayload(
462471

463472
return Opt.some payload
464473
except CatchableError as err:
474+
beacon_block_payload_errors.inc()
465475
error "Error creating non-empty execution payload; using empty execution payload",
466476
msg = err.msg
467477
return Opt.some empty_execution_payload
@@ -494,6 +504,7 @@ proc makeBeaconBlockForHeadAndSlot*(
494504
eth1Proposal = node.getBlockProposalEth1Data(state)
495505

496506
if eth1Proposal.hasMissingDeposits:
507+
beacon_block_production_errors.inc()
497508
warn "Eth1 deposits not available. Skipping block proposal", slot
498509
return ForkedBlockResult.err("Eth1 deposits not available")
499510

@@ -522,6 +533,7 @@ proc makeBeaconBlockForHeadAndSlot*(
522533
# TODO https://github.com/nim-lang/Nim/issues/19802
523534
if pubkey.isSome: pubkey.get.toPubKey else: default(ValidatorPubKey)))
524535
if maybeExecutionPayload.isNone:
536+
beacon_block_production_errors.inc()
525537
warn "Unable to get execution payload. Skipping block proposal",
526538
slot, validator_index
527539
return ForkedBlockResult.err("Unable to get execution payload")
@@ -558,14 +570,17 @@ proc makeBeaconBlockForHeadAndSlot*(
558570
# This is almost certainly a bug, but it's complex enough that there's a
559571
# small risk it might happen even when most proposals succeed - thus we
560572
# log instead of asserting
573+
beacon_block_production_errors.inc()
561574
error "Cannot create block for proposal",
562575
slot, head = shortLog(head), error = res.error()
563576
return err($res.error)
564577
return ok(res.get())
565578
do:
579+
beacon_block_production_errors.inc()
566580
error "Cannot get proposal state - skipping block production, database corrupt?",
567581
head = shortLog(head),
568582
slot
583+
return err("Cannot create proposal state")
569584

570585
proc getBlindedExecutionPayload(
571586
node: BeaconNode, slot: Slot, executionBlockRoot: Eth2Digest,

0 commit comments

Comments
 (0)