{"record":{"id":"87f006361ce64299","repo":"neondatabase/neon","slug":"response","errorCode":null,"errorMessage":"{} response","messagePattern":"(.+?) response","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pageserver/pagebench/src/cmd/idle_streams.rs","lineNumber":113,"sourceCode":"                read_lsn: ReadLsn {\n                    request_lsn: Lsn::MAX,\n                    not_modified_since_lsn: Some(Lsn(1)),\n                },\n                rel: RelTag {\n                    spcnode: 1664, // pg_global\n                    dbnode: 0,     // shared database\n                    relnode: 1262, // pg_authid\n                    forknum: 0,    // init\n                },\n                block_numbers: vec![0],\n            })?;\n            let resp = resp_stream\n                .next()\n                .await\n                .transpose()?\n                .ok_or_else(|| anyhow!(\"no response\"))?;\n            if resp.status_code != GetPageStatusCode::Ok {\n                return Err(anyhow!(\"{} response\", resp.status_code));\n            }\n        }\n\n        // Hold onto streams to avoid closing them.\n        streams.push((req_tx, resp_stream));\n    }\n\n    info!(\"opened {} streams, sleeping\", args.count);\n\n    // Block forever, to hold the idle streams open for inspection.\n    futures::future::pending::<()>().await;\n\n    Ok(())\n}\n","sourceCodeStart":95,"sourceCodeEnd":128,"githubUrl":"https://github.com/neondatabase/neon/blob/8f60b04da47ffefe0e52bda2440134b42874eb75/pageserver/pagebench/src/cmd/idle_streams.rs#L95-L128","documentation":"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.","triggerScenarios":"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.","commonSituations":"Version skew between neon components in mixed environments; benching a tenant immediately after creation before it can serve reads.","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"],"exampleFix":"// before\nif resp.status_code != GetPageStatusCode::Ok {\n    return Err(anyhow!(\"{} response\", resp.status_code));\n}\n// after: switch on the status to give an actionable message\nmatch resp.status_code {\n    GetPageStatusCode::Ok => {}\n    code => {\n        return Err(anyhow!(\n            \"probe got {code}; verify pagebench/pageserver versions match\"\n        ))\n    }\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":"fn is_ok(resp: &page_api::GetPageResponse) -> bool {\n    resp.status_code == page_api::GetPageStatusCode::Ok\n}","tryCatchPattern":"match run_probe(&args).await {\n    Ok(_) => {}\n    Err(err) if err.to_string().ends_with(\"response\") => {\n        tracing::warn!(?err, \"probe returned non-Ok status; continuing with fewer streams\");\n    }\n    Err(err) => return Err(err),\n}","preventionTips":["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"],"tags":["pagebench","page-api","status-code","version-skew"],"backgroundTag":"unexpected-response-status-code","analyzedSha":"8f60b04da47ffefe0e52bda2440134b42874eb75","analyzedAt":"2026-08-16T23:39:28.135Z","schemaVersion":2},"datasetVersion":"2026-08-17T04:17:16.089Z"}