From 2f9a1a9afa764db96c14a3c9453d69fe7812e297 Mon Sep 17 00:00:00 2001 From: Alberto Miranda <alberto.miranda@bsc.es> Date: Mon, 27 Feb 2023 17:57:00 +0100 Subject: [PATCH] API: Add logic for ADM_tear_down_adhoc_storage() --- src/lib/c_wrapper.cpp | 8 ++++++++ src/lib/detail/impl.cpp | 37 +++++++++++++++++++++++++++++++++++++ src/lib/detail/impl.hpp | 3 +++ src/lib/libscord.cpp | 11 +++++++++++ src/lib/scord/scord.h | 12 ++++++++++++ src/lib/scord/scord.hpp | 3 +++ src/scord/rpc_handlers.cpp | 26 ++++++++++++++++++++++++++ src/scord/rpc_handlers.hpp | 3 +++ src/scord/scord.cpp | 1 + 9 files changed, 104 insertions(+) diff --git a/src/lib/c_wrapper.cpp b/src/lib/c_wrapper.cpp index 1074843a..e383a86e 100644 --- a/src/lib/c_wrapper.cpp +++ b/src/lib/c_wrapper.cpp @@ -161,6 +161,14 @@ ADM_deploy_adhoc_storage(ADM_server_t server, srv, scord::adhoc_storage{adhoc_storage}); } +ADM_return_t +ADM_tear_down_adhoc_storage(ADM_server_t server, + ADM_adhoc_storage_t adhoc_storage) { + + return scord::detail::tear_down_adhoc_storage( + scord::server{server}, scord::adhoc_storage{adhoc_storage}); +} + ADM_return_t ADM_register_pfs_storage(ADM_server_t server, const char* name, ADM_pfs_storage_type_t type, ADM_pfs_context_t ctx, diff --git a/src/lib/detail/impl.cpp b/src/lib/detail/impl.cpp index 6f3bc40d..ec28bcb7 100644 --- a/src/lib/detail/impl.cpp +++ b/src/lib/detail/impl.cpp @@ -479,6 +479,43 @@ deploy_adhoc_storage(const server& srv, const adhoc_storage& adhoc_storage) { return scord::error_code::other; } +scord::error_code +tear_down_adhoc_storage(const server& srv, const adhoc_storage& adhoc_storage) { + + scord::network::client rpc_client{srv.protocol()}; + + const auto rpc_id = ::api::remote_procedure::new_id(); + + if(const auto lookup_rv = rpc_client.lookup(srv.address()); + lookup_rv.has_value()) { + const auto& endp = lookup_rv.value(); + + LOGGER_INFO("rpc id: {} name: {} from: {} => " + "body: {{adhoc_id: {}}}", + rpc_id, std::quoted("ADM_"s + __FUNCTION__), + std::quoted(rpc_client.self_address()), adhoc_storage.id()); + + if(const auto call_rv = + endp.call("ADM_"s + __FUNCTION__, adhoc_storage.id()); + call_rv.has_value()) { + + const scord::network::generic_response resp{call_rv.value()}; + + LOGGER_EVAL(resp.error_code(), INFO, ERROR, + "rpc id: {} name: {} from: {} <= " + "body: {{retval: {}}} [op_id: {}]", + rpc_id, std::quoted("ADM_"s + __FUNCTION__), + std::quoted(endp.address()), resp.error_code(), + resp.op_id()); + + return resp.error_code(); + } + } + + LOGGER_ERROR("rpc call failed"); + return scord::error_code::other; +} + tl::expected<transfer, error_code> transfer_datasets(const server& srv, const job& job, const std::vector<dataset>& sources, diff --git a/src/lib/detail/impl.hpp b/src/lib/detail/impl.hpp index 40bb30c9..d8753908 100644 --- a/src/lib/detail/impl.hpp +++ b/src/lib/detail/impl.hpp @@ -62,6 +62,9 @@ remove_adhoc_storage(const server& srv, const adhoc_storage& adhoc_storage); scord::error_code deploy_adhoc_storage(const server& srv, const adhoc_storage& adhoc_storage); +scord::error_code +tear_down_adhoc_storage(const server& srv, const adhoc_storage& adhoc_storage); + tl::expected<scord::pfs_storage, scord::error_code> register_pfs_storage(const server& srv, const std::string& name, enum pfs_storage::type type, const pfs_storage::ctx& ctx); diff --git a/src/lib/libscord.cpp b/src/lib/libscord.cpp index cbe3b47c..a73c7738 100644 --- a/src/lib/libscord.cpp +++ b/src/lib/libscord.cpp @@ -299,6 +299,17 @@ deploy_adhoc_storage(const server& srv, const adhoc_storage& adhoc_storage) { } } +void +tear_down_adhoc_storage(const server& srv, const adhoc_storage& adhoc_storage) { + + const auto ec = detail::tear_down_adhoc_storage(srv, adhoc_storage); + + if(!ec) { + throw std::runtime_error(fmt::format( + "ADM_deploy_adhoc_storage() error: {}", ec.message())); + } +} + scord::pfs_storage register_pfs_storage(const server& srv, const std::string& name, enum pfs_storage::type type, const pfs_storage::ctx& ctx) { diff --git a/src/lib/scord/scord.h b/src/lib/scord/scord.h index 1693a3ba..4733624a 100644 --- a/src/lib/scord/scord.h +++ b/src/lib/scord/scord.h @@ -158,6 +158,18 @@ ADM_return_t ADM_deploy_adhoc_storage(ADM_server_t server, ADM_adhoc_storage_t adhoc_storage); +/** + * Tear down a previously deployed adhoc storage system instance + * + * @param[in] server The server to which the request is directed + * @param[in] adhoc_storage An ADM_STORAGE referring to the adhoc storage + * instance of interest. + * @return Returns ADM_SUCCESS if the remote procedure has completed + */ +ADM_return_t +ADM_tear_down_adhoc_storage(ADM_server_t server, + ADM_adhoc_storage_t adhoc_storage); + /** * Register a PFS storage tier. * diff --git a/src/lib/scord/scord.hpp b/src/lib/scord/scord.hpp index 1a9a5c56..1325b5c6 100644 --- a/src/lib/scord/scord.hpp +++ b/src/lib/scord/scord.hpp @@ -73,6 +73,9 @@ remove_adhoc_storage(const server& srv, const adhoc_storage& adhoc_storage); void deploy_adhoc_storage(const server& srv, const adhoc_storage& adhoc_storage); +void +tear_down_adhoc_storage(const server& srv, const adhoc_storage& adhoc_storage); + scord::pfs_storage register_pfs_storage(const server& srv, const std::string& name, enum scord::pfs_storage::type type, diff --git a/src/scord/rpc_handlers.cpp b/src/scord/rpc_handlers.cpp index 9c4045bc..329f4c71 100644 --- a/src/scord/rpc_handlers.cpp +++ b/src/scord/rpc_handlers.cpp @@ -401,6 +401,32 @@ deploy_adhoc_storage(const request& req, std::uint64_t adhoc_id) { req.respond(resp); } +void +tear_down_adhoc_storage(const request& req, std::uint64_t adhoc_id) { + + using scord::network::generic_response; + using scord::network::get_address; + + const auto rpc_name = "ADM_"s + __FUNCTION__; + const auto rpc_id = remote_procedure::new_id(); + + LOGGER_INFO("rpc id: {} name: {} from: {} => " + "body: {{adhoc_id: {}}}", + rpc_id, std::quoted(rpc_name), std::quoted(get_address(req)), + adhoc_id); + + // TODO: actually tear down the adhoc storage instance + + const auto resp = generic_response{rpc_id, scord::error_code::success}; + + LOGGER_INFO("rpc id: {} name: {} to: {} <= " + "body: {{retval: {}}}", + rpc_id, std::quoted(rpc_name), std::quoted(get_address(req)), + scord::error_code::success); + + req.respond(resp); +} + void register_pfs_storage(const request& req, const std::string& name, enum scord::pfs_storage::type type, diff --git a/src/scord/rpc_handlers.hpp b/src/scord/rpc_handlers.hpp index c0bc3963..1ccc493d 100644 --- a/src/scord/rpc_handlers.hpp +++ b/src/scord/rpc_handlers.hpp @@ -62,6 +62,9 @@ remove_adhoc_storage(const request& req, std::uint64_t adhoc_id); void deploy_adhoc_storage(const request& req, std::uint64_t adhoc_id); +void +tear_down_adhoc_storage(const request& req, std::uint64_t adhoc_id); + void register_pfs_storage(const request& req, const std::string& name, enum scord::pfs_storage::type type, diff --git a/src/scord/scord.cpp b/src/scord/scord.cpp index 3615a8bf..bdace7a7 100644 --- a/src/scord/scord.cpp +++ b/src/scord/scord.cpp @@ -192,6 +192,7 @@ main(int argc, char* argv[]) { daemon.set_handler(EXPAND(update_adhoc_storage)); daemon.set_handler(EXPAND(remove_adhoc_storage)); daemon.set_handler(EXPAND(deploy_adhoc_storage)); + daemon.set_handler(EXPAND(tear_down_adhoc_storage)); daemon.set_handler(EXPAND(register_pfs_storage)); daemon.set_handler(EXPAND(update_pfs_storage)); daemon.set_handler(EXPAND(remove_pfs_storage)); -- GitLab