Skip to content
Snippets Groups Projects
Verified Commit 0fc2880e authored by Alberto Miranda's avatar Alberto Miranda :hotsprings:
Browse files

ADM_ping RPC now responds to make it consistent with other RPCs

parent 3b4e9b69
No related branches found
No related tags found
1 merge request!31Resolve "Add tests to verify RPC arguments."
......@@ -251,6 +251,12 @@ MERCURY_GEN_STRUCT_PROC(
// clang-format off
MERCURY_GEN_PROC(
ADM_ping_out_t,
((hg_uint64_t) (op_id))
((int32_t) (retval))
);
/// ADM_register_job
MERCURY_GEN_PROC(
ADM_register_job_in_t,
......
......@@ -71,7 +71,7 @@ init_logger() {
void
rpc_registration_cb(scord::network::rpc_client* client) {
REGISTER_RPC(client, "ADM_ping", void, void, NULL, false);
REGISTER_RPC(client, "ADM_ping", void, ADM_ping_out_t, NULL, true);
REGISTER_RPC(client, "ADM_register_job", ADM_register_job_in_t,
ADM_register_job_out_t, NULL, true);
......
......@@ -34,7 +34,7 @@ using namespace std::literals;
void
rpc_registration_cb(scord::network::rpc_client* client) {
REGISTER_RPC(client, "ADM_ping", void, void, NULL, false);
REGISTER_RPC(client, "ADM_ping", void, ADM_ping_out_t, NULL, true);
REGISTER_RPC(client, "ADM_register_job", ADM_register_job_in_t,
ADM_register_job_out_t, NULL, true);
......@@ -184,12 +184,15 @@ ping(const server& srv) {
rpc_id, std::quoted("ADM_"s + __FUNCTION__),
std::quoted(rpc_client.self_address()));
const auto rpc = endp.call("ADM_ping");
ADM_ping_out_t out;
const auto rpc = endp.call("ADM_ping", nullptr, &out);
LOGGER_INFO("rpc id: {} name: {} from: {} <= "
"body: {{retval: {}}} [op_id: {}]",
rpc_id, std::quoted("ADM_"s + __FUNCTION__),
std::quoted(rpc.origin()), ADM_SUCCESS, "n/a");
std::quoted(rpc.origin()),
static_cast<admire::error_code>(out.retval), out.op_id);
return ADM_SUCCESS;
}
......
......@@ -24,16 +24,43 @@
#include <logger/logger.hpp>
#include <net/proto/rpc_types.h>
#include <net/engine.hpp>
#include "rpc_handlers.hpp"
struct remote_procedure {
static std::uint64_t
new_id() {
static std::atomic_uint64_t current_id;
return current_id++;
}
};
static void
ADM_ping(hg_handle_t h) {
using scord::network::utils::get_address;
[[maybe_unused]] hg_return_t ret;
[[maybe_unused]] margo_instance_id mid = margo_hg_handle_get_instance(h);
LOGGER_INFO("PING(noargs)");
const auto id = remote_procedure::new_id();
LOGGER_INFO("rpc id: {} name: {} from: {} => "
"body: {{}}",
id, std::quoted(__FUNCTION__), std::quoted(get_address(h)));
ADM_ping_out_t out;
out.op_id = id;
out.retval = ADM_SUCCESS;
LOGGER_INFO("rpc id: {} name: {} to: {} <= "
"body: {{retval: {}}}",
id, std::quoted(__FUNCTION__), std::quoted(get_address(h)),
ADM_SUCCESS);
ret = margo_respond(h, &out);
assert(ret == HG_SUCCESS);
ret = margo_destroy(h);
assert(ret == HG_SUCCESS);
......
......@@ -180,7 +180,7 @@ main(int argc, char* argv[]) {
const auto rpc_registration_cb = [](auto&& ctx) {
LOGGER_INFO(" * Registering RPCs handlers...");
REGISTER_RPC(ctx, "ADM_ping", void, void, ADM_ping, false);
REGISTER_RPC(ctx, "ADM_ping", void, ADM_ping_out_t, ADM_ping, true);
// TODO: add internal RPCs for communication with scord
};
......
......@@ -48,15 +48,22 @@ ADM_ping(hg_handle_t h) {
const auto id = remote_procedure::new_id();
LOGGER_INFO("rpc id: {} name: {}, from: {} => "
LOGGER_INFO("rpc id: {} name: {} from: {} => "
"body: {{}}",
id, std::quoted(__FUNCTION__), std::quoted(get_address(h)));
LOGGER_INFO("rpc id: {} name: {}, to: {} <= "
ADM_ping_out_t out;
out.op_id = id;
out.retval = ADM_SUCCESS;
LOGGER_INFO("rpc id: {} name: {} to: {} <= "
"body: {{retval: {}}}",
id, std::quoted(__FUNCTION__), std::quoted(get_address(h)),
ADM_SUCCESS);
ret = margo_respond(h, &out);
assert(ret == HG_SUCCESS);
ret = margo_destroy(h);
assert(ret == HG_SUCCESS);
}
......
......@@ -183,7 +183,7 @@ main(int argc, char* argv[]) {
const auto rpc_registration_cb = [](auto&& ctx) {
LOGGER_INFO(" * Registering RPCs handlers...");
REGISTER_RPC(ctx, "ADM_ping", void, void, ADM_ping, false);
REGISTER_RPC(ctx, "ADM_ping", void, ADM_ping_out_t, ADM_ping, true);
REGISTER_RPC(ctx, "ADM_register_job", ADM_register_job_in_t,
ADM_register_job_out_t, ADM_register_job, true);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment