Skip to content

Commit

Permalink
Improve
Browse files Browse the repository at this point in the history
  • Loading branch information
iambriccardo committed Jul 30, 2024
1 parent 1d57809 commit 07ec7e9
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 34 deletions.
2 changes: 1 addition & 1 deletion relay-server/benches/benches.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down
3 changes: 2 additions & 1 deletion relay-server/src/services/buffer/envelope_buffer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,13 +116,14 @@ impl EnvelopeBuffer<MemoryStackProvider> {
}
}
}

#[allow(dead_code)]
impl EnvelopeBuffer<SqliteStackProvider> {
/// Creates an empty buffer.
pub async fn new(config: &Config) -> Result<Self, SqliteEnvelopeStoreError> {
Ok(Self {
stacks_by_project: Default::default(),
priority_queue: Default::default(),
// TODO: handle error.
stack_provider: SqliteStackProvider::new(config).await?,
})
}
Expand Down
4 changes: 2 additions & 2 deletions relay-server/src/services/buffer/envelope_stack/sqlite.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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"
Expand Down
8 changes: 6 additions & 2 deletions relay-server/src/services/buffer/sqlite_envelope_store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Sqlite>,
Expand Down Expand Up @@ -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<Item = InsertEnvelope>,
Expand Down Expand Up @@ -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"
Expand Down
1 change: 1 addition & 0 deletions relay-server/src/services/buffer/stack_provider/sqlite.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Self, SqliteEnvelopeStoreError> {
Expand Down
59 changes: 31 additions & 28 deletions relay-server/src/services/buffer/testutils.rs
Original file line number Diff line number Diff line change
@@ -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<Sqlite> {
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<Sqlite> {
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
}
}

0 comments on commit 07ec7e9

Please sign in to comment.