{"record":{"id":"9fc99f92f6b027dc","repo":"rustfs/rustfs","slug":"uuid-must-be-a-valid-header-value","errorCode":null,"errorMessage":"UUID must be a valid header value","messagePattern":"UUID must be a valid header value","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/ecstore/src/cluster/rpc/client.rs","lineNumber":378,"sourceCode":"    fn call(&mut self, mut request: HttpRequest<ReqBody>) -> Self::Future {\n        let authenticated = self.audience.as_ref().is_some_and(|_| {\n            request\n                .headers()\n                .get(RPC_AUTH_VERSION_HEADER)\n                .and_then(|value| value.to_str().ok())\n                == Some(RPC_AUTH_VERSION_V2)\n        });\n        let challenge = authenticated.then(Uuid::new_v4);\n        let sent_state = request\n            .extensions()\n            .get::<PeerReplayStateSnapshot>()\n            .map(|snapshot| snapshot.0)\n            .unwrap_or_default();\n        if let (Some(audience), Some(challenge)) = (self.audience.as_deref(), challenge) {\n            // The challenge is independently HMAC-authenticated by the response proof. It is not\n            // part of v2 so old peers ignore it, while a new peer can safely advertise its epoch.\n            request.headers_mut().insert(\n                RPC_BOOT_EPOCH_CHALLENGE_HEADER,\n                challenge.to_string().parse().expect(\"UUID must be a valid header value\"),\n            );\n            if let (Some(boot_epoch), Some(timestamp), Some(content_sha256)) = (\n                sent_state.boot_epoch,\n                request.headers().get(TIMESTAMP_HEADER).and_then(|value| value.to_str().ok()),\n                request\n                    .headers()\n                    .get(RPC_CONTENT_SHA256_HEADER)\n                    .and_then(|value| value.to_str().ok()),\n            ) {\n                match gen_tonic_replay_scope_headers(audience, request.uri().path(), timestamp, content_sha256, boot_epoch) {\n                    Ok(headers) => request.headers_mut().extend(headers),\n                    Err(error) => debug!(error = %error, \"could not attach replay-scoped RPC signature\"),\n                }\n            }\n        }\n\n        let audience = self.audience.clone();","sourceCodeStart":360,"sourceCodeEnd":396,"githubUrl":"https://github.com/rustfs/rustfs/blob/5dca076efed96e7b842de07c4c2111035ae7c7a2/crates/ecstore/src/cluster/rpc/client.rs#L360-L396","documentation":"Raised in the RPC client when a generated UUID (challenge or correlation value) cannot be converted into an http HeaderValue. UUIDs are always valid header bytes, so hitting this means an invariant break in UUID formatting/encoding at the auth layer.","triggerScenarios":"Thrown at crates/ecstore/src/cluster/rpc/client.rs:359 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fail the request setup; the auth header cannot be built safely","Log which UUID field failed conversion for debugging","No retry: deterministic conversion failure, likely a code/version bug"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5dca076efed96e7b842de07c4c2111035ae7c7a2","analyzedAt":"2026-08-20T21:57:04.799Z","contentChangedAt":"2026-08-20T21:57:04.799Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}