From 7b19d3c4ce4a97b5b2035bd60f1717f2da610ab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Wed, 13 May 2020 12:40:10 +0200 Subject: [PATCH] Give more meaningful error on missing feature when opening a db (#5999) --- substrate/client/db/src/utils.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/substrate/client/db/src/utils.rs b/substrate/client/db/src/utils.rs index d40abcab66..b52126536f 100644 --- a/substrate/client/db/src/utils.rs +++ b/substrate/client/db/src/utils.rs @@ -210,6 +210,12 @@ pub fn open_database( config: &DatabaseSettings, db_type: DatabaseType, ) -> sp_blockchain::Result>> { + let db_open_error = |feat| Err( + sp_blockchain::Error::Backend( + format!("`{}` feature not enabled, database can not be opened", feat), + ), + ); + let db: Arc> = match &config.source { #[cfg(any(feature = "kvdb-rocksdb", test))] DatabaseSettingsSrc::RocksDb { path, cache_size } => { @@ -247,21 +253,29 @@ pub fn open_database( .map_err(|err| sp_blockchain::Error::Backend(format!("{}", err)))?; sp_database::as_database(db) }, + #[cfg(not(any(feature = "kvdb-rocksdb", test)))] + DatabaseSettingsSrc::RocksDb { .. } => { + return db_open_error("kvdb-rocksdb"); + }, #[cfg(feature = "subdb")] DatabaseSettingsSrc::SubDb { path } => { crate::subdb::open(&path, NUM_COLUMNS) .map_err(|e| sp_blockchain::Error::Backend(format!("{:?}", e)))? }, + #[cfg(not(feature = "subdb"))] + DatabaseSettingsSrc::SubDb { .. } => { + return db_open_error("subdb"); + }, #[cfg(feature = "parity-db")] DatabaseSettingsSrc::ParityDb { path } => { crate::parity_db::open(&path) .map_err(|e| sp_blockchain::Error::Backend(format!("{:?}", e)))? }, - DatabaseSettingsSrc::Custom(db) => db.clone(), - _ => { - let msg = "Trying to open a unsupported database".into(); - return Err(sp_blockchain::Error::Backend(msg)); + #[cfg(not(feature = "parity-db"))] + DatabaseSettingsSrc::ParityDb { .. } => { + return db_open_error("parity-db"); }, + DatabaseSettingsSrc::Custom(db) => db.clone(), }; check_database_type(&*db, db_type)?;