Repository navigation
llo/v31: attributed observation telemetry and per job plugin telemetry - #276
Conversation
Add LLOAttributedObservationTelemetry, carrying the decoded observation of oracles in a round: stream values, channel votes, the oracle and agreed observation timestamps, and the decode error if the observation was dropped. Large observations are split across messages sharing (config_digest, seq_nr, observer). Used in v31 instead of the messagePropose.
Add a staging marker report: a JSON report with its own shape that a staging round appends last, so a staging instance always has a report reaching the transmitter. Allowing the transmitter to notify attached listeners also for a staging instance
Add captureOutcomeTelemetry, captureReportTelemetry and captureAttributedObservationTelemetry to the v31 job config, so v31 plugin telemetry is enabled per job instead of by the node CaptureEATelemetry setting, which keeps driving data source telemetry. Add captureStagingTelemetry to let a staging instance emit it too. All are off by default.
Emit, from StateTransition, the decoded observation of every oracle in the round as LLOAttributedObservationTelemetry, built and split off the StateTransition path by a plugin owned telemeter. Outcome and attributed observation telemetry are emitted by f+1 oracles rotating with seqNr. Plugin telemetry is emitted for production rounds, and for staging rounds with CaptureStagingTelemetry.
|
👋 brunotm, thanks for creating this pull request! To help reviewers, please consider creating future PRs as drafts first. This allows you to self-review and make any final changes before notifying the team. Once you're ready, you can mark it as "Ready for review" to request feedback. Thanks! |
| func (p *Plugin) captureAttributedObservationTelemetry(out precursor, seqNr uint64, aos []attributedObservation) { | ||
| if len(aos) == 0 || !p.emitsTelemetry(out.LifeCycleStage) { | ||
| return | ||
| } |
There was a problem hiding this comment.
worth a check in case p.attributedObservationTelemeter is nil ?
There was a problem hiding this comment.
already gated on
// collectAttributedObservations reports whether StateTransition should keep the
// decoded observations of seqNr for telemetry.
func (p *Plugin) collectAttributedObservations(seqNr uint64) bool {
return p.attributedObservationTelemeter != nil && p.isTelemetryEmitter(seqNr)
}|
Driving with the LLM to review this PR we bumped into this: It seems Blue and Green wipe each other's buffered telemetry:
|
there is companion PR for chainlink which already addresses this. |
Add telemetry carrying the decoded observation of every oracle in a v31 round, as seen by the state transition, and move v31 plugin telemetry to the job
[v31]config. Today only the agreed aggregates (outcome telemetry) and eachnode's own values are visible. Per oracle values never leave the state transition.
Add the capability to capture and transmit a staging instance telemetry.