Repository navigation
Conversation
9 of 22 tasks
Contributor
|
Codecov Report✅ All modified and coverable lines are covered by tests. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
momosh-ssv
previously approved these changes
Oct 9, 2026
y0sher
dismissed
momosh-ssv’s stale review
October 13, 2026 13:07
The merge-base changed after approval.
GetGloasBeaconBlock recorded every produce under the POST method label, including the GET fallback to a beacon node that predates the produceBlockV4 POST (beacon-APIs#630), whose sample also absorbed the rejected POST's time. The produce path now records each request it makes: the rejected POST with its 404/405, then the GET. - firstClientResultRecorded hands each beacon node's attempt a recorder. firstClientResult wraps it around its single fixed-method request, so its other routes are recorded as before. - recordRequest reads the HTTP status of a hand-rolled request's error too (responseStatusCode, now shared with isNotFound). It used to record 0 for every error that was not go-eth2-client's. - firstClientResult moves from ptc.go to gloas_http.go, beside the other hand-rolled request helpers it serves.
isMethodOrPathMissing reads the status through responseStatusCode, as isNotFound does. Behaviour is unchanged: the produce POST returns only hand-rolled errors. A new test pins that a POST the beacon node fails (500) is returned without a GET retry. The touched doc comments each say only their own part: the note on the two error types moves to responseStatusCode, the produce docs stop repeating the POST/GET fallback, and the PTC endpoints name their typed-calls follow-up (#3014).
…to end - firstClientResultRecorded becomes firstClientResultWithRecorder: both variants record, so the old suffix didn't tell them apart. - With no beacon clients, it fails instead of returning the zero result with a nil error, as multiClientSubmit already does. New requires an address, so production can't reach this; the guard keeps the helper from reading an empty client list as a success. - isMethodOrPathMissing moves to errors.go, next to isNotFound. - TestGetGloasBeaconBlock_NextClientFallsBackToGET covers GetGloasBeaconBlock through a real GoClient: the first beacon node is down and the second serves the block through the GET fallback. - The envelope publish and gloasHTTPClient docs name their typed-calls follow-up (#3014), as the PTC endpoints do. - Drop a redundant require.Error.
iurii-ssv
force-pushed
the
goclient/gloas-produce-method-label
branch
from
October 14, 2026 09:41
6b75fc6 to
0a78296
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resolves the "Produce telemetry method label" follow-up from #2901.
Problem
GetGloasBeaconBlockPOSTsproduceBlockV4and, per beacon node, falls back to the legacy GET when the node predates beacon-APIs#630 (a 404 or 405). The request metric labelled every producePOST, fallbacks included, and one sample covered both the rejected POST and the GET.Change
firstClientResultWithRecordergives each beacon node's attempt a recorder.firstClientResultis now a thin wrapper over it, so its other routes keep their method and duration. With no beacon clients, both now fail instead of returning a zero result with a nil error. That can't happen in production, sinceNewrequires an address, but it matchesmultiClientSubmit's guard.recordRequestreads the HTTP status of a hand-rolled request's error throughresponseStatusCode. Before, every error that wasn't go-eth2-client's was recorded with status 0.isNotFoundand the produce fallback check,isMethodOrPathMissing(now beside it inerrors.go), read the status through it too; neither changes behaviour.firstClientResultmoves fromptc.gotogloas_http.go, next to the other hand-rolled request helpers it serves.gloasHTTPClient) name their typed-calls follow-up, ePBS/Gloas: adopt go-eth2-client Gloas support (progressive SSZ types +gloasversion + transport) #3014.Metric impact
For anyone with dashboards or alerts on
ssv.cl.request.duration:http.response.error_status_codestops being 0 for failed hand-rolled requests and carries their real HTTP status instead. Affected routes (http.route_name):firstClientResult:GetGloasBeaconBlock,PayloadAttestationDuties,PayloadAttestationData,ProposerDutiesDependentRoot, andAttestationDataon Gloas slots;multiClientSubmit:SubmitGloasBeaconBlock,SubmitExecutionPayloadEnvelope,SubmitPayloadAttestationMessages,SubmitProposerPreferencesandSubmitBuilderPreferences.Routes served by go-eth2-client already reported real codes and are unchanged.
On a pre-Round Timer Fix #630 beacon node,
GetGloasBeaconBlockrecords two requests per produce: a failed POST (404/405), then the GET. Its error count rises accordingly. A latency panel that isn't split byhttp.request.methodmixes the fast rejected POST with the GET, which pulls the percentiles down.No dashboards or alerts in this repo use the metric. End-to-end produce time is still logged by the proposer runner (
tookon🧊 got gloas beacon block proposal).Tests
TestGetGloasBeaconBlock_NextClientFallsBackToGETgoes through a realGoClientwith two fake beacon nodes. The first is down; the second predates Round Timer Fix #630 and serves the block through the GET fallback.GetGloasBeaconBlockitself had no test before.TestFirstClientResult_NoClientscovers the new guard, andTestResponseStatusCodecovers both error types, a wrapped error, and errors without a status.make lint(the pinned golangci-lint) andgo test -race ./beacon/goclient/pass.