servers/http/
read_preference.rs1use std::str::FromStr;
16
17use axum::body::Body;
18use axum::http::Request;
19use axum::middleware::Next;
20use axum::response::Response;
21use session::context::QueryContext;
22use session::ReadPreference;
23
24use crate::http::header::GREPTIME_DB_HEADER_READ_PREFERENCE;
25
26pub async fn extract_read_preference(mut request: Request<Body>, next: Next) -> Response {
28 let read_preference = request
29 .headers()
30 .get(&GREPTIME_DB_HEADER_READ_PREFERENCE)
31 .and_then(|header| header.to_str().ok())
32 .and_then(|s| ReadPreference::from_str(s).ok())
33 .unwrap_or_default();
34
35 if let Some(query_ctx) = request.extensions_mut().get_mut::<QueryContext>() {
36 common_telemetry::debug!("Setting read preference to {}", read_preference);
37 query_ctx.set_read_preference(read_preference);
38 }
39 next.run(request).await
40}