Skip to content

keyed pages: a cold-start cohort beside the pooled one - #2902

Merged
Flotapponnier merged 1 commit into
mainfrom
feat/conn-mode-selector
Oct 8, 2026
Merged

Flotapponnier merged 1 commit into
mainfrom
feat/conn-mode-selector

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

keyed pages: a cold-start cohort beside the pooled one

The nine keyed benches now carry a third ACCESS value, "Private, cold start",
alongside "Public, no key" and "Private, API key". Same endpoints, same call,
measured on a connection that is never reused: DNS, TCP and the TLS handshake
are paid every time. That is what a serverless function or a one-shot client
experiences; the API key cohort is the pooled equivalent a long-running backend
gets.

36 provider clones, four per spec, pointed at the ocb:rpc_latency_cold_* rules
added in #2899. Verified against Prometheus before shipping: the generated p50
query for getblock on Ethereum returns 23.8 ms, so the column renders rather
than blanking.

Why a third button and not a nested selector

The ask was a selector that appears inside the Private tab. The tier dimension
partitions PROVIDERS, not PromQL labels, and the dimension machinery can inject
a label but cannot swap a metric NAME. Warm and cold are the same providers
against two different metrics, so a nested control needs new code in
benchmark-body.tsx plus a new dimension kind. A third tier value needs none.

It is also arguably the clearer surface: one row, three mutually exclusive
cohorts, no hidden state. The nested version stays possible later if the three
buttons read badly.

Provider slugs are suffixed -cold because the panel label IS the provider
slug and a duplicate would collide — the bug that blanked five ledger columns
on bench 284. The provider= label inside each query still points at the real
provider, so the series resolve.

Caveats a reader should get, and the specs do not say yet

The cold figure mixes provider quality with the distance from our probe regions
to their TLS termination, so it is partly a fact about where Railway put our
containers. Warm isolates what the provider controls. If only one number is
quoted, it should be the warm one.

Both arms have about an hour of history: the keyed warm series was reset today
after a measurement bug, and the cold series did not exist before this morning.
Percentiles will be noisy until tomorrow.

pnpm validate: 245 specs.

The nine keyed benches now carry a third ACCESS value, "Private, cold start",
alongside "Public, no key" and "Private, API key". Same endpoints, same call,
measured on a connection that is never reused: DNS, TCP and the TLS handshake
are paid every time. That is what a serverless function or a one-shot client
experiences; the API key cohort is the pooled equivalent a long-running backend
gets.

36 provider clones, four per spec, pointed at the ocb:rpc_latency_cold_* rules
added in #2899. Verified against Prometheus before shipping: the generated p50
query for getblock on Ethereum returns 23.8 ms, so the column renders rather
than blanking.

## Why a third button and not a nested selector

The ask was a selector that appears inside the Private tab. The tier dimension
partitions PROVIDERS, not PromQL labels, and the dimension machinery can inject
a label but cannot swap a metric NAME. Warm and cold are the same providers
against two different metrics, so a nested control needs new code in
benchmark-body.tsx plus a new dimension kind. A third tier value needs none.

It is also arguably the clearer surface: one row, three mutually exclusive
cohorts, no hidden state. The nested version stays possible later if the three
buttons read badly.

Provider slugs are suffixed `-cold` because the panel label IS the provider
slug and a duplicate would collide — the bug that blanked five ledger columns
on bench 284. The `provider=` label inside each query still points at the real
provider, so the series resolve.

## Caveats a reader should get, and the specs do not say yet

The cold figure mixes provider quality with the distance from our probe regions
to their TLS termination, so it is partly a fact about where Railway put our
containers. Warm isolates what the provider controls. If only one number is
quoted, it should be the warm one.

Both arms have about an hour of history: the keyed warm series was reset today
after a measurement bug, and the cold series did not exist before this morning.
Percentiles will be noisy until tomorrow.

pnpm validate: 245 specs.
@Flotapponnier
Flotapponnier merged commit afcc4de into main Oct 8, 2026
2 checks passed
Flotapponnier added a commit that referenced this pull request Oct 8, 2026
…#2903)

Everything from the connection-reuse incident landed on main: the two-arm
harness (#2896), the cold recording rules (#2899) and the cold-start cohort on
the nine keyed specs (#2902). The materialise worker clones DEV at build time,
so none of it can reach a page until the specs exist here. That is why
?tier=keyed-cold currently serves the public provider list: the worker's
snapshot predates the new tier and falls through to the default cohort.

Same content as main:

  9 specs      the keyed-cold cohort, 36 provider clones on the cold metric
  probe.go     warm and cold transports, alternating, plus the gated conn trace
  metrics.go   rpc_latency_cold_milliseconds and its histogram
  rules        ocb:rpc_latency_cold_milliseconds:{p50,p90,p99,mean}_24h

pnpm validate 246 specs, go build clean.

After this merges the worker still needs a rebuild, and there is roughly a
72-minute display floor before the pages show it.
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.

1 participant