make database type configurable
This commit is contained in:
parent
78d7949347
commit
0d979459a4
@ -30,26 +30,26 @@
|
||||
namespace repertory {
|
||||
class app_config final {
|
||||
public:
|
||||
[[nodiscard]] static auto
|
||||
default_agent_name(const provider_type &prov) -> std::string;
|
||||
[[nodiscard]] static auto default_agent_name(const provider_type &prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
default_api_port(const provider_type &prov) -> std::uint16_t;
|
||||
[[nodiscard]] static auto default_api_port(const provider_type &prov)
|
||||
-> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
default_data_directory(const provider_type &prov) -> std::string;
|
||||
[[nodiscard]] static auto default_data_directory(const provider_type &prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
default_remote_port(const provider_type &prov) -> std::uint16_t;
|
||||
[[nodiscard]] static auto default_remote_port(const provider_type &prov)
|
||||
-> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
default_rpc_port(const provider_type &prov) -> std::uint16_t;
|
||||
[[nodiscard]] static auto default_rpc_port(const provider_type &prov)
|
||||
-> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
get_provider_display_name(const provider_type &prov) -> std::string;
|
||||
[[nodiscard]] static auto get_provider_display_name(const provider_type &prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
get_provider_name(const provider_type &prov) -> std::string;
|
||||
[[nodiscard]] static auto get_provider_name(const provider_type &prov)
|
||||
-> std::string;
|
||||
|
||||
public:
|
||||
app_config(const provider_type &prov, std::string_view data_directory = "");
|
||||
@ -63,6 +63,7 @@ private:
|
||||
std::string api_user_;
|
||||
bool config_changed_;
|
||||
std::string data_directory_;
|
||||
database_type db_type_{database_type::rocksdb};
|
||||
std::uint8_t download_timeout_secs_;
|
||||
bool enable_chunk_downloader_timeout_;
|
||||
bool enable_comm_duration_events_;
|
||||
@ -109,11 +110,15 @@ private:
|
||||
mutable std::recursive_mutex remote_mount_mutex_;
|
||||
|
||||
private:
|
||||
[[nodiscard]] auto load() -> bool;
|
||||
[[nodiscard]] auto get_database_value(const json &json_document,
|
||||
const std::string &name,
|
||||
database_type &dst, bool &success_flag)
|
||||
-> bool;
|
||||
|
||||
template <typename dest>
|
||||
auto get_value(const json &json_document, const std::string &name, dest &dst,
|
||||
bool &success_flag) -> bool {
|
||||
[[nodiscard]] auto get_value(const json &json_document,
|
||||
const std::string &name, dest &dst,
|
||||
bool &success_flag) -> bool {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
auto ret{false};
|
||||
@ -133,6 +138,8 @@ private:
|
||||
return ret;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto load() -> bool;
|
||||
|
||||
template <typename dest, typename source>
|
||||
auto set_value(dest &dst, const source &src) -> bool {
|
||||
auto ret{false};
|
||||
@ -164,6 +171,10 @@ public:
|
||||
|
||||
[[nodiscard]] auto get_config_file_path() const -> std::string;
|
||||
|
||||
[[nodiscard]] auto get_database_type() const -> database_type {
|
||||
return db_type_;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_data_directory() const -> std::string {
|
||||
return data_directory_;
|
||||
}
|
||||
@ -332,6 +343,10 @@ public:
|
||||
set_value(download_timeout_secs_, chunk_downloader_timeout_secs);
|
||||
}
|
||||
|
||||
void set_database_type(const database_type &type) {
|
||||
set_value(db_type_, type);
|
||||
}
|
||||
|
||||
void
|
||||
set_enable_chunk_downloader_timeout(bool enable_chunk_downloader_timeout) {
|
||||
set_value(enable_chunk_downloader_timeout_,
|
||||
|
@ -127,6 +127,29 @@ auto app_config::get_config_file_path() const -> std::string {
|
||||
return utils::path::combine(data_directory_, {"config.json"});
|
||||
}
|
||||
|
||||
auto app_config::get_database_value(const json &json_document,
|
||||
const std::string &name, database_type &dst,
|
||||
bool &success_flag) -> bool {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
auto ret{false};
|
||||
try {
|
||||
if (json_document.find(name) != json_document.end()) {
|
||||
dst = database_type_from_string(json_document[name].get<std::string>(),
|
||||
database_type::rocksdb);
|
||||
ret = true;
|
||||
} else {
|
||||
success_flag = false;
|
||||
}
|
||||
} catch (const json::exception &ex) {
|
||||
utils::error::raise_error(function_name, ex, "exception occurred");
|
||||
success_flag = false;
|
||||
ret = false;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
auto app_config::default_agent_name(const provider_type &prov) -> std::string {
|
||||
static const std::array<std::string,
|
||||
static_cast<std::size_t>(provider_type::unknown)>
|
||||
@ -212,6 +235,7 @@ auto app_config::get_json() const -> json {
|
||||
{"ApiPort", api_port_},
|
||||
{"ApiUser", api_user_},
|
||||
{"ChunkDownloaderTimeoutSeconds", download_timeout_secs_},
|
||||
{"DatabaseType", database_type_to_string(db_type_)},
|
||||
{"EnableChunkDownloaderTimeout", enable_chunk_downloader_timeout_},
|
||||
{"EnableCommDurationEvents", enable_comm_duration_events_},
|
||||
{"EnableDriveEvents", enable_drive_events_},
|
||||
@ -281,6 +305,7 @@ auto app_config::get_json() const -> json {
|
||||
|
||||
if (prov_ == provider_type::encrypt) {
|
||||
ret.erase("ChunkDownloaderTimeoutSeconds");
|
||||
ret.erase("DatabaseType");
|
||||
ret.erase("EnableChunkDownloaderTimeout");
|
||||
ret.erase("EnableMaxCacheSize");
|
||||
ret.erase("EvictionDelayMinutes");
|
||||
@ -305,6 +330,7 @@ auto app_config::get_json() const -> json {
|
||||
ret.erase("S3Config");
|
||||
} else if (prov_ == provider_type::remote) {
|
||||
ret.erase("ChunkDownloaderTimeoutSeconds");
|
||||
ret.erase("DatabaseType");
|
||||
ret.erase("EnableChunkDownloaderTimeout");
|
||||
ret.erase("EnableChunkDownloaderTimeout");
|
||||
ret.erase("EnableMaxCacheSize");
|
||||
@ -376,6 +402,9 @@ auto app_config::get_value_by_name(const std::string &name) -> std::string {
|
||||
if (name == "ApiUser") {
|
||||
return api_user_;
|
||||
}
|
||||
if (name == "DatabaseType") {
|
||||
return database_type_to_string(get_database_type());
|
||||
}
|
||||
if (name == "ChunkDownloaderTimeoutSeconds") {
|
||||
return std::to_string(get_chunk_downloader_timeout_secs());
|
||||
}
|
||||
@ -550,6 +579,7 @@ auto app_config::load() -> bool {
|
||||
get_value(json_document, "ApiUser", api_user_, ret);
|
||||
get_value(json_document, "ChunkDownloaderTimeoutSeconds",
|
||||
download_timeout_secs_, ret);
|
||||
get_database_value(json_document, "DatabaseType", db_type_, ret);
|
||||
get_value(json_document, "EvictionDelayMinutes", eviction_delay_mins_,
|
||||
ret);
|
||||
get_value(json_document, "EvictionUsesAccessedTime",
|
||||
@ -762,6 +792,11 @@ auto app_config::set_value_by_name(const std::string &name,
|
||||
set_chunk_downloader_timeout_secs(utils::string::to_uint8(value));
|
||||
return std::to_string(get_chunk_downloader_timeout_secs());
|
||||
}
|
||||
if (name == "DatabaseType") {
|
||||
set_database_type(
|
||||
database_type_from_string(value, database_type::rocksdb));
|
||||
return database_type_to_string(db_type_);
|
||||
}
|
||||
if (name == "EnableChunkDownloaderTimeout") {
|
||||
set_enable_chunk_downloader_timeout(utils::string::to_bool(value));
|
||||
return utils::string::from_bool(get_enable_chunk_download_timeout());
|
||||
|
@ -29,6 +29,12 @@
|
||||
namespace repertory {
|
||||
auto create_file_mgr_db(const app_config &cfg)
|
||||
-> std::unique_ptr<i_file_mgr_db> {
|
||||
return std::make_unique<rdb_file_mgr_db>(cfg);
|
||||
switch (cfg.get_database_type()) {
|
||||
case database_type::sqlite:
|
||||
return std::make_unique<sqlite_file_mgr_db>(cfg);
|
||||
|
||||
default:
|
||||
return std::make_unique<rdb_file_mgr_db>(cfg);
|
||||
}
|
||||
}
|
||||
} // namespace repertory
|
||||
|
@ -27,6 +27,12 @@
|
||||
|
||||
namespace repertory {
|
||||
auto create_meta_db(const app_config &cfg) -> std::unique_ptr<i_meta_db> {
|
||||
return std::make_unique<rdb_meta_db>(cfg);
|
||||
switch (cfg.get_database_type()) {
|
||||
case database_type::sqlite:
|
||||
return std::make_unique<sqlite_meta_db>(cfg);
|
||||
|
||||
default:
|
||||
return std::make_unique<rdb_meta_db>(cfg);
|
||||
}
|
||||
}
|
||||
} // namespace repertory
|
||||
|
@ -60,6 +60,7 @@ const auto DEFAULT_SIA_CONFIG = "{\n"
|
||||
" \"ApiPort\": 10000,\n"
|
||||
" \"ApiUser\": \"repertory\",\n"
|
||||
" \"ChunkDownloaderTimeoutSeconds\": 30,\n"
|
||||
" \"DatabaseType\": \"rocksdb\",\n"
|
||||
" \"EnableChunkDownloaderTimeout\": true,\n"
|
||||
" \"EnableCommDurationEvents\": false,\n"
|
||||
" \"EnableDriveEvents\": false,\n"
|
||||
@ -113,6 +114,7 @@ const auto DEFAULT_S3_CONFIG = "{\n"
|
||||
" \"ApiPort\": 10100,\n"
|
||||
" \"ApiUser\": \"repertory\",\n"
|
||||
" \"ChunkDownloaderTimeoutSeconds\": 30,\n"
|
||||
" \"DatabaseType\": \"rocksdb\",\n"
|
||||
" \"EnableChunkDownloaderTimeout\": true,\n"
|
||||
" \"EnableCommDurationEvents\": false,\n"
|
||||
" \"EnableDriveEvents\": false,\n"
|
||||
@ -857,4 +859,18 @@ TEST_F(config_test, task_wait_ms_minimum_value) {
|
||||
EXPECT_EQ(50U, config.get_task_wait_ms());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(config_test, can_set_database_type) {
|
||||
{
|
||||
app_config config(provider_type::sia, sia_directory);
|
||||
config.set_database_type(database_type::rocksdb);
|
||||
EXPECT_EQ(database_type::rocksdb, config.get_database_type());
|
||||
|
||||
config.set_database_type(database_type::sqlite);
|
||||
EXPECT_EQ(database_type::sqlite, config.get_database_type());
|
||||
|
||||
config.set_database_type(database_type::rocksdb);
|
||||
EXPECT_EQ(database_type::rocksdb, config.get_database_type());
|
||||
}
|
||||
}
|
||||
} // namespace repertory
|
||||
|
Loading…
x
Reference in New Issue
Block a user