Load tenants in list_tenants for testing feature

This commit is contained in:
Konstantin Knizhnik
2023-06-02 22:58:41 +03:00
parent 3e044a1405
commit 198d256b7d

View File

@@ -1,6 +1,7 @@
//! This module acts as a switchboard to access different repositories managed by this
//! page server.
use futures::future::join_all;
use std::collections::{hash_map, HashMap};
use std::ffi::OsStr;
use std::path::Path;
@@ -610,6 +611,32 @@ pub enum TenantMapListError {
///
/// Get list of tenants, for the mgmt API
///
#[cfg(feature = "testing")]
pub async fn list_tenants() -> Result<Vec<(TenantId, TenantState)>, TenantMapListError> {
let tenants = TENANTS.read().await;
match &*tenants {
TenantsMap::Initializing => Err(TenantMapListError::Initializing),
TenantsMap::Open(m) => Ok(join_all(m.map.iter().map(|(id, tenant)| async {
(
*id,
tenant
.get_or_try_init(|| m.try_load_tenant(id))
.await
.map_or(
TenantState::broken_from_reason("Failed to load tenant".to_string()),
|t| t.current_state(),
),
)
}))
.await),
TenantsMap::ShuttingDown(m) => Ok(m
.iter()
.map(|(id, tenant)| (*id, tenant.current_state()))
.collect()),
}
}
#[cfg(not(feature = "testing"))]
pub async fn list_tenants() -> Result<Vec<(TenantId, TenantState)>, TenantMapListError> {
let tenants = TENANTS.read().await;
match &*tenants {