Loading examples/cxx/ADM_register_adhoc_storage.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,9 @@ #include <fmt/format.h> #include <admire.hpp> #define NINPUTS 10 #define NOUTPUTS 5 int main(int argc, char* argv[]) { Loading @@ -38,12 +41,14 @@ main(int argc, char* argv[]) { admire::server server{"tcp", argv[1]}; ADM_job_t job{}; std::string id; ADM_adhoc_context_t ctx{}; ADM_storage_t adhoc_storage{}; ADM_return_t ret = ADM_SUCCESS; try { ret = admire::register_adhoc_storage(server, ctx, &adhoc_storage); ret = admire::register_adhoc_storage(server, job, id, ctx, &adhoc_storage); } catch(const std::exception& e) { fmt::print(stderr, "FATAL: ADM_register_adhoc_storage() failed: {}\n", e.what()); Loading src/common/api/admire_types.hpp +9 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,11 @@ struct adhoc_storage : public storage { adhoc_storage(enum storage::type type, std::string id, ADM_adhoc_context_t ctx); adhoc_storage(const adhoc_storage& other) noexcept; /*adhoc_storage(enum storage::type type, std::string id, std::uint64_t server_id, ADM_adhoc_context_t ctx); adhoc_storage(enum storage::type type, std::string id, const admire::adhoc_storage::ctx& ctx);*/ adhoc_storage(adhoc_storage&&) noexcept = default; adhoc_storage& operator=(const adhoc_storage&) noexcept; Loading @@ -308,6 +313,10 @@ struct adhoc_storage : public storage { operator=(adhoc_storage&&) noexcept = default; ~adhoc_storage() override; std::uint64_t id() const; std::shared_ptr<storage::ctx> context() const final; Loading src/common/api/types.cpp +18 −1 Original line number Diff line number Diff line Loading @@ -1112,8 +1112,12 @@ adhoc_storage::ctx::should_flush() const { class adhoc_storage::impl { static std::uint64_t generate_id() { return 42; } public: explicit impl(adhoc_storage::ctx ctx) : m_ctx(std::move(ctx)) {} explicit impl(adhoc_storage::ctx ctx) : m_id(generate_id()), m_ctx(std::move(ctx)) {} impl(const impl& rhs) = default; impl(impl&& rhs) = default; impl& Loading @@ -1121,12 +1125,15 @@ public: impl& operator=(impl&&) noexcept = default; std::uint64_t id() const { return m_id; } adhoc_storage::ctx context() const { return m_ctx; } private: std::uint64_t m_id; adhoc_storage::ctx m_ctx; }; Loading Loading @@ -1154,6 +1161,16 @@ adhoc_storage::operator=(const adhoc_storage& other) noexcept { return *this; } /*adhoc_storage::adhoc_storage(enum storage::type type, std::string id, const adhoc_storage::ctx& ctx) : storage(type, std::move(id)), m_pimpl(std::make_unique<impl>(ctx)) {}*/ std::uint64_t adhoc_storage::id() const { return m_pimpl->id(); } std::shared_ptr<storage::ctx> adhoc_storage::context() const { return std::make_shared<adhoc_storage::ctx>(m_pimpl->context()); Loading src/common/net/proto/rpc_types.h +2 −2 Original line number Diff line number Diff line Loading @@ -296,9 +296,9 @@ MERCURY_GEN_PROC( ); /// ADM_register_adhoc_storage MERCURY_GEN_PROC(ADM_register_adhoc_storage_in_t, ((int32_t) (reqs))) MERCURY_GEN_PROC(ADM_register_adhoc_storage_in_t, ((ADM_job_t) (job))((hg_const_string_t) (id))((ADM_adhoc_context_t)(ctx))); MERCURY_GEN_PROC(ADM_register_adhoc_storage_out_t, ((int32_t) (ret))) MERCURY_GEN_PROC(ADM_register_adhoc_storage_out_t, ((int32_t) (retval))((ADM_storage_t)(adhoc_storage))); /// ADM_update_adhoc_storage MERCURY_GEN_PROC(ADM_update_adhoc_storage_in_t, ((int32_t) (reqs))) Loading src/lib/admire.cpp +7 −21 Original line number Diff line number Diff line Loading @@ -232,31 +232,17 @@ remove_job(const server& srv, const job& job) { } ADM_return_t register_adhoc_storage(const server& srv, ADM_adhoc_context_t ctx, ADM_storage_t* adhoc_storage) { register_adhoc_storage(const server& srv, const job& job, const std::string& id, const adhoc_storage::ctx& ctx) { (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_register_adhoc_storage(...)"); const auto rv = detail::register_adhoc_storage(srv, job, id, ctx); ADM_register_adhoc_storage_in_t in{}; ADM_register_adhoc_storage_out_t out; const auto rpc = endp.call("ADM_register_adhoc_storage", &in, &out); if(out.ret < 0) { LOGGER_ERROR("ADM_register_adhoc_storage() = {}", out.ret); return static_cast<ADM_return_t>(out.ret); if(!rv) { throw std::runtime_error(fmt::format("ADM_register_adhoc_storage() error: {}", ADM_strerror(rv.error()))); } LOGGER_INFO("ADM_register_adhoc_storage() = {}", ADM_SUCCESS); return ADM_SUCCESS; return rv.value(); } ADM_return_t Loading Loading
examples/cxx/ADM_register_adhoc_storage.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,9 @@ #include <fmt/format.h> #include <admire.hpp> #define NINPUTS 10 #define NOUTPUTS 5 int main(int argc, char* argv[]) { Loading @@ -38,12 +41,14 @@ main(int argc, char* argv[]) { admire::server server{"tcp", argv[1]}; ADM_job_t job{}; std::string id; ADM_adhoc_context_t ctx{}; ADM_storage_t adhoc_storage{}; ADM_return_t ret = ADM_SUCCESS; try { ret = admire::register_adhoc_storage(server, ctx, &adhoc_storage); ret = admire::register_adhoc_storage(server, job, id, ctx, &adhoc_storage); } catch(const std::exception& e) { fmt::print(stderr, "FATAL: ADM_register_adhoc_storage() failed: {}\n", e.what()); Loading
src/common/api/admire_types.hpp +9 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,11 @@ struct adhoc_storage : public storage { adhoc_storage(enum storage::type type, std::string id, ADM_adhoc_context_t ctx); adhoc_storage(const adhoc_storage& other) noexcept; /*adhoc_storage(enum storage::type type, std::string id, std::uint64_t server_id, ADM_adhoc_context_t ctx); adhoc_storage(enum storage::type type, std::string id, const admire::adhoc_storage::ctx& ctx);*/ adhoc_storage(adhoc_storage&&) noexcept = default; adhoc_storage& operator=(const adhoc_storage&) noexcept; Loading @@ -308,6 +313,10 @@ struct adhoc_storage : public storage { operator=(adhoc_storage&&) noexcept = default; ~adhoc_storage() override; std::uint64_t id() const; std::shared_ptr<storage::ctx> context() const final; Loading
src/common/api/types.cpp +18 −1 Original line number Diff line number Diff line Loading @@ -1112,8 +1112,12 @@ adhoc_storage::ctx::should_flush() const { class adhoc_storage::impl { static std::uint64_t generate_id() { return 42; } public: explicit impl(adhoc_storage::ctx ctx) : m_ctx(std::move(ctx)) {} explicit impl(adhoc_storage::ctx ctx) : m_id(generate_id()), m_ctx(std::move(ctx)) {} impl(const impl& rhs) = default; impl(impl&& rhs) = default; impl& Loading @@ -1121,12 +1125,15 @@ public: impl& operator=(impl&&) noexcept = default; std::uint64_t id() const { return m_id; } adhoc_storage::ctx context() const { return m_ctx; } private: std::uint64_t m_id; adhoc_storage::ctx m_ctx; }; Loading Loading @@ -1154,6 +1161,16 @@ adhoc_storage::operator=(const adhoc_storage& other) noexcept { return *this; } /*adhoc_storage::adhoc_storage(enum storage::type type, std::string id, const adhoc_storage::ctx& ctx) : storage(type, std::move(id)), m_pimpl(std::make_unique<impl>(ctx)) {}*/ std::uint64_t adhoc_storage::id() const { return m_pimpl->id(); } std::shared_ptr<storage::ctx> adhoc_storage::context() const { return std::make_shared<adhoc_storage::ctx>(m_pimpl->context()); Loading
src/common/net/proto/rpc_types.h +2 −2 Original line number Diff line number Diff line Loading @@ -296,9 +296,9 @@ MERCURY_GEN_PROC( ); /// ADM_register_adhoc_storage MERCURY_GEN_PROC(ADM_register_adhoc_storage_in_t, ((int32_t) (reqs))) MERCURY_GEN_PROC(ADM_register_adhoc_storage_in_t, ((ADM_job_t) (job))((hg_const_string_t) (id))((ADM_adhoc_context_t)(ctx))); MERCURY_GEN_PROC(ADM_register_adhoc_storage_out_t, ((int32_t) (ret))) MERCURY_GEN_PROC(ADM_register_adhoc_storage_out_t, ((int32_t) (retval))((ADM_storage_t)(adhoc_storage))); /// ADM_update_adhoc_storage MERCURY_GEN_PROC(ADM_update_adhoc_storage_in_t, ((int32_t) (reqs))) Loading
src/lib/admire.cpp +7 −21 Original line number Diff line number Diff line Loading @@ -232,31 +232,17 @@ remove_job(const server& srv, const job& job) { } ADM_return_t register_adhoc_storage(const server& srv, ADM_adhoc_context_t ctx, ADM_storage_t* adhoc_storage) { register_adhoc_storage(const server& srv, const job& job, const std::string& id, const adhoc_storage::ctx& ctx) { (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_register_adhoc_storage(...)"); const auto rv = detail::register_adhoc_storage(srv, job, id, ctx); ADM_register_adhoc_storage_in_t in{}; ADM_register_adhoc_storage_out_t out; const auto rpc = endp.call("ADM_register_adhoc_storage", &in, &out); if(out.ret < 0) { LOGGER_ERROR("ADM_register_adhoc_storage() = {}", out.ret); return static_cast<ADM_return_t>(out.ret); if(!rv) { throw std::runtime_error(fmt::format("ADM_register_adhoc_storage() error: {}", ADM_strerror(rv.error()))); } LOGGER_INFO("ADM_register_adhoc_storage() = {}", ADM_SUCCESS); return ADM_SUCCESS; return rv.value(); } ADM_return_t Loading