neondatabase/neon · error
{} response
Error message
{} response What it means
idle_streams sends one probe GetPage for the pg_authid init-fork block on each opened stream. When a response arrives but its status_code differs from GetPageStatusCode::Ok, this error reports the raw status. The probe is valid on any healthy timeline, so a non-Ok status points to request-level or version-level problems rather than missing data.
Source
Thrown at pageserver/pagebench/src/cmd/idle_streams.rs:113
read_lsn: ReadLsn {
request_lsn: Lsn::MAX,
not_modified_since_lsn: Some(Lsn(1)),
},
rel: RelTag {
spcnode: 1664, // pg_global
dbnode: 0, // shared database
relnode: 1262, // pg_authid
forknum: 0, // init
},
block_numbers: vec![0],
})?;
let resp = resp_stream
.next()
.await
.transpose()?
.ok_or_else(|| anyhow!("no response"))?;
if resp.status_code != GetPageStatusCode::Ok {
return Err(anyhow!("{} response", resp.status_code));
}
}
// Hold onto streams to avoid closing them.
streams.push((req_tx, resp_stream));
}
info!("opened {} streams, sleeping", args.count);
// Block forever, to hold the idle streams open for inspection.
futures::future::pending::<()>().await;
Ok(())
}
View on GitHub (pinned to 8f60b04da4)
Solutions
- Confirm pagebench and pageserver come from the same neon build
- Check pageserver logs for the failing probe request
- Retry after the tenant reports active and has ingested initial WAL
Example fix
// before
if resp.status_code != GetPageStatusCode::Ok {
return Err(anyhow!("{} response", resp.status_code));
}
// after: switch on the status to give an actionable message
match resp.status_code {
GetPageStatusCode::Ok => {}
code => {
return Err(anyhow!(
"probe got {code}; verify pagebench/pageserver versions match"
))
}
} Defensive patterns
Strategy: try-catch
Type guard
fn is_ok(resp: &page_api::GetPageResponse) -> bool {
resp.status_code == page_api::GetPageStatusCode::Ok
} Try / catch
match run_probe(&args).await {
Ok(_) => {}
Err(err) if err.to_string().ends_with("response") => {
tracing::warn!(?err, "probe returned non-Ok status; continuing with fewer streams");
}
Err(err) => return Err(err),
} Prevention
- Deploy pagebench and pageserver from the same release
- Probe once with a single stream before opening the full set
- Log status codes with timeline context for quick triage
When it happens
Trigger: A page_api protocol or schema mismatch between the pagebench build and the pageserver; the tenant not yet ready to serve page reads; a server-side lookup failure for the probed key.
Common situations: Version skew between neon components in mixed environments; benching a tenant immediately after creation before it can serve reads.
Related errors
- unexpected status code: {}
- Remote extensions are not configured
- invalid tag {tag}
- must specify exactly one target
- invalid connstring: {err}
AI-assisted analysis of neondatabase/neon@8f60b04da4 (2026-08-16).
Data as JSON: /api/errors/87f006361ce64299.
Report an issue: GitHub.