From 4f582c32791c7b9192b690d3a1d1a0a45a30eedd Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Sun, 16 Nov 2025 21:01:07 +0000 Subject: [PATCH] Fix flaky test --- sync-server/src/utils/rotating_file_writer.rs | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/sync-server/src/utils/rotating_file_writer.rs b/sync-server/src/utils/rotating_file_writer.rs index 9f59c5e5..4d1eda37 100644 --- a/sync-server/src/utils/rotating_file_writer.rs +++ b/sync-server/src/utils/rotating_file_writer.rs @@ -93,6 +93,25 @@ impl RotatingFileWriter { SystemTime::now() >= inner.next_rotation_time } + fn open_or_create_log_file(inner: &mut RotatingFileWriterInner) -> io::Result<()> { + // If we haven't reached rotation time and there's an existing log file, reuse it + if !Self::should_rotate(inner) + && let Some(latest_file) = Self::find_latest_log_file(&inner.directory, &inner.file_prefix) + { + let filepath = inner.directory.join(&latest_file); + let file = OpenOptions::new() + .create(true) + .append(true) + .open(&filepath)?; + + inner.current_file = Some(file); + return Ok(()); + } + + // Otherwise, create a new log file with current timestamp + Self::rotate(inner) + } + fn rotate(inner: &mut RotatingFileWriterInner) -> io::Result<()> { let timestamp = Local::now().format("%Y-%m-%d_%H-%M-%S"); let filename = format!("{}.{}.log", inner.file_prefix, timestamp); @@ -114,7 +133,9 @@ impl Write for RotatingFileWriter { fn write(&mut self, buf: &[u8]) -> io::Result { let mut inner = self.inner.lock().unwrap(); - if inner.current_file.is_none() || Self::should_rotate(&inner) { + if inner.current_file.is_none() { + Self::open_or_create_log_file(&mut inner)?; + } else if Self::should_rotate(&inner) { Self::rotate(&mut inner)?; }