From 88baa4fff7e1ef3b4fd743993b9495be9a07fa07 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Fri, 9 Jun 2023 16:40:15 +0200 Subject: [PATCH] EphemeralFile: assert no reuse of file ids + use create_new Just for some robustness in depth. To my knowledge, the asserted conditions have never occurred in real life. --- pageserver/src/tenant/ephemeral_file.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pageserver/src/tenant/ephemeral_file.rs b/pageserver/src/tenant/ephemeral_file.rs index 4379438896..81faf601ae 100644 --- a/pageserver/src/tenant/ephemeral_file.rs +++ b/pageserver/src/tenant/ephemeral_file.rs @@ -52,7 +52,10 @@ impl EphemeralFile { ) -> Result { let mut l = EPHEMERAL_FILES.write().unwrap(); let file_id = l.next_file_id; - l.next_file_id += 1; + l.next_file_id = l + .next_file_id + .checked_add(1) + .expect("next_file_id is u64, expecting it to not overflow"); let filename = conf .timeline_path(&timeline_id, &tenant_id) @@ -60,7 +63,12 @@ impl EphemeralFile { let file = VirtualFile::open_with_options( &filename, - OpenOptions::new().read(true).write(true).create(true), + OpenOptions::new() + .read(true) + .write(true) + // The next_file_id doesn't overlfow, so technically, `create_new` is not needed. + // But it's cheap, so why not. + .create_new(true), )?; let file_rc = Arc::new(file); l.files.insert(file_id, file_rc.clone());