Verified Commit 3d4fc97d authored by ANA MANZANO RODRIGUEZ's avatar ANA MANZANO RODRIGUEZ Committed by Alberto Miranda
Browse files

First attempt to recover adhoc_storage

parent f46dafa3
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -78,7 +78,11 @@ main(int argc, char* argv[]) {
    fprintf(stdout, "ADM_register_adhoc_storage() remote procedure completed "
                    "successfully\n");

    ret = ADM_update_adhoc_storage(server, ctx, adhoc_storage);
    ADM_adhoc_context_t ctx_updated = ADM_adhoc_context_create(
            ADM_ADHOC_MODE_SEPARATE_NEW, ADM_ADHOC_ACCESS_RDWR, 42, 200, false);
    assert(ctx_updated);

    ret = ADM_update_adhoc_storage(server, ctx_updated, adhoc_storage);

    if(ret != ADM_SUCCESS) {
        fprintf(stderr,
+28 −3
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@
#include <fmt/format.h>
#include <admire.hpp>

#define NINPUTS  10
#define NOUTPUTS 5

int
main(int argc, char* argv[]) {
@@ -38,12 +40,35 @@ main(int argc, char* argv[]) {

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

    ADM_adhoc_context_t ctx{};
    ADM_storage_t adhoc_storage{};
    const auto inputs = prepare_datasets("input-dataset-{}", NINPUTS);
    const auto outputs = prepare_datasets("output-dataset-{}", NOUTPUTS);

    auto p = std::make_unique<admire::adhoc_storage>(
            admire::storage::type::gekkofs, "foobar",
            admire::adhoc_storage::execution_mode::separate_new,
            admire::adhoc_storage::access_type::read_write, 42, 100, false);

    admire::job_requirements reqs(inputs, outputs, std::move(p));

    std::string user_id = "adhoc_storage_42";

    const auto adhoc_storage_ctx = admire::adhoc_storage::ctx{
            admire::adhoc_storage::execution_mode::separate_new,
            admire::adhoc_storage::access_type::read_write, 42, 100, false};

    const auto adhoc_storage_ctx_updated = admire::adhoc_storage::ctx{
            admire::adhoc_storage::execution_mode::separate_new,
            admire::adhoc_storage::access_type::read_write, 42, 200, false};
    ADM_return_t ret = ADM_SUCCESS;

    try {
        ret = admire::update_adhoc_storage(server, ctx, adhoc_storage);
        const auto job = admire::register_job(server, reqs);

        const auto adhoc_storage = admire::register_adhoc_storage(
                server, job, user_id, adhoc_storage_ctx);

        const auto adhoc_storage_updated = admire::update_adhoc_storage(
                server, adhoc_storage_ctx_updated, adhoc_storage);
    } catch(const std::exception& e) {
        fmt::print(stderr, "FATAL: ADM_update_adhoc_storage() failed: {}\n",
                   e.what());
+11 −2
Original line number Diff line number Diff line
@@ -346,9 +346,18 @@ MERCURY_GEN_PROC(
);

/// ADM_update_adhoc_storage
MERCURY_GEN_PROC(ADM_update_adhoc_storage_in_t, ((int32_t) (reqs)))
MERCURY_GEN_PROC(
    ADM_update_adhoc_storage_in_t,
        ((ADM_adhoc_context_t)(adhoc_storage_ctx))
        ((ADM_storage_t)(adhoc_storage))
);

MERCURY_GEN_PROC(ADM_update_adhoc_storage_out_t, ((int32_t) (ret)))
MERCURY_GEN_PROC(
    ADM_update_adhoc_storage_out_t,
        ((hg_uint64_t) (op_id))
        ((int32_t) (retval))
        ((uint64_t)(server_id))
);

/// ADM_remove_adhoc_storage
MERCURY_GEN_PROC(ADM_remove_adhoc_storage_in_t, ((int32_t) (reqs)))
+11 −22
Original line number Diff line number Diff line
@@ -248,32 +248,21 @@ register_adhoc_storage(const server& srv, const std::string& name,
    return rv.value();
}

ADM_return_t
update_adhoc_storage(const server& srv, ADM_adhoc_context_t ctx,
                     ADM_storage_t adhoc_storage) {

    (void) srv;
    (void) ctx;
    (void) adhoc_storage;

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

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

    LOGGER_INFO("ADM_update_adhoc_storage(...)");

    ADM_update_adhoc_storage_in_t in{};
    ADM_update_adhoc_storage_out_t out;
admire::adhoc_storage
update_adhoc_storage(const server& srv,
                     const adhoc_storage::ctx& adhoc_storage_ctx,
                     const adhoc_storage& adhoc_storage) {

    const auto rpc = endp.call("ADM_update_adhoc_storage", &in, &out);
    const auto rv =
            detail::update_adhoc_storage(srv, adhoc_storage_ctx, adhoc_storage);

    if(out.ret < 0) {
        LOGGER_ERROR("ADM_update_adhoc_storage() = {}", out.ret);
        return static_cast<ADM_return_t>(out.ret);
    if(!rv) {
        throw std::runtime_error(
                fmt::format("ADM_update_adhoc_storage() error: {}",
                            ADM_strerror(rv.error())));
    }

    LOGGER_INFO("ADM_update_adhoc_storage() = {}", ADM_SUCCESS);
    return ADM_SUCCESS;
    return rv.value();
}

ADM_return_t
+4 −3
Original line number Diff line number Diff line
@@ -62,9 +62,10 @@ register_adhoc_storage(const server& srv, const std::string& name,
                       enum adhoc_storage::type type,
                       const adhoc_storage::ctx& ctx);

ADM_return_t
update_adhoc_storage(const server& srv, ADM_adhoc_context_t ctx,
                     ADM_storage_t adhoc_storage);
admire::adhoc_storage
update_adhoc_storage(const server& srv,
                     const adhoc_storage::ctx& adhoc_storage_ctx,
                     const adhoc_storage& adhoc_storage);

ADM_return_t
remove_adhoc_storage(const server& srv, ADM_storage_t adhoc_storage);
Loading