From 9be96380f92b56df40273bd33b69ede51e7fc963 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 5 Jul 2024 10:02:56 +0100 Subject: [PATCH 1/5] refactor: [#950] decouple database driver enum Use a different enum for configuration and domain. --- packages/configuration/src/lib.rs | 1 + packages/configuration/src/v2/database.rs | 29 +++++++++++++++-------- packages/primitives/src/lib.rs | 3 --- src/core/mod.rs | 10 ++++++-- 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/packages/configuration/src/lib.rs b/packages/configuration/src/lib.rs index 32831409..5e839b7b 100644 --- a/packages/configuration/src/lib.rs +++ b/packages/configuration/src/lib.rs @@ -41,6 +41,7 @@ pub type HttpApi = v2::tracker_api::HttpApi; pub type HttpTracker = v2::http_tracker::HttpTracker; pub type UdpTracker = v2::udp_tracker::UdpTracker; pub type Database = v2::database::Database; +pub type Driver = v2::database::Driver; pub type Threshold = v2::logging::Threshold; pub type AccessTokens = HashMap; diff --git a/packages/configuration/src/v2/database.rs b/packages/configuration/src/v2/database.rs index 932db552..ef462556 100644 --- a/packages/configuration/src/v2/database.rs +++ b/packages/configuration/src/v2/database.rs @@ -1,5 +1,4 @@ use serde::{Deserialize, Serialize}; -use torrust_tracker_primitives::DatabaseDriver; use url::Url; #[allow(clippy::struct_excessive_bools)] @@ -8,7 +7,7 @@ pub struct Database { // Database configuration /// Database driver. Possible values are: `Sqlite3`, and `MySQL`. #[serde(default = "Database::default_driver")] - pub driver: DatabaseDriver, + pub driver: Driver, /// Database connection string. The format depends on the database driver. /// For `Sqlite3`, the format is `path/to/database.db`, for example: @@ -29,8 +28,8 @@ impl Default for Database { } impl Database { - fn default_driver() -> DatabaseDriver { - DatabaseDriver::Sqlite3 + fn default_driver() -> Driver { + Driver::Sqlite3 } fn default_path() -> String { @@ -44,10 +43,10 @@ impl Database { /// Will panic if the database path for `MySQL` is not a valid URL. pub fn mask_secrets(&mut self) { match self.driver { - DatabaseDriver::Sqlite3 => { + Driver::Sqlite3 => { // Nothing to mask } - DatabaseDriver::MySQL => { + Driver::MySQL => { let mut url = Url::parse(&self.path).expect("path for MySQL driver should be a valid URL"); url.set_password(Some("***")).expect("url password should be changed"); self.path = url.to_string(); @@ -56,17 +55,27 @@ impl Database { } } +/// The database management system used by the tracker. +#[derive(Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Debug, Hash, Clone)] +pub enum Driver { + // todo: + // - Rename serialized values to lowercase: `sqlite3` and `mysql`. + // - Add serde default values. + /// The `Sqlite3` database driver. + Sqlite3, + /// The `MySQL` database driver. + MySQL, +} + #[cfg(test)] mod tests { - use torrust_tracker_primitives::DatabaseDriver; - - use super::Database; + use super::{Database, Driver}; #[test] fn it_should_allow_masking_the_mysql_user_password() { let mut database = Database { - driver: DatabaseDriver::MySQL, + driver: Driver::MySQL, path: "mysql://root:password@localhost:3306/torrust".to_string(), }; diff --git a/packages/primitives/src/lib.rs b/packages/primitives/src/lib.rs index 7ad1d35b..9bd3bad5 100644 --- a/packages/primitives/src/lib.rs +++ b/packages/primitives/src/lib.rs @@ -52,9 +52,6 @@ pub struct NumberOfBytes(pub i64); /// For more information about persistence. #[derive(Serialize, Deserialize, PartialEq, Eq, Debug, derive_more::Display, Clone)] pub enum DatabaseDriver { - // TODO: - // - Move to the database crate once that gets its own crate. - // - Rename serialized values to lowercase: `sqlite3` and `mysql`. /// The Sqlite3 database driver. Sqlite3, /// The `MySQL` database driver. diff --git a/src/core/mod.rs b/src/core/mod.rs index 06b1aa0f..57cf56bc 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -456,11 +456,12 @@ use std::time::Duration; use derive_more::Constructor; use tokio::sync::mpsc::error::SendError; use torrust_tracker_clock::clock::Time; +use torrust_tracker_configuration::v2::database; use torrust_tracker_configuration::{AnnouncePolicy, Core, TORRENT_PEERS_LIMIT}; use torrust_tracker_primitives::info_hash::InfoHash; -use torrust_tracker_primitives::peer; use torrust_tracker_primitives::swarm_metadata::SwarmMetadata; use torrust_tracker_primitives::torrent_metrics::TorrentsMetrics; +use torrust_tracker_primitives::{peer, DatabaseDriver}; use torrust_tracker_torrent_repository::entry::EntrySync; use torrust_tracker_torrent_repository::repository::Repository; use tracing::debug; @@ -564,7 +565,12 @@ impl Tracker { stats_event_sender: Option>, stats_repository: statistics::Repo, ) -> Result { - let database = Arc::new(databases::driver::build(&config.database.driver, &config.database.path)?); + let driver = match config.database.driver { + database::Driver::Sqlite3 => DatabaseDriver::Sqlite3, + database::Driver::MySQL => DatabaseDriver::MySQL, + }; + + let database = Arc::new(databases::driver::build(&driver, &config.database.path)?); Ok(Tracker { config: config.clone(), From 954295aa09831c59b2dfe6206c20acdb0229543e Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 5 Jul 2024 10:12:29 +0100 Subject: [PATCH 2/5] refactor: [#950] move DatabaseDriver to databases mod --- packages/primitives/src/lib.rs | 16 ---------------- src/core/databases/driver.rs | 23 ++++++++++++++++++++--- src/core/databases/error.rs | 3 ++- src/core/databases/mysql.rs | 3 ++- src/core/databases/sqlite.rs | 3 ++- src/core/mod.rs | 3 ++- 6 files changed, 28 insertions(+), 23 deletions(-) diff --git a/packages/primitives/src/lib.rs b/packages/primitives/src/lib.rs index 9bd3bad5..d6f29c2b 100644 --- a/packages/primitives/src/lib.rs +++ b/packages/primitives/src/lib.rs @@ -42,20 +42,4 @@ pub enum IPVersion { #[derive(Hash, Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] pub struct NumberOfBytes(pub i64); -/// The database management system used by the tracker. -/// -/// Refer to: -/// -/// - [Torrust Tracker Configuration](https://docs.rs/torrust-tracker-configuration). -/// - [Torrust Tracker](https://docs.rs/torrust-tracker). -/// -/// For more information about persistence. -#[derive(Serialize, Deserialize, PartialEq, Eq, Debug, derive_more::Display, Clone)] -pub enum DatabaseDriver { - /// The Sqlite3 database driver. - Sqlite3, - /// The `MySQL` database driver. - MySQL, -} - pub type PersistentTorrents = BTreeMap; diff --git a/src/core/databases/driver.rs b/src/core/databases/driver.rs index 99d96c6b..f6c7aeb0 100644 --- a/src/core/databases/driver.rs +++ b/src/core/databases/driver.rs @@ -2,20 +2,37 @@ //! //! See [`databases::driver::build`](crate::core::databases::driver::build) //! function for more information. -use torrust_tracker_primitives::DatabaseDriver; +use serde::{Deserialize, Serialize}; use super::error::Error; use super::mysql::Mysql; use super::sqlite::Sqlite; use super::{Builder, Database}; +/// The database management system used by the tracker. +/// +/// Refer to: +/// +/// - [Torrust Tracker Configuration](https://docs.rs/torrust-tracker-configuration). +/// - [Torrust Tracker](https://docs.rs/torrust-tracker). +/// +/// For more information about persistence. +#[allow(clippy::module_name_repetitions)] +#[derive(Serialize, Deserialize, PartialEq, Eq, Debug, derive_more::Display, Clone)] +pub enum DatabaseDriver { + /// The Sqlite3 database driver. + Sqlite3, + /// The `MySQL` database driver. + MySQL, +} + /// It builds a new database driver. /// /// Example for `SQLite3`: /// /// ```rust,no_run /// use torrust_tracker::core::databases; -/// use torrust_tracker_primitives::DatabaseDriver; +/// use torrust_tracker::core::databases::driver::DatabaseDriver; /// /// let db_driver = DatabaseDriver::Sqlite3; /// let db_path = "./storage/tracker/lib/database/sqlite3.db".to_string(); @@ -26,7 +43,7 @@ use super::{Builder, Database}; /// /// ```rust,no_run /// use torrust_tracker::core::databases; -/// use torrust_tracker_primitives::DatabaseDriver; +/// use torrust_tracker::core::databases::driver::DatabaseDriver; /// /// let db_driver = DatabaseDriver::MySQL; /// let db_path = "mysql://db_user:db_user_secret_password@mysql:3306/torrust_tracker".to_string(); diff --git a/src/core/databases/error.rs b/src/core/databases/error.rs index a5179e3a..315d1343 100644 --- a/src/core/databases/error.rs +++ b/src/core/databases/error.rs @@ -6,7 +6,8 @@ use std::sync::Arc; use r2d2_mysql::mysql::UrlError; use torrust_tracker_located_error::{DynError, Located, LocatedError}; -use torrust_tracker_primitives::DatabaseDriver; + +use super::driver::DatabaseDriver; #[derive(thiserror::Error, Debug, Clone)] pub enum Error { diff --git a/src/core/databases/mysql.rs b/src/core/databases/mysql.rs index ebb002d3..e16929a0 100644 --- a/src/core/databases/mysql.rs +++ b/src/core/databases/mysql.rs @@ -8,9 +8,10 @@ use r2d2_mysql::mysql::prelude::Queryable; use r2d2_mysql::mysql::{params, Opts, OptsBuilder}; use r2d2_mysql::MySqlConnectionManager; use torrust_tracker_primitives::info_hash::InfoHash; -use torrust_tracker_primitives::{DatabaseDriver, PersistentTorrents}; +use torrust_tracker_primitives::PersistentTorrents; use tracing::debug; +use super::driver::DatabaseDriver; use super::{Database, Error}; use crate::core::auth::{self, Key}; use crate::shared::bit_torrent::common::AUTH_KEY_LENGTH; diff --git a/src/core/databases/sqlite.rs b/src/core/databases/sqlite.rs index 53a01f80..93bf1f9a 100644 --- a/src/core/databases/sqlite.rs +++ b/src/core/databases/sqlite.rs @@ -6,8 +6,9 @@ use async_trait::async_trait; use r2d2::Pool; use r2d2_sqlite::SqliteConnectionManager; use torrust_tracker_primitives::info_hash::InfoHash; -use torrust_tracker_primitives::{DatabaseDriver, DurationSinceUnixEpoch, PersistentTorrents}; +use torrust_tracker_primitives::{DurationSinceUnixEpoch, PersistentTorrents}; +use super::driver::DatabaseDriver; use super::{Database, Error}; use crate::core::auth::{self, Key}; diff --git a/src/core/mod.rs b/src/core/mod.rs index 57cf56bc..c70d81fe 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -453,15 +453,16 @@ use std::panic::Location; use std::sync::Arc; use std::time::Duration; +use databases::driver::DatabaseDriver; use derive_more::Constructor; use tokio::sync::mpsc::error::SendError; use torrust_tracker_clock::clock::Time; use torrust_tracker_configuration::v2::database; use torrust_tracker_configuration::{AnnouncePolicy, Core, TORRENT_PEERS_LIMIT}; use torrust_tracker_primitives::info_hash::InfoHash; +use torrust_tracker_primitives::peer; use torrust_tracker_primitives::swarm_metadata::SwarmMetadata; use torrust_tracker_primitives::torrent_metrics::TorrentsMetrics; -use torrust_tracker_primitives::{peer, DatabaseDriver}; use torrust_tracker_torrent_repository::entry::EntrySync; use torrust_tracker_torrent_repository::repository::Repository; use tracing::debug; From d970bb873d972903dbe06dbbeb9341e6dc78201f Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 5 Jul 2024 10:15:00 +0100 Subject: [PATCH 3/5] refactor: [#950] rename DatabaseDriver to Driver --- src/core/databases/driver.rs | 17 ++++++++--------- src/core/databases/error.rs | 26 +++++++++++++------------- src/core/databases/mysql.rs | 4 ++-- src/core/databases/sqlite.rs | 6 +++--- src/core/mod.rs | 6 +++--- 5 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/core/databases/driver.rs b/src/core/databases/driver.rs index f6c7aeb0..a456a265 100644 --- a/src/core/databases/driver.rs +++ b/src/core/databases/driver.rs @@ -17,9 +17,8 @@ use super::{Builder, Database}; /// - [Torrust Tracker](https://docs.rs/torrust-tracker). /// /// For more information about persistence. -#[allow(clippy::module_name_repetitions)] #[derive(Serialize, Deserialize, PartialEq, Eq, Debug, derive_more::Display, Clone)] -pub enum DatabaseDriver { +pub enum Driver { /// The Sqlite3 database driver. Sqlite3, /// The `MySQL` database driver. @@ -32,9 +31,9 @@ pub enum DatabaseDriver { /// /// ```rust,no_run /// use torrust_tracker::core::databases; -/// use torrust_tracker::core::databases::driver::DatabaseDriver; +/// use torrust_tracker::core::databases::driver::Driver; /// -/// let db_driver = DatabaseDriver::Sqlite3; +/// let db_driver = Driver::Sqlite3; /// let db_path = "./storage/tracker/lib/database/sqlite3.db".to_string(); /// let database = databases::driver::build(&db_driver, &db_path); /// ``` @@ -43,9 +42,9 @@ pub enum DatabaseDriver { /// /// ```rust,no_run /// use torrust_tracker::core::databases; -/// use torrust_tracker::core::databases::driver::DatabaseDriver; +/// use torrust_tracker::core::databases::driver::Driver; /// -/// let db_driver = DatabaseDriver::MySQL; +/// let db_driver = Driver::MySQL; /// let db_path = "mysql://db_user:db_user_secret_password@mysql:3306/torrust_tracker".to_string(); /// let database = databases::driver::build(&db_driver, &db_path); /// ``` @@ -62,10 +61,10 @@ pub enum DatabaseDriver { /// # Panics /// /// This function will panic if unable to create database tables. -pub fn build(driver: &DatabaseDriver, db_path: &str) -> Result, Error> { +pub fn build(driver: &Driver, db_path: &str) -> Result, Error> { let database = match driver { - DatabaseDriver::Sqlite3 => Builder::::build(db_path), - DatabaseDriver::MySQL => Builder::::build(db_path), + Driver::Sqlite3 => Builder::::build(db_path), + Driver::MySQL => Builder::::build(db_path), }?; database.create_database_tables().expect("Could not create database tables."); diff --git a/src/core/databases/error.rs b/src/core/databases/error.rs index 315d1343..4d64baf4 100644 --- a/src/core/databases/error.rs +++ b/src/core/databases/error.rs @@ -7,7 +7,7 @@ use std::sync::Arc; use r2d2_mysql::mysql::UrlError; use torrust_tracker_located_error::{DynError, Located, LocatedError}; -use super::driver::DatabaseDriver; +use super::driver::Driver; #[derive(thiserror::Error, Debug, Clone)] pub enum Error { @@ -15,21 +15,21 @@ pub enum Error { #[error("The {driver} query unexpectedly returned nothing: {source}")] QueryReturnedNoRows { source: LocatedError<'static, dyn std::error::Error + Send + Sync>, - driver: DatabaseDriver, + driver: Driver, }, /// The query was malformed. #[error("The {driver} query was malformed: {source}")] InvalidQuery { source: LocatedError<'static, dyn std::error::Error + Send + Sync>, - driver: DatabaseDriver, + driver: Driver, }, /// Unable to insert a record into the database #[error("Unable to insert record into {driver} database, {location}")] InsertFailed { location: &'static Location<'static>, - driver: DatabaseDriver, + driver: Driver, }, /// Unable to delete a record into the database @@ -37,21 +37,21 @@ pub enum Error { DeleteFailed { location: &'static Location<'static>, error_code: usize, - driver: DatabaseDriver, + driver: Driver, }, /// Unable to connect to the database #[error("Failed to connect to {driver} database: {source}")] ConnectionError { source: LocatedError<'static, UrlError>, - driver: DatabaseDriver, + driver: Driver, }, /// Unable to create a connection pool #[error("Failed to create r2d2 {driver} connection pool: {source}")] ConnectionPool { source: LocatedError<'static, r2d2::Error>, - driver: DatabaseDriver, + driver: Driver, }, } @@ -61,11 +61,11 @@ impl From for Error { match err { r2d2_sqlite::rusqlite::Error::QueryReturnedNoRows => Error::QueryReturnedNoRows { source: (Arc::new(err) as DynError).into(), - driver: DatabaseDriver::Sqlite3, + driver: Driver::Sqlite3, }, _ => Error::InvalidQuery { source: (Arc::new(err) as DynError).into(), - driver: DatabaseDriver::Sqlite3, + driver: Driver::Sqlite3, }, } } @@ -77,7 +77,7 @@ impl From for Error { let e: DynError = Arc::new(err); Error::InvalidQuery { source: e.into(), - driver: DatabaseDriver::MySQL, + driver: Driver::MySQL, } } } @@ -87,14 +87,14 @@ impl From for Error { fn from(err: UrlError) -> Self { Self::ConnectionError { source: Located(err).into(), - driver: DatabaseDriver::MySQL, + driver: Driver::MySQL, } } } -impl From<(r2d2::Error, DatabaseDriver)> for Error { +impl From<(r2d2::Error, Driver)> for Error { #[track_caller] - fn from(e: (r2d2::Error, DatabaseDriver)) -> Self { + fn from(e: (r2d2::Error, Driver)) -> Self { let (err, driver) = e; Self::ConnectionPool { source: Located(err).into(), diff --git a/src/core/databases/mysql.rs b/src/core/databases/mysql.rs index e16929a0..c6094cd8 100644 --- a/src/core/databases/mysql.rs +++ b/src/core/databases/mysql.rs @@ -11,12 +11,12 @@ use torrust_tracker_primitives::info_hash::InfoHash; use torrust_tracker_primitives::PersistentTorrents; use tracing::debug; -use super::driver::DatabaseDriver; +use super::driver::Driver; use super::{Database, Error}; use crate::core::auth::{self, Key}; use crate::shared::bit_torrent::common::AUTH_KEY_LENGTH; -const DRIVER: DatabaseDriver = DatabaseDriver::MySQL; +const DRIVER: Driver = Driver::MySQL; pub struct Mysql { pool: Pool, diff --git a/src/core/databases/sqlite.rs b/src/core/databases/sqlite.rs index 93bf1f9a..071a824c 100644 --- a/src/core/databases/sqlite.rs +++ b/src/core/databases/sqlite.rs @@ -8,11 +8,11 @@ use r2d2_sqlite::SqliteConnectionManager; use torrust_tracker_primitives::info_hash::InfoHash; use torrust_tracker_primitives::{DurationSinceUnixEpoch, PersistentTorrents}; -use super::driver::DatabaseDriver; +use super::driver::Driver; use super::{Database, Error}; use crate::core::auth::{self, Key}; -const DRIVER: DatabaseDriver = DatabaseDriver::Sqlite3; +const DRIVER: Driver = Driver::Sqlite3; pub struct Sqlite { pool: Pool, @@ -29,7 +29,7 @@ impl Database for Sqlite { /// Will return `r2d2::Error` if `db_path` is not able to create `SqLite` database. fn new(db_path: &str) -> Result { let cm = SqliteConnectionManager::file(db_path); - Pool::new(cm).map_or_else(|err| Err((err, DatabaseDriver::Sqlite3).into()), |pool| Ok(Sqlite { pool })) + Pool::new(cm).map_or_else(|err| Err((err, Driver::Sqlite3).into()), |pool| Ok(Sqlite { pool })) } /// Refer to [`databases::Database::create_database_tables`](crate::core::databases::Database::create_database_tables). diff --git a/src/core/mod.rs b/src/core/mod.rs index c70d81fe..ce618915 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -453,7 +453,7 @@ use std::panic::Location; use std::sync::Arc; use std::time::Duration; -use databases::driver::DatabaseDriver; +use databases::driver::Driver; use derive_more::Constructor; use tokio::sync::mpsc::error::SendError; use torrust_tracker_clock::clock::Time; @@ -567,8 +567,8 @@ impl Tracker { stats_repository: statistics::Repo, ) -> Result { let driver = match config.database.driver { - database::Driver::Sqlite3 => DatabaseDriver::Sqlite3, - database::Driver::MySQL => DatabaseDriver::MySQL, + database::Driver::Sqlite3 => Driver::Sqlite3, + database::Driver::MySQL => Driver::MySQL, }; let database = Arc::new(databases::driver::build(&driver, &config.database.path)?); From 9d72f5159887e21ff98b5fcb29ce87c5c1c86ca9 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 5 Jul 2024 10:21:47 +0100 Subject: [PATCH 4/5] feat: [#950] use lowercase for database driver values in configuration ```toml [core.database] driver = "sqlite3" ``` We are normalizing all enum variants in configration to lowercase. --- Containerfile | 2 +- compose.yaml | 2 +- docs/containers.md | 4 ++-- packages/configuration/src/v2/database.rs | 8 +++----- packages/configuration/src/v2/mod.rs | 4 ++-- share/container/entry_script_sh | 6 +++--- share/default/config/tracker.container.mysql.toml | 2 +- src/core/mod.rs | 2 +- src/lib.rs | 2 +- 9 files changed, 15 insertions(+), 17 deletions(-) diff --git a/Containerfile b/Containerfile index d55d2f30..d302e5c6 100644 --- a/Containerfile +++ b/Containerfile @@ -96,7 +96,7 @@ RUN ["/busybox/cp", "-sp", "/busybox/sh","/busybox/cat","/busybox/ls","/busybox/ COPY --from=gcc --chmod=0555 /usr/local/bin/su-exec /bin/su-exec ARG TORRUST_TRACKER_CONFIG_TOML_PATH="/etc/torrust/tracker/tracker.toml" -ARG TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER="Sqlite3" +ARG TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER="sqlite3" ARG USER_ID=1000 ARG UDP_PORT=6969 ARG HTTP_PORT=7070 diff --git a/compose.yaml b/compose.yaml index cab5c6d5..c2e7c63b 100644 --- a/compose.yaml +++ b/compose.yaml @@ -4,7 +4,7 @@ services: image: torrust-tracker:release tty: true environment: - - TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER=${TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER:-MySQL} + - TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER=${TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER:-mysql} - TORRUST_TRACKER_CONFIG_OVERRIDE_HTTP_API__ACCESS_TOKENS__ADMIN=${TORRUST_TRACKER_CONFIG_OVERRIDE_HTTP_API__ACCESS_TOKENS__ADMIN:-MyAccessToken} networks: - server_side diff --git a/docs/containers.md b/docs/containers.md index 82c67c26..cddd2ba9 100644 --- a/docs/containers.md +++ b/docs/containers.md @@ -149,7 +149,7 @@ The following environmental variables can be set: - `TORRUST_TRACKER_CONFIG_TOML_PATH` - The in-container path to the tracker configuration file, (default: `"/etc/torrust/tracker/tracker.toml"`). - `TORRUST_TRACKER_CONFIG_OVERRIDE_HTTP_API__ACCESS_TOKENS__ADMIN` - Override of the admin token. If set, this value overrides any value set in the config. -- `TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER` - The database type used for the container, (options: `Sqlite3`, `MySQL`, default `Sqlite3`). Please Note: This dose not override the database configuration within the `.toml` config file. +- `TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER` - The database type used for the container, (options: `sqlite3`, `mysql`, default `sqlite3`). Please Note: This dose not override the database configuration within the `.toml` config file. - `TORRUST_TRACKER_CONFIG_TOML` - Load config from this environmental variable instead from a file, (i.e: `TORRUST_TRACKER_CONFIG_TOML=$(cat tracker-tracker.toml)`). - `USER_ID` - The user id for the runtime crated `torrust` user. Please Note: This user id should match the ownership of the host-mapped volumes, (default `1000`). - `UDP_PORT` - The port for the UDP tracker. This should match the port used in the configuration, (default `6969`). @@ -244,7 +244,7 @@ The docker-compose configuration includes the MySQL service configuration. If yo ```toml [core.database] -driver = "MySQL" +driver = "mysql" path = "mysql://db_user:db_user_secret_password@mysql:3306/torrust_tracker" ``` diff --git a/packages/configuration/src/v2/database.rs b/packages/configuration/src/v2/database.rs index ef462556..c2b24d80 100644 --- a/packages/configuration/src/v2/database.rs +++ b/packages/configuration/src/v2/database.rs @@ -5,12 +5,12 @@ use url::Url; #[derive(Serialize, Deserialize, PartialEq, Eq, Debug, Clone)] pub struct Database { // Database configuration - /// Database driver. Possible values are: `Sqlite3`, and `MySQL`. + /// Database driver. Possible values are: `sqlite3`, and `mysql`. #[serde(default = "Database::default_driver")] pub driver: Driver, /// Database connection string. The format depends on the database driver. - /// For `Sqlite3`, the format is `path/to/database.db`, for example: + /// For `sqlite3`, the format is `path/to/database.db`, for example: /// `./storage/tracker/lib/database/sqlite3.db`. /// For `Mysql`, the format is `mysql://db_user:db_user_password:port/db_name`, for /// example: `mysql://root:password@localhost:3306/torrust`. @@ -57,10 +57,8 @@ impl Database { /// The database management system used by the tracker. #[derive(Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Debug, Hash, Clone)] +#[serde(rename_all = "lowercase")] pub enum Driver { - // todo: - // - Rename serialized values to lowercase: `sqlite3` and `mysql`. - // - Add serde default values. /// The `Sqlite3` database driver. Sqlite3, /// The `MySQL` database driver. diff --git a/packages/configuration/src/v2/mod.rs b/packages/configuration/src/v2/mod.rs index 141bab00..35c8b107 100644 --- a/packages/configuration/src/v2/mod.rs +++ b/packages/configuration/src/v2/mod.rs @@ -209,7 +209,7 @@ //! interval_min = 120 //! //! [core.database] -//! driver = "Sqlite3" +//! driver = "sqlite3" //! path = "./storage/tracker/lib/database/sqlite3.db" //! //! [core.net] @@ -420,7 +420,7 @@ mod tests { interval_min = 120 [core.database] - driver = "Sqlite3" + driver = "sqlite3" path = "./storage/tracker/lib/database/sqlite3.db" [core.net] diff --git a/share/container/entry_script_sh b/share/container/entry_script_sh index 0668114f..32cdfe33 100644 --- a/share/container/entry_script_sh +++ b/share/container/entry_script_sh @@ -27,7 +27,7 @@ chmod -R 2770 /var/lib/torrust /var/log/torrust /etc/torrust # Install the database and config: if [ -n "$TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER" ]; then - if cmp_lc "$TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER" "Sqlite3"; then + if cmp_lc "$TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER" "sqlite3"; then # Select Sqlite3 empty database default_database="/usr/share/torrust/default/database/tracker.sqlite3.db" @@ -35,7 +35,7 @@ if [ -n "$TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER" ]; then # Select Sqlite3 default configuration default_config="/usr/share/torrust/default/config/tracker.container.sqlite3.toml" - elif cmp_lc "$TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER" "MySQL"; then + elif cmp_lc "$TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER" "mysql"; then # (no database file needed for MySQL) @@ -44,7 +44,7 @@ if [ -n "$TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER" ]; then else echo "Error: Unsupported Database Type: \"$TORRUST_TRACKER_CONFIG_OVERRIDE_CORE__DATABASE__DRIVER\"." - echo "Please Note: Supported Database Types: \"Sqlite3\", \"MySQL\"." + echo "Please Note: Supported Database Types: \"sqlite3\", \"mysql\"." exit 1 fi else diff --git a/share/default/config/tracker.container.mysql.toml b/share/default/config/tracker.container.mysql.toml index 9465c0ef..1c84fb2e 100644 --- a/share/default/config/tracker.container.mysql.toml +++ b/share/default/config/tracker.container.mysql.toml @@ -1,7 +1,7 @@ version = "2" [core.database] -driver = "MySQL" +driver = "mysql" path = "mysql://db_user:db_user_secret_password@mysql:3306/torrust_tracker" # Uncomment to enable services diff --git a/src/core/mod.rs b/src/core/mod.rs index ce618915..ee90cea3 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -326,7 +326,7 @@ //! interval_min = 120 //! //! [core.database] -//! driver = "Sqlite3" +//! driver = "sqlite3" //! path = "./storage/tracker/lib/database/sqlite3.db" //! //! [core.net] diff --git a/src/lib.rs b/src/lib.rs index 9776345b..d242ac80 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -181,7 +181,7 @@ //! interval_min = 120 //! //! [core.database] -//! driver = "Sqlite3" +//! driver = "sqlite3" //! path = "./storage/tracker/lib/database/sqlite3.db" //! //! [core.net] From ca348a839867ec56a66b0ce8abfd714d7633ede8 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 5 Jul 2024 10:31:11 +0100 Subject: [PATCH 5/5] chore: remove unused dependency --- Cargo.lock | 1 - packages/configuration/Cargo.toml | 1 - 2 files changed, 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4e25fc4c..8ae3d20d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4017,7 +4017,6 @@ dependencies = [ "thiserror", "toml", "torrust-tracker-located-error", - "torrust-tracker-primitives", "url", "uuid", ] diff --git a/packages/configuration/Cargo.toml b/packages/configuration/Cargo.toml index 90c81634..ae9c64cf 100644 --- a/packages/configuration/Cargo.toml +++ b/packages/configuration/Cargo.toml @@ -24,7 +24,6 @@ serde_with = "3" thiserror = "1" toml = "0" torrust-tracker-located-error = { version = "3.0.0-alpha.12-develop", path = "../located-error" } -torrust-tracker-primitives = { version = "3.0.0-alpha.12-develop", path = "../primitives" } url = "2.5.2" [dev-dependencies]