Skip to content

Track superseded mempool errors separately#4385

Draft
tilacog wants to merge 7 commits intomainfrom
mempool-metric-superseded
Draft

Track superseded mempool errors separately#4385
tilacog wants to merge 7 commits intomainfrom
mempool-metric-superseded

Conversation

@tilacog
Copy link
Copy Markdown
Contributor

@tilacog tilacog commented May 5, 2026

Problem definition

When Mempools::execute() runs mempools concurrently, errors from mempools whose results were discarded after another mempool succeeded were still recorded against driver_mempool_submission, biasing the per-mempool success ratio with timing-dependent shadowed failures.

Major change

Replace select_ok with FuturesUnordered + a manual loop so observation runs in the consuming context. Errors from mempools overtaken by a later success are recorded under a new Superseded label via observe::mempool_superseded, which also records the winning mempool in the trace fields. Errors in the all-failed case keep their existing labels (Revert / Expired / Other / Disabled).

Minor change

observe::mempool_executed is also split into mempool_succeeded(&SubmissionSuccess) and mempool_failed(&mempools::Error), dropping the Result<&S, &E> indirection now that each call site already knows which branch it is on. Behavior and emitted metrics are unchanged by the split.

Alert query update needed when deploying

sum by (network) (increase(driver_mempool_submission{cow_fi_environment="prod",result="Success"}[2h]))
/
sum by (network) (increase(driver_mempool_submission{cow_fi_environment="prod",result!~"Disabled|Superseded"}[2h])) < 0.6

@tilacog tilacog force-pushed the mempool-metric-superseded branch 2 times, most recently from a798fc3 to 9905e6e Compare May 6, 2026 15:39
@tilacog

This comment was marked as outdated.

tilacog added 7 commits May 6, 2026 12:54
When `Mempools::execute()` runs mempools in parallel, errors from mempools
whose results were discarded after another mempool succeeded were still
recorded against `driver_mempool_submission`, biasing the per-mempool
success ratio with timing-dependent shadowed failures.

Replace `select_ok` with `FuturesUnordered` + manual loop so observation
runs in the consuming context. Errors that occur before another mempool
succeeds are now recorded under a new `Superseded` label via
`observe::mempool_superseded`, which also records the winning mempool in
the trace fields. Errors in the all-failed case keep their existing
labels (Revert / Expired / Other / Disabled).

Alert query update needed when deploying:

    sum by (network) (increase(driver_mempool_submission{cow_fi_environment="prod",result="Success"}[2h]))
    /
    sum by (network) (increase(driver_mempool_submission{cow_fi_environment="prod",result!~"Disabled|Superseded"}[2h])) < 0.6
`mempool_executed` took a `Result<&SubmissionSuccess, &mempools::Error>`
and re-matched the same discriminant several times to pick the log level,
metric label, and block-passed labels. Replace it with two functions,
`mempool_succeeded(&SubmissionSuccess)` and `mempool_failed(&mempools::Error)`,
so each branch is straight-line and call sites pick the correct observer
directly. Behavior and emitted metrics are unchanged.
@tilacog tilacog force-pushed the mempool-metric-superseded branch from 9905e6e to d9fb0cb Compare May 6, 2026 15:55
@cowprotocol cowprotocol deleted a comment from github-actions Bot May 6, 2026
Copy link
Copy Markdown
Contributor

@fleupold fleupold left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a reason you are not using the PR template for the description?

I agree with the change, however I'd like to suggest that we interpret "superseeded" events as success wrt. how you envision to change the metric. A superseeded submission should be considered a successful one.

This way we receive N (# of mempool) events in the happy case, and N events in the failure case allowing us to keep our alert metric as a ratio of successful to failed ones (otherwise failed events would be weighted N times more than successful ones).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants