diff --git a/pageserver/src/tenant/storage_layer/delta_layer.rs b/pageserver/src/tenant/storage_layer/delta_layer.rs index c081359b6d..f552794acc 100644 --- a/pageserver/src/tenant/storage_layer/delta_layer.rs +++ b/pageserver/src/tenant/storage_layer/delta_layer.rs @@ -62,7 +62,7 @@ use std::collections::VecDeque; use std::fs::File; use std::io::SeekFrom; use std::ops::Range; -use std::os::unix::fs::FileExt; +use std::os::unix::fs::{FileExt, OpenOptionsExt}; use std::str::FromStr; use std::sync::Arc; use tokio::sync::OnceCell; @@ -790,9 +790,15 @@ impl DeltaLayerInner { max_vectored_read_bytes: Option, ctx: &RequestContext, ) -> anyhow::Result { - let file = VirtualFile::open(path, ctx) - .await - .context("open layer file")?; + let file = VirtualFile::open_with_options( + path, + virtual_file::OpenOptions::new() + .read(true) + .custom_flags(nix::libc::O_DIRECT), + ctx, + ) + .await + .context("open layer file")?; let file_id = page_cache::next_file_id(); diff --git a/pageserver/src/tenant/storage_layer/image_layer.rs b/pageserver/src/tenant/storage_layer/image_layer.rs index 3a7968ef46..7d4c74c904 100644 --- a/pageserver/src/tenant/storage_layer/image_layer.rs +++ b/pageserver/src/tenant/storage_layer/image_layer.rs @@ -58,6 +58,7 @@ use std::collections::VecDeque; use std::fs::File; use std::io::SeekFrom; use std::ops::Range; +use std::os::unix::fs::OpenOptionsExt; use std::os::unix::prelude::FileExt; use std::str::FromStr; use tokio::sync::OnceCell; @@ -389,9 +390,15 @@ impl ImageLayerInner { max_vectored_read_bytes: Option, ctx: &RequestContext, ) -> anyhow::Result { - let file = VirtualFile::open(path, ctx) - .await - .context("open layer file")?; + let file = VirtualFile::open_with_options( + path, + virtual_file::OpenOptions::new() + .read(true) + .custom_flags(nix::libc::O_DIRECT), + ctx, + ) + .await + .context("open layer file")?; let file_id = page_cache::next_file_id(); let block_reader = FileBlockReader::new(&file, file_id); let summary_blk = block_reader