diff --git a/pageserver/src/bin/pageserver.rs b/pageserver/src/bin/pageserver.rs index bf0ad760cb..6103f4c885 100644 --- a/pageserver/src/bin/pageserver.rs +++ b/pageserver/src/bin/pageserver.rs @@ -477,16 +477,19 @@ fn start_pageserver( { let _rt_guard = MGMT_REQUEST_RUNTIME.enter(); - let router = http::make_router( - conf, - launch_ts, - http_auth, - broker_client.clone(), - remote_storage, - disk_usage_eviction_state, - )? - .build() - .map_err(|err| anyhow!(err))?; + let router_state = Arc::new( + http::routes::State::new( + conf, + http_auth.clone(), + remote_storage, + broker_client.clone(), + disk_usage_eviction_state, + ) + .context("Failed to initialize router state")?, + ); + let router = http::make_router(router_state, launch_ts, http_auth.clone())? + .build() + .map_err(|err| anyhow!(err))?; let service = utils::http::RouterService::new(router).unwrap(); let server = hyper::Server::from_tcp(http_listener)? .serve(service) diff --git a/pageserver/src/http/routes.rs b/pageserver/src/http/routes.rs index 286aa3dfb0..c661fe9e3f 100644 --- a/pageserver/src/http/routes.rs +++ b/pageserver/src/http/routes.rs @@ -12,7 +12,6 @@ use pageserver_api::models::{ DownloadRemoteLayersTaskSpawnRequest, TenantAttachRequest, TenantLoadRequest, }; use remote_storage::GenericRemoteStorage; -use storage_broker::BrokerClientChannel; use tenant_size_model::{SizeResult, StorageModel}; use tokio_util::sync::CancellationToken; use tracing::*; @@ -55,7 +54,7 @@ use utils::{ // Imports only used for testing APIs use super::models::ConfigureFailpointsRequest; -struct State { +pub struct State { conf: &'static PageServerConf, auth: Option>, allowlist_routes: Vec, @@ -65,7 +64,7 @@ struct State { } impl State { - fn new( + pub fn new( conf: &'static PageServerConf, auth: Option>, remote_storage: Option, @@ -1354,12 +1353,9 @@ where } pub fn make_router( - conf: &'static PageServerConf, + state: Arc, launch_ts: &'static LaunchTimestamp, auth: Option>, - broker_client: BrokerClientChannel, - remote_storage: Option, - disk_usage_eviction_state: Arc, ) -> anyhow::Result> { let spec = include_bytes!("openapi_spec.yml"); let mut router = attach_openapi_ui(endpoint::make_router(), spec, "/swagger.yml", "/v1/doc"); @@ -1383,16 +1379,7 @@ pub fn make_router( ); Ok(router - .data(Arc::new( - State::new( - conf, - auth, - remote_storage, - broker_client, - disk_usage_eviction_state, - ) - .context("Failed to initialize router state")?, - )) + .data(state) .get("/v1/status", |r| api_handler(r, status_handler)) .put("/v1/failpoints", |r| { testing_api_handler("manage failpoints", r, failpoints_handler)