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

API: Add adhoc_resources to ADM_adhoc_storage_t

parent b6574c68
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -239,7 +239,8 @@ register_adhoc_storage(const server& srv, const std::string& name,
                return tl::make_unexpected(ec);
            }

            return scord::adhoc_storage{type, name, resp.value(), ctx};
            return scord::adhoc_storage{type, name, resp.value(), ctx,
                                        resources};
        }
    }

+3 −1
Original line number Diff line number Diff line
@@ -429,11 +429,13 @@ ADM_dataset_list_destroy(ADM_dataset_list_t list);
 * @param[in] adhoc_ctx Some specific context information for the storage
 * tier or NULL if none is required. For instance, an adhoc storage system may
 * find it useful to provide an ADM_adhoc_context_t describing the instance.
 * @param[in] adhoc_resources The adhoc resources for this instance.
 * @return A valid ADM_ADHOC_STORAGE if successful, or NULL in case of failure.
 */
ADM_adhoc_storage_t
ADM_adhoc_storage_create(const char* name, ADM_adhoc_storage_type_t type,
                         uint64_t id, ADM_adhoc_context_t adhoc_ctx);
                         uint64_t id, ADM_adhoc_context_t adhoc_ctx,
                         ADM_adhoc_resources_t adhoc_resources);

/**
 * Destroy an ADM_ADHOC_STORAGE created by ADM_adhoc_storage_destroy().
+5 −1
Original line number Diff line number Diff line
@@ -255,7 +255,8 @@ struct adhoc_storage {
    explicit adhoc_storage(ADM_adhoc_storage_t storage);
    explicit operator ADM_adhoc_storage_t() const;
    adhoc_storage(enum adhoc_storage::type type, std::string name,
                  std::uint64_t id, const scord::adhoc_storage::ctx& ctx);
                  std::uint64_t id, const scord::adhoc_storage::ctx& ctx,
                  adhoc_storage::resources resources);

    adhoc_storage(const adhoc_storage& other) noexcept;
    adhoc_storage(adhoc_storage&&) noexcept;
@@ -274,6 +275,9 @@ struct adhoc_storage {
    adhoc_storage::ctx
    context() const;

    adhoc_storage::resources
    get_resources() const;

    void
    update(scord::adhoc_storage::ctx new_ctx);

+5 −2
Original line number Diff line number Diff line
@@ -430,7 +430,8 @@ ADM_dataset_list_destroy(ADM_dataset_list_t list) {

ADM_adhoc_storage_t
ADM_adhoc_storage_create(const char* name, ADM_adhoc_storage_type_t type,
                         uint64_t id, ADM_adhoc_context_t adhoc_ctx) {
                         uint64_t id, ADM_adhoc_context_t adhoc_ctx,
                         ADM_adhoc_resources_t adhoc_resources) {

    struct adm_adhoc_storage* adm_adhoc_storage =
            (struct adm_adhoc_storage*) malloc(sizeof(*adm_adhoc_storage));
@@ -466,6 +467,8 @@ ADM_adhoc_storage_create(const char* name, ADM_adhoc_storage_type_t type,

    memcpy(adm_adhoc_storage->s_adhoc_ctx, adhoc_ctx, sizeof(*adhoc_ctx));

    adm_adhoc_storage->s_resources = adhoc_resources;

    return adm_adhoc_storage;

cleanup_on_error:
@@ -824,7 +827,7 @@ ADM_job_requirements_create(ADM_dataset_t inputs[], size_t inputs_len,

    adm_job_reqs->r_adhoc_storage = ADM_adhoc_storage_create(
            adhoc_storage->s_name, adhoc_storage->s_type, adhoc_storage->s_id,
            adhoc_storage->s_adhoc_ctx);
            adhoc_storage->s_adhoc_ctx, adhoc_storage->s_resources);

    return adm_job_reqs;

+27 −12
Original line number Diff line number Diff line
@@ -585,9 +585,10 @@ class adhoc_storage::impl {
public:
    impl() = default;
    explicit impl(enum adhoc_storage::type type, std::string name,
                  std::uint64_t id, adhoc_storage::ctx ctx)
                  std::uint64_t id, adhoc_storage::ctx ctx,
                  struct adhoc_storage::resources resources)
        : m_type(type), m_name(std::move(name)), m_id(id),
          m_ctx(std::move(ctx)) {}
          m_ctx(std::move(ctx)), m_resources(std::move(resources)) {}
    impl(const impl& rhs) = default;
    impl(impl&& rhs) = default;
    impl&
@@ -616,6 +617,11 @@ public:
        return m_ctx;
    }

    struct adhoc_storage::resources
    resources() const {
        return m_resources;
    };

    void
    update(adhoc_storage::ctx new_ctx) {
        m_ctx = std::move(new_ctx);
@@ -645,6 +651,7 @@ private:
    std::string m_name;
    std::uint64_t m_id;
    adhoc_storage::ctx m_ctx;
    struct adhoc_storage::resources m_resources;
};

adhoc_storage::adhoc_storage() = default;
@@ -652,29 +659,32 @@ adhoc_storage::adhoc_storage() = default;
adhoc_storage::adhoc_storage(enum adhoc_storage::type type, std::string name,
                             std::uint64_t id, execution_mode exec_mode,
                             access_type access_type,
                             adhoc_storage::resources res,
                             struct adhoc_storage::resources res,
                             std::uint32_t walltime, bool should_flush)
    : m_pimpl(std::make_unique<impl>(
              type, std::move(name), id,
              adhoc_storage::ctx{exec_mode, access_type, std::move(res),
                                 walltime, should_flush})) {}
    : m_pimpl(std::make_unique<impl>(type, std::move(name), id,
                                     adhoc_storage::ctx{exec_mode, access_type,
                                                        walltime, should_flush},
                                     std::move(res))) {}

adhoc_storage::adhoc_storage(ADM_adhoc_storage_t st)
    : m_pimpl(std::make_unique<impl>(
              static_cast<enum adhoc_storage::type>(st->s_type), st->s_name,
              st->s_id, adhoc_storage::ctx{st->s_adhoc_ctx})) {}
              st->s_id, adhoc_storage::ctx{st->s_adhoc_ctx},
              adhoc_storage::resources{st->s_resources})) {}

adhoc_storage::operator ADM_adhoc_storage_t() const {
    return ADM_adhoc_storage_create(
            m_pimpl->name().c_str(),
            static_cast<ADM_adhoc_storage_type_t>(m_pimpl->type()),
            m_pimpl->id(),
            static_cast<ADM_adhoc_context_t>(m_pimpl->context()));
            m_pimpl->id(), static_cast<ADM_adhoc_context_t>(m_pimpl->context()),
            static_cast<ADM_adhoc_resources_t>(m_pimpl->resources()));
}

adhoc_storage::adhoc_storage(enum adhoc_storage::type type, std::string name,
                             std::uint64_t id, const adhoc_storage::ctx& ctx)
    : m_pimpl(std::make_unique<impl>(type, std::move(name), id, ctx)) {}
                             std::uint64_t id, const adhoc_storage::ctx& ctx,
                             adhoc_storage::resources resources)
    : m_pimpl(std::make_unique<impl>(type, std::move(name), id, ctx,
                                     std::move(resources))) {}

adhoc_storage::adhoc_storage(const adhoc_storage& other) noexcept
    : m_pimpl(std::make_unique<impl>(*other.m_pimpl)) {}
@@ -710,6 +720,11 @@ adhoc_storage::context() const {
    return m_pimpl->context();
}

adhoc_storage::resources
adhoc_storage::get_resources() const {
    return m_pimpl->resources();
}

void
adhoc_storage::update(scord::adhoc_storage::ctx new_ctx) {
    return m_pimpl->update(std::move(new_ctx));
Loading