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;