extract common behavior
All checks were successful
BlockStorage/repertory_osx_builds/pipeline/head This commit looks good
BlockStorage/repertory_linux_builds/pipeline/head This commit looks good

This commit is contained in:
Scott E. Graves 2023-11-15 20:54:28 -06:00
parent edb1297c4a
commit 80f6e3c272
6 changed files with 46 additions and 36 deletions

View File

@ -95,6 +95,9 @@ protected:
return fm_;
}
[[nodiscard]] virtual auto get_used_drive_space_impl() const
-> std::uint64_t = 0;
[[nodiscard]] virtual auto remove_directory_impl(const std::string &api_path)
-> api_error = 0;
@ -159,6 +162,8 @@ public:
[[nodiscard]] auto get_total_item_count() const -> std::uint64_t override;
[[nodiscard]] auto get_used_drive_space() const -> std::uint64_t override;
[[nodiscard]] auto is_file_writeable(const std::string &api_path) const
-> bool override;

View File

@ -80,6 +80,9 @@ protected:
directory_item_list &list) const
-> api_error override;
[[nodiscard]] auto get_used_drive_space_impl() const
-> std::uint64_t override;
[[nodiscard]] auto remove_directory_impl(const std::string &api_path)
-> api_error override;
@ -107,8 +110,6 @@ public:
return provider_type::s3;
}
[[nodiscard]] auto get_used_drive_space() const -> std::uint64_t override;
[[nodiscard]] auto is_direct_only() const -> bool override { return false; }
[[nodiscard]] auto is_directory(const std::string &api_path,

View File

@ -58,6 +58,9 @@ protected:
directory_item_list &list) const
-> api_error override;
[[nodiscard]] auto get_used_drive_space_impl() const
-> std::uint64_t override;
[[nodiscard]] auto remove_directory_impl(const std::string &api_path)
-> api_error override;
@ -85,8 +88,6 @@ public:
[[nodiscard]] auto get_total_drive_space() const -> std::uint64_t override;
[[nodiscard]] auto get_used_drive_space() const -> std::uint64_t override;
[[nodiscard]] auto is_direct_only() const -> bool override { return false; }
[[nodiscard]] auto is_directory(const std::string &api_path,

View File

@ -460,6 +460,19 @@ auto base_provider::get_total_item_count() const -> std::uint64_t {
return ret;
}
auto base_provider::get_used_drive_space() const -> std::uint64_t {
try {
auto used_space = get_used_drive_space_impl();
get_file_mgr()->update_used_space(used_space);
return used_space;
} catch (const std::exception &ex) {
utils::error::raise_error(__FUNCTION__, ex,
"failed to get used drive space");
}
return 0U;
}
auto base_provider::is_file_writeable(const std::string &api_path) const
-> bool {
bool exists{};

View File

@ -539,7 +539,7 @@ auto s3_provider::get_total_drive_space() const -> std::uint64_t {
return std::numeric_limits<std::int64_t>::max() / std::int64_t(2);
}
auto s3_provider::get_used_drive_space() const -> std::uint64_t {
auto s3_provider::get_used_drive_space_impl() const -> std::uint64_t {
std::string response_data;
long response_code{};
if (not get_object_list(response_data, response_code)) {

View File

@ -351,42 +351,32 @@ auto sia_provider::get_total_drive_space() const -> std::uint64_t {
return 0U;
}
auto sia_provider::get_used_drive_space() const -> std::uint64_t {
// TODO adjust size based on open files
try {
curl::requests::http_get get{};
get.allow_timeout = true;
get.path = "/api/bus/stats/objects";
auto sia_provider::get_used_drive_space_impl() const -> std::uint64_t {
curl::requests::http_get get{};
get.allow_timeout = true;
get.path = "/api/bus/stats/objects";
json object_data{};
get.response_handler = [&object_data](const data_buffer &data,
long response_code) {
if (response_code == http_error_codes::ok) {
object_data = nlohmann::json::parse(data.begin(), data.end());
}
};
long response_code{};
stop_type stop_requested{};
if (not get_comm().make_request(get, response_code, stop_requested)) {
return 0U;
json object_data{};
get.response_handler = [&object_data](const data_buffer &data,
long response_code) {
if (response_code == http_error_codes::ok) {
object_data = nlohmann::json::parse(data.begin(), data.end());
}
};
if (response_code != http_error_codes::ok) {
utils::error::raise_error(__FUNCTION__, response_code,
"failed to get used drive space");
return 0U;
}
auto used_space = object_data["totalObjectsSize"].get<std::uint64_t>();
get_file_mgr()->update_used_space(used_space);
return used_space;
} catch (const std::exception &ex) {
utils::error::raise_error(__FUNCTION__, ex,
"failed to get used drive space");
long response_code{};
stop_type stop_requested{};
if (not get_comm().make_request(get, response_code, stop_requested)) {
return 0U;
}
return 0U;
if (response_code != http_error_codes::ok) {
utils::error::raise_error(__FUNCTION__, response_code,
"failed to get used drive space");
return 0U;
}
return object_data["totalObjectsSize"].get<std::uint64_t>();
}
auto sia_provider::is_directory(const std::string &api_path, bool &exists) const