diff --git a/pageserver/src/billing_metrics.rs b/pageserver/src/billing_metrics.rs index f9d3e8553f..73e27618db 100644 --- a/pageserver/src/billing_metrics.rs +++ b/pageserver/src/billing_metrics.rs @@ -9,7 +9,7 @@ use tracing::*; use utils::id::TimelineId; use crate::task_mgr; -use crate::tenant_mgr; +use crate::tenant::mgr; use pageserver_api::models::TenantState; use utils::id::TenantId; @@ -161,7 +161,7 @@ pub async fn collect_metrics_task( ); // get list of tenants - let tenants = tenant_mgr::list_tenants().await; + let tenants = mgr::list_tenants().await; // iterate through list of Active tenants and collect metrics for (tenant_id, tenant_state) in tenants { @@ -169,7 +169,7 @@ pub async fn collect_metrics_task( continue; } - let tenant = tenant_mgr::get_tenant(tenant_id, true).await?; + let tenant = mgr::get_tenant(tenant_id, true).await?; let mut tenant_resident_size = 0; diff --git a/pageserver/src/bin/pageserver.rs b/pageserver/src/bin/pageserver.rs index d12063f5aa..2b4dcc68f0 100644 --- a/pageserver/src/bin/pageserver.rs +++ b/pageserver/src/bin/pageserver.rs @@ -18,7 +18,8 @@ use pageserver::{ task_mgr::{ BACKGROUND_RUNTIME, COMPUTE_REQUEST_RUNTIME, MGMT_REQUEST_RUNTIME, WALRECEIVER_RUNTIME, }, - tenant_mgr, virtual_file, + tenant::mgr, + virtual_file, }; use utils::{ auth::JwtAuth, @@ -284,7 +285,7 @@ fn start_pageserver(conf: &'static PageServerConf) -> anyhow::Result<()> { let remote_storage = create_remote_storage_client(conf)?; // Scan the local 'tenants/' directory and start loading the tenants - BACKGROUND_RUNTIME.block_on(tenant_mgr::init_tenant_mgr(conf, remote_storage.clone()))?; + BACKGROUND_RUNTIME.block_on(mgr::init_tenant_mgr(conf, remote_storage.clone()))?; // Start up the service to handle HTTP mgmt API request. We created the // listener earlier already. diff --git a/pageserver/src/config.rs b/pageserver/src/config.rs index 66f8a9f4b8..deb79531a4 100644 --- a/pageserver/src/config.rs +++ b/pageserver/src/config.rs @@ -27,14 +27,15 @@ use utils::{ postgres_backend::AuthType, }; +use crate::tenant::config::TenantConf; +use crate::tenant::config::TenantConfOpt; use crate::tenant::{TENANT_ATTACHING_MARKER_FILENAME, TIMELINES_SEGMENT_NAME}; -use crate::tenant_config::{TenantConf, TenantConfOpt}; use crate::{ IGNORED_TENANT_FILE_NAME, METADATA_FILE_NAME, TENANT_CONFIG_NAME, TIMELINE_UNINIT_MARK_SUFFIX, }; pub mod defaults { - use crate::tenant_config::defaults::*; + use crate::tenant::config::defaults::*; use const_format::formatcp; pub use pageserver_api::{ diff --git a/pageserver/src/http/routes.rs b/pageserver/src/http/routes.rs index 6d97f3206e..66a1607801 100644 --- a/pageserver/src/http/routes.rs +++ b/pageserver/src/http/routes.rs @@ -12,9 +12,9 @@ use super::models::{ TimelineCreateRequest, TimelineInfo, }; use crate::pgdatadir_mapping::LsnForTimestamp; +use crate::tenant::config::TenantConfOpt; use crate::tenant::{with_ondemand_download, Timeline}; -use crate::tenant_config::TenantConfOpt; -use crate::{config::PageServerConf, tenant_mgr}; +use crate::{config::PageServerConf, tenant::mgr}; use utils::{ auth::JwtAuth, http::{ @@ -170,7 +170,7 @@ async fn timeline_create_handler(mut request: Request) -> Result) -> Result, check_permission(&request, Some(tenant_id))?; let response_data = async { - let tenant = tenant_mgr::get_tenant(tenant_id, true) + let tenant = mgr::get_tenant(tenant_id, true) .await .map_err(ApiError::NotFound)?; let timelines = tenant.list_timelines(); @@ -262,7 +262,7 @@ async fn timeline_detail_handler(request: Request) -> Result) -> Result) -> Result, if let Some(remote_storage) = &state.remote_storage { // FIXME: distinguish between "Tenant already exists" and other errors - tenant_mgr::attach_tenant(state.conf, tenant_id, remote_storage.clone()) + mgr::attach_tenant(state.conf, tenant_id, remote_storage.clone()) .instrument(info_span!("tenant_attach", tenant = %tenant_id)) .await .map_err(ApiError::InternalServerError)?; @@ -340,7 +340,7 @@ async fn timeline_delete_handler(request: Request) -> Result) -> Result, let state = get_state(&request); let conf = state.conf; - tenant_mgr::detach_tenant(conf, tenant_id) + mgr::detach_tenant(conf, tenant_id) .instrument(info_span!("tenant_detach", tenant = %tenant_id)) .await // FIXME: Errors from `detach_tenant` can be caused by both both user and internal errors. @@ -372,7 +372,7 @@ async fn tenant_load_handler(request: Request) -> Result, A check_permission(&request, Some(tenant_id))?; let state = get_state(&request); - tenant_mgr::load_tenant(state.conf, tenant_id, state.remote_storage.clone()) + mgr::load_tenant(state.conf, tenant_id, state.remote_storage.clone()) .instrument(info_span!("load", tenant = %tenant_id)) .await .map_err(ApiError::InternalServerError)?; @@ -386,7 +386,7 @@ async fn tenant_ignore_handler(request: Request) -> Result, let state = get_state(&request); let conf = state.conf; - tenant_mgr::ignore_tenant(conf, tenant_id) + mgr::ignore_tenant(conf, tenant_id) .instrument(info_span!("ignore_tenant", tenant = %tenant_id)) .await // FIXME: Errors from `ignore_tenant` can be caused by both both user and internal errors. @@ -399,7 +399,7 @@ async fn tenant_ignore_handler(request: Request) -> Result, async fn tenant_list_handler(request: Request) -> Result, ApiError> { check_permission(&request, None)?; - let response_data = tenant_mgr::list_tenants() + let response_data = mgr::list_tenants() .instrument(info_span!("tenant_list")) .await .iter() @@ -419,7 +419,7 @@ async fn tenant_status(request: Request) -> Result, ApiErro check_permission(&request, Some(tenant_id))?; let tenant_info = async { - let tenant = tenant_mgr::get_tenant(tenant_id, false).await?; + let tenant = mgr::get_tenant(tenant_id, false).await?; // Calculate total physical size of all timelines let mut current_physical_size = 0; @@ -446,7 +446,7 @@ async fn tenant_size_handler(request: Request) -> Result, A let tenant_id: TenantId = parse_request_param(&request, "tenant_id")?; check_permission(&request, Some(tenant_id))?; - let tenant = tenant_mgr::get_tenant(tenant_id, true) + let tenant = mgr::get_tenant(tenant_id, true) .await .map_err(ApiError::InternalServerError)?; @@ -567,7 +567,7 @@ async fn tenant_create_handler(mut request: Request) -> Result) -> Result) -> Result) -> Result) -> Result Result> { - let tenant = tenant_mgr::get_tenant(tenant_id, false).await?; + let tenant = mgr::get_tenant(tenant_id, false).await?; match tokio::time::timeout(Duration::from_secs(30), tenant.wait_to_become_active()).await { Ok(wait_result) => wait_result // no .context(), the error message is good enough and some tests depend on it diff --git a/pageserver/src/tenant.rs b/pageserver/src/tenant.rs index 308130c799..eb28e6da0a 100644 --- a/pageserver/src/tenant.rs +++ b/pageserver/src/tenant.rs @@ -55,11 +55,12 @@ use crate::metrics::{remove_tenant_metrics, STORAGE_TIME}; use crate::repository::GcResult; use crate::task_mgr; use crate::task_mgr::TaskKind; +use crate::tenant::config::TenantConfOpt; use crate::tenant::metadata::load_metadata; use crate::tenant::storage_layer::DeltaLayer; use crate::tenant::storage_layer::ImageLayer; use crate::tenant::storage_layer::Layer; -use crate::tenant_config::TenantConfOpt; + use crate::virtual_file::VirtualFile; use crate::walredo::PostgresRedoManager; use crate::walredo::WalRedoManager; @@ -84,6 +85,10 @@ mod par_fsync; pub mod storage_layer; mod storage_sync; +pub mod config; +pub mod mgr; +pub mod tasks; + mod timeline; pub mod size; @@ -1422,7 +1427,7 @@ impl Tenant { // Spawn gc and compaction loops. The loops will shut themselves // down when they notice that the tenant is inactive. - crate::tenant_tasks::start_background_loops(self.tenant_id); + tasks::start_background_loops(self.tenant_id); for timeline in not_broken_timelines { timeline.set_state(TimelineState::Active); @@ -2576,7 +2581,7 @@ pub mod harness { }; use super::*; - use crate::tenant_config::{TenantConf, TenantConfOpt}; + use crate::tenant::config::{TenantConf, TenantConfOpt}; use hex_literal::hex; use utils::id::{TenantId, TimelineId}; diff --git a/pageserver/src/tenant_config.rs b/pageserver/src/tenant/config.rs similarity index 100% rename from pageserver/src/tenant_config.rs rename to pageserver/src/tenant/config.rs diff --git a/pageserver/src/tenant_mgr.rs b/pageserver/src/tenant/mgr.rs similarity index 99% rename from pageserver/src/tenant_mgr.rs rename to pageserver/src/tenant/mgr.rs index e4e9d0c6e8..44849de735 100644 --- a/pageserver/src/tenant_mgr.rs +++ b/pageserver/src/tenant/mgr.rs @@ -17,8 +17,8 @@ use utils::crashsafe; use crate::config::PageServerConf; use crate::task_mgr::{self, TaskKind}; +use crate::tenant::config::TenantConfOpt; use crate::tenant::{Tenant, TenantState}; -use crate::tenant_config::TenantConfOpt; use crate::IGNORED_TENANT_FILE_NAME; use utils::fs_ext::PathExt; @@ -216,8 +216,7 @@ pub async fn create_tenant( hash_map::Entry::Vacant(v) => { // Hold the write_tenants() lock, since all of this is local IO. // If this section ever becomes contentious, introduce a new `TenantState::Creating`. - let tenant_directory = - super::tenant::create_tenant_files(conf, tenant_conf, tenant_id)?; + let tenant_directory = super::create_tenant_files(conf, tenant_conf, tenant_id)?; let created_tenant = schedule_local_tenant_processing(conf, &tenant_directory, remote_storage)?; let crated_tenant_id = created_tenant.tenant_id(); diff --git a/pageserver/src/tenant_tasks.rs b/pageserver/src/tenant/tasks.rs similarity index 98% rename from pageserver/src/tenant_tasks.rs rename to pageserver/src/tenant/tasks.rs index d71f244725..8397d26e5d 100644 --- a/pageserver/src/tenant_tasks.rs +++ b/pageserver/src/tenant/tasks.rs @@ -8,8 +8,8 @@ use std::time::Duration; use crate::metrics::TENANT_TASK_EVENTS; use crate::task_mgr; use crate::task_mgr::{TaskKind, BACKGROUND_RUNTIME}; +use crate::tenant::mgr; use crate::tenant::{Tenant, TenantState}; -use crate::tenant_mgr; use tracing::*; use utils::id::TenantId; @@ -155,7 +155,7 @@ async fn wait_for_active_tenant( wait: Duration, ) -> ControlFlow<(), Arc> { let tenant = loop { - match tenant_mgr::get_tenant(tenant_id, false).await { + match mgr::get_tenant(tenant_id, false).await { Ok(tenant) => break tenant, Err(e) => { error!("Failed to get a tenant {tenant_id}: {e:#}"); diff --git a/pageserver/src/tenant/timeline.rs b/pageserver/src/tenant/timeline.rs index 55ede57e53..bbfcad5734 100644 --- a/pageserver/src/tenant/timeline.rs +++ b/pageserver/src/tenant/timeline.rs @@ -42,7 +42,7 @@ use crate::metrics::TimelineMetrics; use crate::pgdatadir_mapping::LsnForTimestamp; use crate::pgdatadir_mapping::{is_rel_fsm_block_key, is_rel_vm_block_key}; use crate::pgdatadir_mapping::{BlockNumber, CalculateLogicalSizeError}; -use crate::tenant_config::TenantConfOpt; +use crate::tenant::config::TenantConfOpt; use pageserver_api::reltag::RelTag; use postgres_connection::PgConnectionConfig;