Do not import AUX files

This commit is contained in:
Konstantin Knizhnik
2024-10-11 09:43:56 +03:00
parent b5802abab9
commit 0841fb9b7b
5 changed files with 24 additions and 27 deletions

View File

@@ -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`.

View File

@@ -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<Option<ControlFileData>> {
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",

View File

@@ -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

View File

@@ -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

View File

@@ -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),