From 13d663742437672db1ab651a5892dd0cef063f4d Mon Sep 17 00:00:00 2001 From: Riccardo Busetti Date: Wed, 16 Oct 2024 11:53:22 +0200 Subject: [PATCH] Fix --- .../services/buffer/envelope_stack/file_backed.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/relay-server/src/services/buffer/envelope_stack/file_backed.rs b/relay-server/src/services/buffer/envelope_stack/file_backed.rs index 07de0ced0a..8bd4dca761 100644 --- a/relay-server/src/services/buffer/envelope_stack/file_backed.rs +++ b/relay-server/src/services/buffer/envelope_stack/file_backed.rs @@ -5,14 +5,24 @@ use crate::services::buffer::envelope_store::file_backed::{ FileBackedEnvelopeStore, FileBackedEnvelopeStoreError, }; use crate::statsd::{RelayCounters, RelayTimers}; +use hashbrown::HashSet; use std::error::Error; use std::io; use std::io::SeekFrom; -use std::sync::Arc; +use std::sync::{Arc, LazyLock}; use tokio::fs::File; use tokio::io::{AsyncReadExt, AsyncSeekExt, AsyncWriteExt}; use tokio::sync::Mutex; +static ALLOWED_ERROR_KINDS: LazyLock> = LazyLock::new(|| { + let mut error_kinds = HashSet::new(); + error_kinds.insert(io::ErrorKind::InvalidData); + #[cfg(windows)] + error_kinds.insert(io::ErrorKind::Uncategorized); + + error_kinds +}); + /// The version of the envelope stack file format. const CURRENT_FILE_VERSION: u8 = 1; @@ -139,7 +149,7 @@ async fn seek_truncate( ) -> Result { match file.seek(SeekFrom::End(-(from_end as i64))).await { Ok(_) => Ok(true), - Err(error) if error.kind() == io::ErrorKind::InvalidInput => { + Err(error) if ALLOWED_ERROR_KINDS.contains(&error.kind()) => { relay_log::error!(error = &error as &dyn Error, "failed to truncate file",); truncate_file(file, 0).await?; Ok(false)