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,