diff --git a/relay-server/benches/benches.rs b/relay-server/benches/benches.rs index f1776bd7ed8..515e3c1f588 100644 --- a/relay-server/benches/benches.rs +++ b/relay-server/benches/benches.rs @@ -61,7 +61,7 @@ fn benchmark_sqlite_envelope_stack(c: &mut Criterion) { let temp_dir = TempDir::new().unwrap(); let db_path = temp_dir.path().join("test.db"); let db = setup_db(&db_path); - let envelope_store = SqliteEnvelopeStore::new(db); + let envelope_store = SqliteEnvelopeStore::new(db.clone()); let runtime = Runtime::new().unwrap(); diff --git a/relay-server/src/services/buffer/envelope_buffer/mod.rs b/relay-server/src/services/buffer/envelope_buffer/mod.rs index 167bd0bf164..64e4efd392b 100644 --- a/relay-server/src/services/buffer/envelope_buffer/mod.rs +++ b/relay-server/src/services/buffer/envelope_buffer/mod.rs @@ -116,13 +116,14 @@ impl EnvelopeBuffer { } } } + +#[allow(dead_code)] impl EnvelopeBuffer { /// Creates an empty buffer. pub async fn new(config: &Config) -> Result { Ok(Self { stacks_by_project: Default::default(), priority_queue: Default::default(), - // TODO: handle error. stack_provider: SqliteStackProvider::new(config).await?, }) } diff --git a/relay-server/src/services/buffer/envelope_stack/sqlite.rs b/relay-server/src/services/buffer/envelope_stack/sqlite.rs index 2353bf7be87..d2098e85d38 100644 --- a/relay-server/src/services/buffer/envelope_stack/sqlite.rs +++ b/relay-server/src/services/buffer/envelope_stack/sqlite.rs @@ -46,7 +46,7 @@ pub struct SqliteEnvelopeStack { } impl SqliteEnvelopeStack { - /// Creates a new empty [`SQLiteEnvelopeStack`]. + /// Creates a new empty [`SqliteEnvelopeStack`]. pub fn new( envelope_store: SqliteEnvelopeStore, disk_batch_size: usize, @@ -242,7 +242,7 @@ mod tests { use super::*; use crate::envelope::{Envelope, Item, ItemType}; use crate::extractors::RequestMeta; - use crate::services::buffer::testutils::setup_db; + use crate::services::buffer::testutils::utils::setup_db; fn request_meta() -> RequestMeta { let dsn = "https://a94ae32be2584e0bbd7a4cbb95971fee:@sentry.io/42" diff --git a/relay-server/src/services/buffer/sqlite_envelope_store.rs b/relay-server/src/services/buffer/sqlite_envelope_store.rs index 9fcf61d14a6..83616bf55af 100644 --- a/relay-server/src/services/buffer/sqlite_envelope_store.rs +++ b/relay-server/src/services/buffer/sqlite_envelope_store.rs @@ -88,6 +88,10 @@ pub enum SqliteEnvelopeStoreError { FileSizeReadFailed(sqlx::Error), } +/// Struct that offers access to a SQLite-based store of [`Envelope`]s. +/// +/// The goal of this struct is to hide away all the complexity of dealing with the database for +/// reading and writing envelopes. #[derive(Debug, Clone)] pub struct SqliteEnvelopeStore { db: Pool, @@ -190,7 +194,7 @@ impl SqliteEnvelopeStore { Ok(()) } - /// Inserts one or more [`InsertEnvelope`] into the database. + /// Inserts one or more envelopes into the database. pub async fn insert_many( &self, envelopes: impl IntoIterator, @@ -414,7 +418,7 @@ mod tests { use super::*; use crate::envelope::{Envelope, Item, ItemType}; use crate::extractors::RequestMeta; - use crate::services::buffer::testutils::setup_db; + use crate::services::buffer::testutils::utils::setup_db; fn request_meta() -> RequestMeta { let dsn = "https://a94ae32be2584e0bbd7a4cbb95971fee:@sentry.io/42" diff --git a/relay-server/src/services/buffer/stack_provider/sqlite.rs b/relay-server/src/services/buffer/stack_provider/sqlite.rs index 895f9f279d3..9716585606a 100644 --- a/relay-server/src/services/buffer/stack_provider/sqlite.rs +++ b/relay-server/src/services/buffer/stack_provider/sqlite.rs @@ -13,6 +13,7 @@ pub struct SqliteStackProvider { max_batches: usize, } +#[warn(dead_code)] impl SqliteStackProvider { /// Creates a new [`SqliteStackProvider`] from the provided path to the SQLite database file. pub async fn new(config: &Config) -> Result { diff --git a/relay-server/src/services/buffer/testutils.rs b/relay-server/src/services/buffer/testutils.rs index ae67da0e17a..0cb2ed75d6c 100644 --- a/relay-server/src/services/buffer/testutils.rs +++ b/relay-server/src/services/buffer/testutils.rs @@ -1,36 +1,39 @@ -use sqlx::sqlite::{SqliteConnectOptions, SqliteJournalMode, SqlitePoolOptions}; -use sqlx::{Pool, Sqlite}; -use tokio::fs::DirBuilder; -use uuid::Uuid; +#[cfg(test)] +pub mod utils { + use sqlx::sqlite::{SqliteConnectOptions, SqliteJournalMode, SqlitePoolOptions}; + use sqlx::{Pool, Sqlite}; + use tokio::fs::DirBuilder; + use uuid::Uuid; -/// Sets up a temporary SQLite database for testing purposes. -pub async fn setup_db(run_migrations: bool) -> Pool { - let path = std::env::temp_dir().join(Uuid::new_v4().to_string()); + /// Sets up a temporary SQLite database for testing purposes. + pub async fn setup_db(run_migrations: bool) -> Pool { + let path = std::env::temp_dir().join(Uuid::new_v4().to_string()); - if let Some(parent) = path.parent() { - if !parent.as_os_str().is_empty() && !parent.exists() { - relay_log::debug!("creating directory for spooling file: {}", parent.display()); - DirBuilder::new() - .recursive(true) - .create(&parent) - .await - .unwrap(); + if let Some(parent) = path.parent() { + if !parent.as_os_str().is_empty() && !parent.exists() { + relay_log::debug!("creating directory for spooling file: {}", parent.display()); + DirBuilder::new() + .recursive(true) + .create(&parent) + .await + .unwrap(); + } } - } - let options = SqliteConnectOptions::new() - .filename(&path) - .journal_mode(SqliteJournalMode::Wal) - .create_if_missing(true); + let options = SqliteConnectOptions::new() + .filename(&path) + .journal_mode(SqliteJournalMode::Wal) + .create_if_missing(true); - let db = SqlitePoolOptions::new() - .connect_with(options) - .await - .unwrap(); + let db = SqlitePoolOptions::new() + .connect_with(options) + .await + .unwrap(); - if run_migrations { - sqlx::migrate!("../migrations").run(&db).await.unwrap(); - } + if run_migrations { + sqlx::migrate!("../migrations").run(&db).await.unwrap(); + } - db + db + } }