From 34d3d4e312125253ef5d1db78d353117213d9e92 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Tue, 20 Aug 2024 15:24:04 +0000 Subject: [PATCH] add basic test for valueread reuse --- .../inmemory_layer/vectored_dio_read.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pageserver/src/tenant/storage_layer/inmemory_layer/vectored_dio_read.rs b/pageserver/src/tenant/storage_layer/inmemory_layer/vectored_dio_read.rs index 02c6d162b2..2556b6ec33 100644 --- a/pageserver/src/tenant/storage_layer/inmemory_layer/vectored_dio_read.rs +++ b/pageserver/src/tenant/storage_layer/inmemory_layer/vectored_dio_read.rs @@ -26,6 +26,7 @@ pub trait File: Send { #[derive(Debug)] pub struct ValueRead { pos: u32, + // TODO: use tri-state enum to distinguish between not started, started, and finished-with-ok-or-err state: MutexRefCell>>, } @@ -374,6 +375,18 @@ mod tests { } } + #[tokio::test] + #[should_panic] + async fn test_reusing_value_reads_panics() { + let ctx = RequestContext::new(TaskKind::UnitTest, DownloadBehavior::Error); + let file = InMemoryFile::new_random(DIO_CHUNK_SIZE); + let a = file.test_value_read(23, 10); + let value_reads = vec![a.make_value_read()]; + execute(&file, &value_reads, &ctx).await; + // reuse pancis + execute(&file, &value_reads, &ctx).await; + } + struct RecorderFile<'a> { recorded: RefCell>, file: &'a InMemoryFile,