diff --git a/libs/pageserver_api/src/key.rs b/libs/pageserver_api/src/key.rs index 37dff6fe46..87422405b4 100644 --- a/libs/pageserver_api/src/key.rs +++ b/libs/pageserver_api/src/key.rs @@ -770,9 +770,14 @@ impl Key { && self.field6 == 1 } +<<<<<<< HEAD #[inline(always)] pub fn is_aux_file_key(&self) -> bool { self.field1 == AUX_KEY_PREFIX +======= + pub fn is_aux_file_key(&self) -> bool { + self.field1 = AUX_KEY_PREFIX +>>>>>>> a96135dde (Do not import AUX files) } /// Guaranteed to return `Ok()` if [`Self::is_rel_block_key`] returns `true` for `key`. diff --git a/pageserver/src/import_datadir.rs b/pageserver/src/import_datadir.rs index f7887c1c05..c061714010 100644 --- a/pageserver/src/import_datadir.rs +++ b/pageserver/src/import_datadir.rs @@ -76,7 +76,7 @@ pub async fn import_timeline_from_postgres_datadir( let mut file = tokio::fs::File::open(absolute_path).await?; let len = metadata.len() as usize; if let Some(control_file) = - import_file(&mut modification, relative_path, &mut file, len, false, ctx).await? + import_file(&mut modification, relative_path, &mut file, len, ctx).await? { pg_control = Some(control_file); } @@ -370,15 +370,8 @@ pub async fn import_basebackup_from_tar( match header.entry_type() { tokio_tar::EntryType::Regular => { - if let Some(res) = import_file( - &mut modification, - file_path.as_ref(), - &mut entry, - len, - false, - ctx, - ) - .await? + if let Some(res) = + import_file(&mut modification, file_path.as_ref(), &mut entry, len, ctx).await? { // We found the pg_control file. pg_control = Some(res); @@ -508,7 +501,6 @@ async fn import_file( file_path: &Path, reader: &mut (impl AsyncRead + Send + Sync + Unpin), len: usize, - import_aux_files: bool, ctx: &RequestContext, ) -> Result> { let file_name = match file_path.file_name() { @@ -642,16 +634,6 @@ async fn import_file( // TODO Backups exported from neon won't have pg_tblspc, but we will need // this to import arbitrary postgres databases. bail!("Importing pg_tblspc is not implemented"); - } else if import_aux_files - && (file_path.starts_with("pg_logical/") - || file_path.starts_with("pg_replslot/") - || file_path.starts_with("pg_stat/")) - { - let bytes = read_all_bytes(reader).await?; - modification - .put_file(file_path.to_str().unwrap(), &bytes, ctx) - .await?; - debug!("imported aux file \"{}\"", file_path.display()); } else { debug!( "ignoring unrecognized file \"{}\" in tar archive", diff --git a/pageserver/src/tenant/storage_layer/delta_layer.rs b/pageserver/src/tenant/storage_layer/delta_layer.rs index fec8a0a16c..a13a77e26b 100644 --- a/pageserver/src/tenant/storage_layer/delta_layer.rs +++ b/pageserver/src/tenant/storage_layer/delta_layer.rs @@ -52,7 +52,7 @@ use camino::{Utf8Path, Utf8PathBuf}; use futures::StreamExt; use itertools::Itertools; use pageserver_api::config::MaxVectoredReadBytes; -use pageserver_api::key::DBDIR_KEY; +use pageserver_api::key::{AUX_FILES_KEY, DBDIR_KEY}; use pageserver_api::key::{Key, KEY_SIZE}; use pageserver_api::keyspace::KeySpace; use pageserver_api::models::ImageCompressionAlgorithm; @@ -969,7 +969,11 @@ impl DeltaLayerInner { .as_slice() .iter() .filter_map(|(_, blob_meta)| { - if blob_meta.key.is_rel_dir_key() || blob_meta.key == DBDIR_KEY { + if blob_meta.key.is_rel_dir_key() + || blob_meta.key == DBDIR_KEY + || blob_meta.key == AUX_FILES_KEY + || blob_meta.key.is_aux_file_key() + { // The size of values for these keys is unbounded and can // grow very large in pathological cases. None diff --git a/pageserver/src/tenant/storage_layer/image_layer.rs b/pageserver/src/tenant/storage_layer/image_layer.rs index 834d1931d0..84b6e68d39 100644 --- a/pageserver/src/tenant/storage_layer/image_layer.rs +++ b/pageserver/src/tenant/storage_layer/image_layer.rs @@ -49,7 +49,7 @@ use camino::{Utf8Path, Utf8PathBuf}; use hex; use itertools::Itertools; use pageserver_api::config::MaxVectoredReadBytes; -use pageserver_api::key::DBDIR_KEY; +use pageserver_api::key::{AUX_FILES_KEY, DBDIR_KEY}; use pageserver_api::key::{Key, KEY_SIZE}; use pageserver_api::keyspace::KeySpace; use pageserver_api::shard::{ShardIdentity, TenantShardId}; @@ -591,7 +591,11 @@ impl ImageLayerInner { .as_slice() .iter() .filter_map(|(_, blob_meta)| { - if blob_meta.key.is_rel_dir_key() || blob_meta.key == DBDIR_KEY { + if blob_meta.key.is_rel_dir_key() + || blob_meta.key == DBDIR_KEY + || blob_meta.key == AUX_FILES_KEY + || blob_meta.key.is_aux_file_key() + { // The size of values for these keys is unbounded and can // grow very large in pathological cases. None diff --git a/pageserver/src/tenant/timeline.rs b/pageserver/src/tenant/timeline.rs index 1414bef0a5..713dc5277d 100644 --- a/pageserver/src/tenant/timeline.rs +++ b/pageserver/src/tenant/timeline.rs @@ -4239,10 +4239,12 @@ impl Timeline { // Normal path: we have written some data into the new image layer for this // partition, so flush it to disk. let (desc, path) = image_layer_writer.finish(ctx).await?; + let file_size = desc.file_size; let image_layer = Layer::finish_creating(self.conf, self, desc, &path)?; info!( - "created image layer for metadata {}", - image_layer.local_path() + "created image layer for metadata {} size {}", + image_layer.local_path(), + file_size, ); Ok(ImageLayerCreationOutcome { image: Some(image_layer),