From 4c30ae8ba32f45d90d870dbf926965237ddd3c7f Mon Sep 17 00:00:00 2001 From: Anastasia Lubennikova Date: Wed, 18 May 2022 22:29:13 +0300 Subject: [PATCH] Add random string as a part of tempfile name --- .../src/layered_repository/delta_layer.rs | 12 ++++++++++-- .../src/layered_repository/image_layer.rs | 19 +++++++++++-------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/pageserver/src/layered_repository/delta_layer.rs b/pageserver/src/layered_repository/delta_layer.rs index 3484e6bd0f..ed342c0cca 100644 --- a/pageserver/src/layered_repository/delta_layer.rs +++ b/pageserver/src/layered_repository/delta_layer.rs @@ -37,6 +37,7 @@ use crate::virtual_file::VirtualFile; use crate::walrecord; use crate::{DELTA_FILE_MAGIC, STORAGE_FORMAT_VERSION}; use anyhow::{bail, ensure, Context, Result}; +use rand::{distributions::Alphanumeric, Rng}; use serde::{Deserialize, Serialize}; use std::fs; use std::io::{BufWriter, Write}; @@ -427,11 +428,18 @@ impl DeltaLayer { key_start: Key, lsn_range: &Range, ) -> PathBuf { + let rand_string: String = rand::thread_rng() + .sample_iter(&Alphanumeric) + .take(8) + .map(char::from) + .collect(); + conf.timeline_path(&timelineid, &tenantid).join(format!( - "{}-XXX__{:016X}-{:016X}.temp", + "{}-XXX__{:016X}-{:016X}.{}.temp", key_start, u64::from(lsn_range.start), - u64::from(lsn_range.end) + u64::from(lsn_range.end), + rand_string )) } diff --git a/pageserver/src/layered_repository/image_layer.rs b/pageserver/src/layered_repository/image_layer.rs index 5e97366da9..905023ecf9 100644 --- a/pageserver/src/layered_repository/image_layer.rs +++ b/pageserver/src/layered_repository/image_layer.rs @@ -34,6 +34,7 @@ use crate::{IMAGE_FILE_MAGIC, STORAGE_FORMAT_VERSION}; use anyhow::{bail, ensure, Context, Result}; use bytes::Bytes; use hex; +use rand::{distributions::Alphanumeric, Rng}; use serde::{Deserialize, Serialize}; use std::fs; use std::io::Write; @@ -242,17 +243,19 @@ impl ImageLayer { } fn temp_path_for( - path_or_conf: &PathOrConf, + conf: &PageServerConf, timelineid: ZTimelineId, tenantid: ZTenantId, fname: &ImageFileName, ) -> PathBuf { - match path_or_conf { - PathOrConf::Path(path) => path.to_path_buf(), - PathOrConf::Conf(conf) => conf - .timeline_path(&timelineid, &tenantid) - .join(format!("{}.temp", fname)), - } + let rand_string: String = rand::thread_rng() + .sample_iter(&Alphanumeric) + .take(8) + .map(char::from) + .collect(); + + conf.timeline_path(&timelineid, &tenantid) + .join(format!("{}.{}.temp", fname, rand_string)) } /// @@ -433,7 +436,7 @@ impl ImageLayerWriter { // Create the file initially with a temporary filename. // We'll atomically rename it to the final name when we're done. let path = ImageLayer::temp_path_for( - &PathOrConf::Conf(conf), + conf, timelineid, tenantid, &ImageFileName {