From 9bb91682da029489d05903303232d0f5bce36cef Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Fri, 20 Dec 2024 21:42:57 -0600 Subject: [PATCH] refactor --- .../include/db/impl/rdb_file_db.hpp | 55 ++++++++++--------- .../librepertory/src/db/impl/rdb_file_db.cpp | 47 +++++++++------- 2 files changed, 56 insertions(+), 46 deletions(-) diff --git a/repertory/librepertory/include/db/impl/rdb_file_db.hpp b/repertory/librepertory/include/db/impl/rdb_file_db.hpp index b3377587..64138441 100644 --- a/repertory/librepertory/include/db/impl/rdb_file_db.hpp +++ b/repertory/librepertory/include/db/impl/rdb_file_db.hpp @@ -44,6 +44,7 @@ private: std::unique_ptr db_{nullptr}; rocksdb::ColumnFamilyHandle *directory_family_{}; rocksdb::ColumnFamilyHandle *file_family_{}; + rocksdb::ColumnFamilyHandle *path_family_{}; rocksdb::ColumnFamilyHandle *source_family_{}; private: @@ -66,50 +67,50 @@ private: rocksdb::Transaction *txn) -> rocksdb::Status; public: - [[nodiscard]] auto add_directory(const std::string &api_path, - const std::string &source_path) - -> api_error override; + [[nodiscard]] auto + add_directory(const std::string &api_path, + const std::string &source_path) -> api_error override; - [[nodiscard]] auto add_or_update_file(const i_file_db::file_data &data) - -> api_error override; + [[nodiscard]] auto + add_or_update_file(const i_file_db::file_data &data) -> api_error override; void clear() override; [[nodiscard]] auto count() const -> std::uint64_t override; - [[nodiscard]] auto get_api_path(const std::string &source_path, - std::string &api_path) const - -> api_error override; + [[nodiscard]] auto + get_api_path(const std::string &source_path, + std::string &api_path) const -> api_error override; - [[nodiscard]] auto get_directory_api_path(const std::string &source_path, - std::string &api_path) const - -> api_error override; + [[nodiscard]] auto + get_directory_api_path(const std::string &source_path, + std::string &api_path) const -> api_error override; [[nodiscard]] auto get_directory_source_path(const std::string &api_path, std::string &source_path) const -> api_error override; - [[nodiscard]] auto get_file_api_path(const std::string &source_path, - std::string &api_path) const - -> api_error override; + [[nodiscard]] auto + get_file_api_path(const std::string &source_path, + std::string &api_path) const -> api_error override; - [[nodiscard]] auto get_file_data(const std::string &api_path, - i_file_db::file_data &data) const - -> api_error override; + [[nodiscard]] auto + get_file_data(const std::string &api_path, + i_file_db::file_data &data) const -> api_error override; - [[nodiscard]] auto get_file_source_path(const std::string &api_path, - std::string &source_path) const - -> api_error override; + [[nodiscard]] auto + get_file_source_path(const std::string &api_path, + std::string &source_path) const -> api_error override; - [[nodiscard]] auto get_item_list() const - -> std::vector override; + [[nodiscard]] auto + get_item_list() const -> std::vector override; - [[nodiscard]] auto get_source_path(const std::string &api_path, - std::string &source_path) const - -> api_error override; + [[nodiscard]] auto + get_source_path(const std::string &api_path, + std::string &source_path) const -> api_error override; - [[nodiscard]] auto remove_item(const std::string &api_path) - -> api_error override; + [[nodiscard]] auto + remove_item(const std::string &api_path) -> api_error override; }; } // namespace repertory diff --git a/repertory/librepertory/src/db/impl/rdb_file_db.cpp b/repertory/librepertory/src/db/impl/rdb_file_db.cpp index 0f50b0f2..9cc063a2 100644 --- a/repertory/librepertory/src/db/impl/rdb_file_db.cpp +++ b/repertory/librepertory/src/db/impl/rdb_file_db.cpp @@ -44,6 +44,7 @@ void rdb_file_db::create_or_open(bool clear) { families.emplace_back(rocksdb::kDefaultColumnFamilyName, rocksdb::ColumnFamilyOptions()); families.emplace_back("file", rocksdb::ColumnFamilyOptions()); + families.emplace_back("path", rocksdb::ColumnFamilyOptions()); families.emplace_back("source", rocksdb::ColumnFamilyOptions()); auto handles = std::vector(); @@ -52,6 +53,7 @@ void rdb_file_db::create_or_open(bool clear) { std::size_t idx{}; directory_family_ = handles.at(idx++); file_family_ = handles.at(idx++); + path_family_ = handles.at(idx++); source_family_ = handles.at(idx++); } @@ -80,6 +82,11 @@ auto rdb_file_db::add_directory(const std::string &api_path, return res; } + res = txn->Put(path_family_, api_path, source_path); + if (not res.ok()) { + return res; + } + return txn->Put(source_family_, source_path, api_path); }); } @@ -114,6 +121,11 @@ auto rdb_file_db::add_or_update_file(const i_file_db::file_data &data) return res; } + res = txn->Put(path_family_, data.api_path, data.source_path); + if (not res.ok()) { + return res; + } + return txn->Put(source_family_, data.source_path, data.api_path); }); } @@ -147,9 +159,8 @@ auto rdb_file_db::get_api_path(const std::string &source_path, }); } -auto rdb_file_db::get_directory_api_path(const std::string &source_path, - std::string &api_path) const - -> api_error { +auto rdb_file_db::get_directory_api_path( + const std::string &source_path, std::string &api_path) const -> api_error { REPERTORY_USES_FUNCTION_NAME(); auto result = perform_action(function_name, [&]() -> rocksdb::Status { @@ -172,9 +183,8 @@ auto rdb_file_db::get_directory_api_path(const std::string &source_path, : result; } -auto rdb_file_db::get_directory_source_path(const std::string &api_path, - std::string &source_path) const - -> api_error { +auto rdb_file_db::get_directory_source_path( + const std::string &api_path, std::string &source_path) const -> api_error { REPERTORY_USES_FUNCTION_NAME(); auto result = perform_action(function_name, [&]() -> rocksdb::Status { @@ -235,9 +245,8 @@ auto rdb_file_db::get_file_data(const std::string &api_path, return result; } -auto rdb_file_db::get_file_source_path(const std::string &api_path, - std::string &source_path) const - -> api_error { +auto rdb_file_db::get_file_source_path( + const std::string &api_path, std::string &source_path) const -> api_error { REPERTORY_USES_FUNCTION_NAME(); auto result = perform_action(function_name, [&]() -> rocksdb::Status { @@ -285,17 +294,12 @@ auto rdb_file_db::get_item_list() const -> std::vector { auto rdb_file_db::get_source_path(const std::string &api_path, std::string &source_path) const -> api_error { - auto iter = create_iterator(source_family_); - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - if (iter->value().ToString() != api_path) { - continue; - } + REPERTORY_USES_FUNCTION_NAME(); - source_path = iter->key().ToString(); - return api_error::success; - } - - return api_error::item_not_found; + return perform_action(function_name, [&]() -> rocksdb::Status { + return db_->Get(rocksdb::ReadOptions{}, path_family_, api_path, + &source_path); + }); } auto rdb_file_db::perform_action(std::string_view function_name, @@ -371,6 +375,11 @@ auto rdb_file_db::remove_item(const std::string &api_path, return res; } + res = txn->Delete(path_family_, api_path); + if (not res.ok()) { + return res; + } + res = txn->Delete(directory_family_, api_path); if (not res.ok()) { return res;