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

Redefine RPC types for ADM_transfer_dataset

parent ce832455
Loading
Loading
Loading
Loading
+34 −9
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ MERCURY_GEN_STRUCT_PROC(
hg_return_t
hg_proc_ADM_job_t(hg_proc_t proc, void* data);

struct adm_qos_entity {
typedef struct adm_qos_entity {
    ADM_qos_scope_t e_scope;
    union {
        ADM_node_t e_node;
@@ -84,17 +84,27 @@ struct adm_qos_entity {
        ADM_dataset_t e_dataset;
        ADM_transfer_t e_transfer;
    };
};
} adm_qos_entity;

// TODO: encoder/decoder
hg_return_t
hg_proc_ADM_qos_entity_t(hg_proc_t proc, void* data);

typedef struct adm_qos_limit {
    ADM_qos_entity_t l_entity;
    ADM_qos_class_t l_class;
    uint64_t l_value;
    hg_uint64_t l_value;
} adm_qos_limit;

// TODO: encoder/decoder
// clang-format off
MERCURY_GEN_STRUCT_PROC(
    adm_qos_limit, // NOLINT
        ((ADM_qos_entity_t) (l_entity))
        ((ADM_qos_class_t) (l_class))
        ((hg_uint64_t) (l_value))
)
// clang-format on

typedef struct adm_transfer {
    uint64_t t_id;
@@ -377,17 +387,32 @@ MERCURY_GEN_PROC(ADM_in_transit_ops_in_t, ((hg_const_string_t) (in_transit)))

MERCURY_GEN_PROC(ADM_in_transit_ops_out_t, ((int32_t) (ret)))

struct adm_qos_limit_list {
    /** An array of QoS limits */
    adm_qos_limit* l_limits;
    /** The length of the array */
    size_t l_length;
};

hg_return_t
hg_proc_ADM_qos_limit_list_t(hg_proc_t proc, void* data);

/// ADM_transfer_dataset

MERCURY_GEN_PROC(
    ADM_transfer_dataset_in_t,
        ((hg_const_string_t) (source))((hg_const_string_t) (destination))(
                (hg_const_string_t) (qos_constraints))(
                (hg_const_string_t) (distribution))((int32_t) (job_id)))
        ((ADM_job_t) (job_id))
        ((ADM_dataset_list_t) (sources))
        ((ADM_dataset_list_t) (targets))
        ((ADM_qos_limit_list_t) (qos_limits))
        ((hg_int32_t) (distribution))
)

MERCURY_GEN_PROC(
    ADM_transfer_dataset_out_t,
                 ((int32_t) (ret))
((hg_const_string_t) (transfer_handle)))

MERCURY_GEN_PROC(ADM_transfer_dataset_out_t,
                 ((int32_t) (ret))((hg_const_string_t) (transfer_handle)))

/// ADM_set_dataset_information

+2 −21
Original line number Diff line number Diff line
@@ -980,28 +980,9 @@ ADM_transfer_dataset(hg_handle_t h) {
    ret = margo_get_input(h, &in);
    assert(ret == HG_SUCCESS);

    out.ret = -1;
    out.transfer_handle = "fail";
    // TODO

    if(in.source == nullptr) {
        LOGGER_ERROR("ADM_transfer_dataset(): invalid source (nullptr)");
    } else if(in.destination == nullptr) {
        LOGGER_ERROR("ADM_transfer_dataset(): invalid destination (nullptr)");
    } else if(in.qos_constraints == nullptr) {
        LOGGER_ERROR(
                "ADM_transfer_dataset(): invalid qos_constraints (nullptr)");
    } else if(in.distribution == nullptr) {
        LOGGER_ERROR("ADM_transfer_dataset(): invalid distribution (nullptr)");
    } else if(in.job_id < 0) {
        LOGGER_ERROR("ADM_transfer_dataset(): invalid job_id (< 0)");
    } else {
        LOGGER_INFO("ADM_transfer_dataset({},{},{},{},{})", in.source,
                    in.destination, in.qos_constraints, in.distribution,
                    in.job_id);
    out.ret = 0;
        out.transfer_handle = "ok";
    }


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