From 3a8b630f90702b26877c67523527cd504b0f7968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arpad=20M=C3=BCller?= Date: Mon, 4 Sep 2023 18:04:36 +0200 Subject: [PATCH] Make VirtualFile::sync_all async --- pageserver/src/tenant/par_fsync.rs | 5 ++--- pageserver/src/tenant/storage_layer/delta_layer.rs | 2 +- pageserver/src/tenant/storage_layer/image_layer.rs | 2 +- pageserver/src/virtual_file.rs | 4 +++- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/pageserver/src/tenant/par_fsync.rs b/pageserver/src/tenant/par_fsync.rs index 3cbcfe8774..705b42aff7 100644 --- a/pageserver/src/tenant/par_fsync.rs +++ b/pageserver/src/tenant/par_fsync.rs @@ -4,10 +4,9 @@ use std::{ sync::atomic::{AtomicUsize, Ordering}, }; -use crate::virtual_file::VirtualFile; - fn fsync_path(path: &Path) -> io::Result<()> { - let file = VirtualFile::open(path)?; + // TODO use VirtualFile::fsync_all once we fully go async. + let file = std::fs::File::open(path)?; file.sync_all() } diff --git a/pageserver/src/tenant/storage_layer/delta_layer.rs b/pageserver/src/tenant/storage_layer/delta_layer.rs index b6fbf98962..7305ec1486 100644 --- a/pageserver/src/tenant/storage_layer/delta_layer.rs +++ b/pageserver/src/tenant/storage_layer/delta_layer.rs @@ -732,7 +732,7 @@ impl DeltaLayerWriterInner { }; // fsync the file - file.sync_all()?; + file.sync_all().await?; // Rename the file to its final name // // Note: This overwrites any existing file. There shouldn't be any. diff --git a/pageserver/src/tenant/storage_layer/image_layer.rs b/pageserver/src/tenant/storage_layer/image_layer.rs index 8f7fb8175c..2d0fcf0b23 100644 --- a/pageserver/src/tenant/storage_layer/image_layer.rs +++ b/pageserver/src/tenant/storage_layer/image_layer.rs @@ -645,7 +645,7 @@ impl ImageLayerWriterInner { }; // fsync the file - file.sync_all()?; + file.sync_all().await?; // Rename the file to its final name // diff --git a/pageserver/src/virtual_file.rs b/pageserver/src/virtual_file.rs index c4241c4270..54f5a89c5b 100644 --- a/pageserver/src/virtual_file.rs +++ b/pageserver/src/virtual_file.rs @@ -304,6 +304,7 @@ impl VirtualFile { .await .map_err(CrashsafeOverwriteError::WriteContents)?; file.sync_all() + .await .map_err(CrashsafeOverwriteError::SyncTempfile)?; drop(file); // before the rename, that's important! // renames are atomic @@ -319,12 +320,13 @@ impl VirtualFile { .map_err(CrashsafeOverwriteError::OpenFinalPathParentDir)?; final_parent_dirfd .sync_all() + .await .map_err(CrashsafeOverwriteError::SyncFinalPathParentDir)?; Ok(()) } /// Call File::sync_all() on the underlying File. - pub fn sync_all(&self) -> Result<(), Error> { + pub async fn sync_all(&self) -> Result<(), Error> { self.with_file("fsync", |file| file.sync_all())? }