pageserver: thread tenant conf to in mem layer

This commit is contained in:
Vlad Lazar
2024-04-04 16:36:37 +01:00
parent c5f64fe54f
commit 5a5fa2158b
3 changed files with 18 additions and 7 deletions

View File

@@ -11,9 +11,10 @@ use crate::tenant::block_io::BlockReader;
use crate::tenant::ephemeral_file::EphemeralFile;
use crate::tenant::storage_layer::ValueReconstructResult;
use crate::tenant::timeline::GetVectoredError;
use crate::tenant::{PageReconstructError, Timeline};
use crate::tenant::{AttachedTenantConf, PageReconstructError, Timeline};
use crate::{page_cache, walrecord};
use anyhow::{anyhow, ensure, Result};
use arc_swap::ArcSwap;
use pageserver_api::keyspace::KeySpace;
use pageserver_api::models::InMemoryLayerInfo;
use pageserver_api::shard::TenantShardId;
@@ -40,6 +41,7 @@ use super::{
pub(crate) struct InMemoryLayerFileId(page_cache::FileId);
pub struct InMemoryLayer {
tenant_conf: Arc<ArcSwap<AttachedTenantConf>>,
conf: &'static PageServerConf,
tenant_shard_id: TenantShardId,
timeline_id: TimelineId,
@@ -444,6 +446,7 @@ impl InMemoryLayer {
/// Create a new, empty, in-memory layer
pub async fn create(
conf: &'static PageServerConf,
tenant_conf: Arc<ArcSwap<AttachedTenantConf>>,
timeline_id: TimelineId,
tenant_shard_id: TenantShardId,
start_lsn: Lsn,

View File

@@ -1790,7 +1790,7 @@ impl Timeline {
generation,
shard_identity,
pg_version,
layers: Default::default(),
layers: LayerManager::new(Arc::clone(&tenant_conf)),
walredo_mgr,
walreceiver: Mutex::new(None),

View File

@@ -1,4 +1,5 @@
use anyhow::{bail, ensure, Context, Result};
use arc_swap::ArcSwap;
use pageserver_api::shard::TenantShardId;
use std::{collections::HashMap, sync::Arc};
use tracing::trace;
@@ -11,22 +12,29 @@ use crate::{
config::PageServerConf,
metrics::TimelineMetrics,
tenant::{
layer_map::{BatchedUpdates, LayerMap},
storage_layer::{
layer_map::{BatchedUpdates, LayerMap}, storage_layer::{
AsLayerDesc, InMemoryLayer, Layer, PersistentLayerDesc, PersistentLayerKey,
ResidentLayer,
},
}, AttachedTenantConf
},
};
/// Provides semantic APIs to manipulate the layer map.
#[derive(Default)]
pub(crate) struct LayerManager {
layer_map: LayerMap,
layer_fmgr: LayerFileManager<Layer>,
tenant_conf: Arc<ArcSwap<AttachedTenantConf>>
}
impl LayerManager {
pub(crate) fn new(tenant_conf: Arc<ArcSwap<AttachedTenantConf>>) -> Self {
Self {
layer_map: LayerMap::default(),
layer_fmgr: LayerFileManager::default(),
tenant_conf
}
}
pub(crate) fn get_from_desc(&self, desc: &PersistentLayerDesc) -> Layer {
self.layer_fmgr.get_from_desc(desc)
}
@@ -105,7 +113,7 @@ impl LayerManager {
);
let new_layer =
InMemoryLayer::create(conf, timeline_id, tenant_shard_id, start_lsn).await?;
InMemoryLayer::create(conf, Arc::clone(&self.tenant_conf), timeline_id, tenant_shard_id, start_lsn).await?;
let layer = Arc::new(new_layer);
self.layer_map.open_layer = Some(layer.clone());