Skip to content

Commit

Permalink
Merge pull request #676 from blockscout/lymarenkolev/bens/add-kv-db
Browse files Browse the repository at this point in the history
Add kv database connection
  • Loading branch information
sevenzing authored Nov 13, 2023
2 parents 66ae39d + a1e9520 commit d61e385
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 5 deletions.
6 changes: 4 additions & 2 deletions blockscout-ens/bens-server/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,13 @@ pub async fn run(settings: Settings) -> Result<(), anyhow::Error> {

let health = Arc::new(HealthService::default());

let database_url = settings.database.connect.url();
let pool = Arc::new(
PgPoolOptions::new()
.max_connections(40)
.connect(&settings.database.url)
.await?,
.connect(&database_url)
.await
.context("database connect")?,
);
let blockscout_clients = settings
.blockscout
Expand Down
53 changes: 51 additions & 2 deletions blockscout-ens/bens-server/src/settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,57 @@ impl ConfigSettings for Settings {
const SERVICE_NAME: &'static str = "BENS";
}

// TODO: move database settings to blockscout-service-launcher
#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
#[serde(deny_unknown_fields)]
pub struct DatabaseSettings {
pub url: String,
pub connect: DatabaseConnectSettings,
}

#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
#[serde(deny_unknown_fields, rename_all = "lowercase")]
pub enum DatabaseConnectSettings {
Url(String),
Kv(DatabaseKvConnection),
}

impl DatabaseConnectSettings {
pub fn url(self) -> String {
match self {
DatabaseConnectSettings::Url(s) => s,
DatabaseConnectSettings::Kv(kv) => kv.url(),
}
}
}

#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
#[serde(deny_unknown_fields)]
pub struct DatabaseKvConnection {
pub host: String,
pub port: u16,
pub user: String,
pub password: String,
#[serde(default)]
pub dbname: Option<String>,
#[serde(default)]
pub options: Option<String>,
}

impl DatabaseKvConnection {
pub fn url(self) -> String {
let dbname = self
.dbname
.map(|dbname| format!("/{dbname}"))
.unwrap_or_default();
let options = self
.options
.map(|options| format!("?{options}"))
.unwrap_or_default();
format!(
"postgresql://{}:{}@{}:{}{}{}",
self.user, self.password, self.host, self.port, dbname, options
)
}
}

#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
Expand Down Expand Up @@ -92,7 +139,9 @@ impl Settings {
metrics: Default::default(),
tracing: Default::default(),
jaeger: Default::default(),
database: DatabaseSettings { url: database_url },
database: DatabaseSettings {
connect: DatabaseConnectSettings::Url(database_url),
},
blockscout: Default::default(),
}
}
Expand Down
2 changes: 1 addition & 1 deletion blockscout-ens/bens-server/tests/domains.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ async fn basic_domain_extracting_works(pool: PgPool) {
"{postgres_url}{}",
pool.connect_options().get_database().unwrap()
);
std::env::set_var("BENS__DATABASE__URL", db_url);
std::env::set_var("BENS__DATABASE__CONNECT__URL", db_url);
let clients = mocked_blockscout_clients().await;
std::env::set_var("BENS__CONFIG", "./tests/config.test.toml");
let mut settings = Settings::build().expect("Failed to build settings");
Expand Down

0 comments on commit d61e385

Please sign in to comment.