diff --git a/repro-problem/Cargo.toml b/repro-problem/Cargo.toml index b47a6cb039..146f3f5f3f 100644 --- a/repro-problem/Cargo.toml +++ b/repro-problem/Cargo.toml @@ -8,3 +8,9 @@ license.workspace = true [dependencies] tokio-epoll-uring = { path = "../../tokio-epoll-uring/tokio-epoll-uring" } +tokio.workspace = true +camino.workspace = true +utils = {path = "../libs/utils" } +once_cell.workspace = true +tracing.workspace = true +nix.workspace = true diff --git a/repro-problem/src/main.rs b/repro-problem/src/main.rs index c68255868a..ee665c98c3 100644 --- a/repro-problem/src/main.rs +++ b/repro-problem/src/main.rs @@ -1 +1,11 @@ +use virtual_file::VirtualFile; + mod virtual_file; + +#[tokio::main] +async fn main() { + + let file = VirtualFile::open(camino::Utf8Path::new("foo")).await.unwrap(); + file.read_exact_at().await; + +} diff --git a/repro-problem/src/virtual_file.rs b/repro-problem/src/virtual_file.rs index 4f233fca9f..52ac6ffd75 100644 --- a/repro-problem/src/virtual_file.rs +++ b/repro-problem/src/virtual_file.rs @@ -10,7 +10,6 @@ //! This is similar to PostgreSQL's virtual file descriptor facility in //! src/backend/storage/file/fd.c //! -use crate::metrics::{StorageIoOperation, STORAGE_IO_SIZE, STORAGE_IO_TIME_METRIC}; use crate::page_cache::PageWriteGuard; use camino::{Utf8Path, Utf8PathBuf}; use once_cell::sync::OnceCell; @@ -159,9 +158,7 @@ impl OpenFiles { if let Some(old_file) = slot_guard.file.take() { // the normal path of dropping VirtualFile uses `Close`, use `CloseByReplace` here to // distinguish the two. - STORAGE_IO_TIME_METRIC - .get(StorageIoOperation::CloseByReplace) - .observe_closure_duration(|| drop(old_file)); + drop(old_file); } // Prepare the slot for reuse and return it @@ -259,12 +256,7 @@ impl MaybeFatalIo for std::io::Result { /// where "support" means that we measure wall clock time. macro_rules! observe_duration { ($op:expr, $($body:tt)*) => {{ - let instant = Instant::now(); let result = $($body)*; - let elapsed = instant.elapsed().as_secs_f64(); - STORAGE_IO_TIME_METRIC - .get($op) - .observe(elapsed); result }} } @@ -680,11 +672,6 @@ impl VirtualFile { let result = with_file!(self, StorageIoOperation::Write, |file_guard| { file_guard.with_std_file(|std_file| std_file.write_at(buf, offset)) }); - if let Ok(size) = result { - STORAGE_IO_SIZE - .with_label_values(&["write", &self.tenant_id, &self.timeline_id]) - .add(size as i64); - } result } } @@ -765,9 +752,7 @@ impl Drop for VirtualFile { // there is also the `CloseByReplace` operation for closes done on eviction for // comparison. if let Some(fd) = slot_guard.file.take() { - STORAGE_IO_TIME_METRIC - .get(StorageIoOperation::Close) - .observe_closure_duration(|| drop(fd)); + drop(fd); } } } @@ -821,7 +806,6 @@ pub fn init(num_slots: usize) { if OPEN_FILES.set(OpenFiles::new(num_slots)).is_err() { panic!("virtual_file::init called twice"); } - crate::metrics::virtual_file_descriptor_cache::SIZE_MAX.set(num_slots as u64); } const TEST_MAX_FILE_DESCRIPTORS: usize = 10;