Resolve "Refactor library RPC implementation of `admire::update_pfs_storage`"

Closes #101 (closed)

Edited by Alberto Miranda

Merge request reports

Loading
+1 −1
Changes for examples/c/ADM_update_pfs_storage.c: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -89,7 +89,7 @@ main(int argc, char* argv[]) {
    }

    // We can now request the update to the server
    if((ret = ADM_update_pfs_storage(server, new_pfs_ctx, pfs_storage)) !=
    if((ret = ADM_update_pfs_storage(server, pfs_storage, new_pfs_ctx)) !=
       ADM_SUCCESS) {
        fprintf(stderr, "ADM_update_pfs_storage() failed: %s\n",
                ADM_strerror(ret));
+13 −12
Changes for examples/cxx/ADM_update_pfs_storage.cpp: 13 added lines, 12 removed lines.
Original line number Diff line number Diff line
@@ -37,25 +37,26 @@ main(int argc, char* argv[]) {

    admire::server server{"tcp", argv[1]};

    ADM_pfs_context_t ctx{};
    ADM_pfs_storage_t pfs_storage{};
    ADM_return_t ret = ADM_SUCCESS;
    std::string pfs_name = "gpfs_scratch";
    std::string pfs_mount = "/gpfs/scratch";
    std::string new_pfs_mount = "/gpfs/scratch2";

    try {
        ret = admire::update_pfs_storage(server, ctx, pfs_storage);

        const auto pfs_storage = admire::register_pfs_storage(
                server, pfs_name, admire::pfs_storage::type::gpfs,
                admire::pfs_storage::ctx{pfs_mount});

        admire::update_pfs_storage(server, pfs_storage,
                                   admire::pfs_storage::ctx{new_pfs_mount});
    } catch(const std::exception& e) {
        fmt::print(stderr, "FATAL: ADM_update_pfs_storage() failed: {}\n",
        fmt::print(stderr,
                   "FATAL: ADM_update_pfs_storage() or "
                   "ADM_update_pfs_storage() failed: {}\n",
                   e.what());
        exit(EXIT_FAILURE);
    }

    if(ret != ADM_SUCCESS) {
        fmt::print(stdout,
                   "ADM_update_pfs_storage() remote procedure not completed "
                   "successfully\n");
        exit(EXIT_FAILURE);
    }

    fmt::print(stdout, "ADM_update_pfs_storage() remote procedure completed "
                       "successfully\n");
}
+10 −2
Changes for src/common/net/proto/rpc_types.h: 10 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -403,9 +403,17 @@ MERCURY_GEN_PROC(
);

/// ADM_update_pfs_storage
MERCURY_GEN_PROC(ADM_update_pfs_storage_in_t, ((int32_t) (reqs)))
MERCURY_GEN_PROC(
    ADM_update_pfs_storage_in_t,
        ((ADM_pfs_context_t) (pfs_storage_ctx))
        ((hg_uint64_t)       (server_id))
);

MERCURY_GEN_PROC(ADM_update_pfs_storage_out_t, ((int32_t) (ret)))
MERCURY_GEN_PROC(
    ADM_update_pfs_storage_out_t,
        ((hg_uint64_t) (op_id))
        ((hg_int32_t)  (retval))
);

/// ADM_remove_pfs_storage
MERCURY_GEN_PROC(ADM_remove_pfs_storage_in_t, ((int32_t) (reqs)))
+38 −0
Changes for src/lib/detail/impl.cpp: 38 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -556,4 +556,42 @@ register_pfs_storage(const server& srv, const std::string& name,
    return rpc_pfs_storage;
}

admire::error_code
update_pfs_storage(const server& srv, const pfs_storage& pfs_storage,
                   const admire::pfs_storage::ctx& pfs_storage_ctx) {

    scord::network::rpc_client rpc_client{srv.protocol(), rpc_registration_cb};

    const auto rpc_id = ::api::remote_procedure::new_id();
    auto endp = rpc_client.lookup(srv.address());

    LOGGER_INFO("rpc id: {} name: {} from: {} => "
                "body: {{pfs_storage_id: {}}}",
                rpc_id, std::quoted("ADM_"s + __FUNCTION__),
                std::quoted(rpc_client.self_address()), pfs_storage.id());

    const auto rpc_ctx = api::convert(pfs_storage_ctx);

    ADM_update_pfs_storage_in_t in{rpc_ctx.get(), pfs_storage.id()};
    ADM_update_pfs_storage_out_t out;

    const auto rpc = endp.call("ADM_update_pfs_storage", &in, &out);

    if(const auto rv = admire::error_code{out.retval}; !rv) {
        LOGGER_ERROR("rpc id: {} name: {} from: {} <= "
                     "body: {{retval: {}}} [op_id: {}]",
                     rpc_id, std::quoted("ADM_"s + __FUNCTION__),
                     std::quoted(rpc.origin()), rv, out.op_id);
        return rv;
    }

    LOGGER_INFO("rpc id: {} name: {} from: {} <= "
                "body: {{retval: {}}} [op_id: {}]",
                rpc_id, std::quoted("ADM_"s + __FUNCTION__),
                std::quoted(rpc.origin()), admire::error_code::success,
                out.op_id);

    return admire::error_code::success;
}

} // namespace admire::detail
+5 −2
Changes for src/lib/detail/impl.hpp: 5 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -66,13 +66,16 @@ admire::error_code
remove_adhoc_storage(const server& srv, const adhoc_storage& adhoc_storage);

admire::error_code
deploy_adhoc_storage(const server& srv,
                     const adhoc_storage& adhoc_storage);
deploy_adhoc_storage(const server& srv, const adhoc_storage& adhoc_storage);

tl::expected<admire::pfs_storage, admire::error_code>
register_pfs_storage(const server& srv, const std::string& name,
                     enum pfs_storage::type type, const pfs_storage::ctx& ctx);

admire::error_code
update_pfs_storage(const server& srv, const pfs_storage& pfs_storage,
                   const admire::pfs_storage::ctx& pfs_storage_ctx);

} // namespace admire::detail

#endif // SCORD_ADMIRE_IMPL_HPP
Loading
Loading