Verified Commit 337e9dab authored by Alberto Miranda's avatar Alberto Miranda ♨️
Browse files

Use conversion types in RPC submission/handling code

parent c227c358
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -71,9 +71,6 @@ struct job {
    job_id
    id() const;

    [[nodiscard]] ADM_job_t
    to_ctype() const;

private:
    class impl;
    std::unique_ptr<impl> m_pimpl;
+1 −7
Original line number Diff line number Diff line
@@ -54,13 +54,7 @@ ADM_register_job(ADM_server_t server, ADM_job_requirements_t reqs,
        return rv.error();
    }

    const auto jh = ADM_job_create(rv->m_id);

    if(!jh) {
        return ADM_EOTHER;
    }

    *job = jh;
    *job = admire::unmanaged_rpc_type<admire::job>{*rv}.get();

    return ADM_SUCCESS;
}
+18 −17
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@
#include <tl/expected.hpp>
#include <net/engine.hpp>
#include <net/proto/rpc_types.h>
#include <utils/c_ptr.hpp>
#include <admire_types.hpp>
#include "impl.hpp"

void
@@ -150,9 +150,9 @@ namespace admire::detail {
admire::error_code
ping(const server& srv) {

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

    auto endp = rpc_client.lookup(srv.m_address);
    auto endp = rpc_client.lookup(srv.address());

    LOGGER_INFO("ADM_ping()");
    endp.call("ADM_ping");
@@ -161,33 +161,34 @@ ping(const server& srv) {
    return ADM_SUCCESS;
}


tl::expected<admire::job, admire::error_code>
register_job(const admire::server& srv, const admire::job_requirements& reqs) {

    using scord::utils::c_ptr;
    using job_requirements_ptr =
            c_ptr<adm_job_requirements, ADM_job_requirements_destroy>;
    const auto preqs = job_requirements_ptr{reqs.to_rpc_type()};

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

    auto endp = rpc_client.lookup(srv.m_address);
    auto endp = rpc_client.lookup(srv.address());

    LOGGER_INFO("RPC ({}): {{{}}}", "ADM_register_job", reqs);

    ADM_register_job_in_t in{*preqs};
    auto rpc_reqs = managed_rpc_type<admire::job_requirements>{reqs};

    ADM_register_job_in_t in{*rpc_reqs.get()};
    ADM_register_job_out_t out;

    endp.call("ADM_register_job", &in, &out);

    if(out.ret < 0) {
        LOGGER_ERROR("ADM_register_job() = {}", out.ret);
        return tl::make_unexpected(static_cast<admire::error_code>(out.ret));
    if(out.retval < 0) {
        LOGGER_ERROR("RPC ({}) = {}", "ADM_register_job", out.retval);
        return tl::make_unexpected(static_cast<admire::error_code>(out.retval));
    }

    LOGGER_INFO("ADM_register_job() = {}", ADM_SUCCESS);
    return admire::job{42};
    const auto rpc_job = managed_rpc_type<ADM_job_t>{out.job};
    const admire::job job = rpc_job.get();

    LOGGER_INFO("RPC ({}) = {{{}, job: {{{}}}}}", "ADM_register_job",
                ADM_SUCCESS, job.id());

    return job;
}

} // namespace admire::detail
+8 −2
Original line number Diff line number Diff line
@@ -68,9 +68,15 @@ ADM_register_job(hg_handle_t h) {
    const auto id = remote_procedure::new_id();
    LOGGER_INFO("RPC ID {} ({}): {{{}}}", id, __FUNCTION__, reqs);

    out.ret = ADM_SUCCESS;
    const auto job = admire::job{42};

    LOGGER_INFO("RPC ID {} ({}) = {}", id, __FUNCTION__, out.ret);
    const auto rpc_job = admire::unmanaged_rpc_type<admire::job>{job};

    out.retval = ADM_SUCCESS;
    out.job = rpc_job.get();

    LOGGER_INFO("RPC ID {} ({}) = {{{}, job: {{{}}}}}", id, __FUNCTION__,
                out.retval, job);

    ret = margo_respond(h, &out);
    assert(ret == HG_SUCCESS);