config: convert database backend to enum

This reports a nice error when the config is loaded, rather than later
when the database is initialized.
This commit is contained in:
Lambda 2024-06-16 14:31:59 +00:00 committed by Charles Hall
parent d26b87a2f2
commit 8a30817930
No known key found for this signature in database
GPG key ID: 7B8E0645816E07CF
3 changed files with 40 additions and 11 deletions

View file

@ -25,8 +25,8 @@ use ruma::{
use tracing::{debug, error, info, info_span, warn, Instrument};
use crate::{
service::rooms::timeline::PduCount, services, utils, Config, Error,
PduEvent, Result, Services, SERVICES,
config::DatabaseBackend, service::rooms::timeline::PduCount, services,
utils, Config, Error, PduEvent, Result, Services, SERVICES,
};
pub(crate) struct KeyValueDatabase {
@ -279,14 +279,22 @@ impl KeyValueDatabase {
return Ok(());
}
if sqlite_exists && config.database.backend != "sqlite" {
let (backend_is_rocksdb, backend_is_sqlite): (bool, bool) =
match config.database.backend {
#[cfg(feature = "rocksdb")]
DatabaseBackend::Rocksdb => (true, false),
#[cfg(feature = "sqlite")]
DatabaseBackend::Sqlite => (false, true),
};
if sqlite_exists && !backend_is_sqlite {
return Err(Error::bad_config(
"Found sqlite at database_path, but is not specified in \
config.",
));
}
if rocksdb_exists && config.database.backend != "rocksdb" {
if rocksdb_exists && !backend_is_rocksdb {
return Err(Error::bad_config(
"Found rocksdb at database_path, but is not specified in \
config.",
@ -319,21 +327,18 @@ impl KeyValueDatabase {
not(any(feature = "rocksdb", feature = "sqlite")),
allow(unused_variables)
)]
let builder: Arc<dyn KeyValueDatabaseEngine> = match &*config
let builder: Arc<dyn KeyValueDatabaseEngine> = match config
.database
.backend
{
#[cfg(feature = "sqlite")]
"sqlite" => {
DatabaseBackend::Sqlite => {
Arc::new(Arc::<abstraction::sqlite::Engine>::open(&config)?)
}
#[cfg(feature = "rocksdb")]
"rocksdb" => {
DatabaseBackend::Rocksdb => {
Arc::new(Arc::<abstraction::rocksdb::Engine>::open(&config)?)
}
_ => {
return Err(Error::BadConfig("Database backend not found."));
}
};
if config.registration_token == Some(String::new()) {