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

C++ API now relies on pimpl idiom to hide implementation

parent 33f3578c
Loading
Loading
Loading
Loading
+46 −46
Original line number Diff line number Diff line
@@ -201,9 +201,9 @@ update_job(const server& srv, const job& job, const job_requirements& reqs) {
    (void) job;
    (void) reqs;

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

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

    LOGGER_INFO("ADM_update_job(...)");

@@ -226,9 +226,9 @@ remove_job(const server& srv, const job& job) {
    (void) srv;
    (void) job;

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

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

    LOGGER_INFO("ADM_remove_job(...)");

@@ -254,9 +254,9 @@ register_adhoc_storage(const server& srv, ADM_job_t job,
    (void) ctx;
    (void) adhoc_storage;

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

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

    LOGGER_INFO("ADM_register_adhoc_storage(...)");

@@ -282,9 +282,9 @@ update_adhoc_storage(const server& srv, ADM_job_t job, ADM_adhoc_context_t ctx,
    (void) ctx;
    (void) adhoc_storage;

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

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

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

@@ -309,9 +309,9 @@ remove_adhoc_storage(const server& srv, ADM_job_t job,
    (void) job;
    (void) adhoc_storage;

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

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

    LOGGER_INFO("ADM_remove_adhoc_storage(...)");

@@ -336,9 +336,9 @@ deploy_adhoc_storage(const server& srv, ADM_job_t job,
    (void) job;
    (void) adhoc_storage;

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

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

    LOGGER_INFO("ADM_deploy_adhoc_storage(...)");

@@ -364,9 +364,9 @@ register_pfs_storage(const server& srv, ADM_job_t job, ADM_pfs_context_t ctx,
    (void) ctx;
    (void) pfs_storage;

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

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

    LOGGER_INFO("ADM_register_pfs_storage(...)");

@@ -392,9 +392,9 @@ update_pfs_storage(const server& srv, ADM_job_t job, ADM_pfs_context_t ctx,
    (void) ctx;
    (void) pfs_storage;

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

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

    LOGGER_INFO("ADM_update_pfs_storage(...)");

@@ -419,9 +419,9 @@ remove_pfs_storage(const server& srv, ADM_job_t job,
    (void) job;
    (void) pfs_storage;

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

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

    LOGGER_INFO("ADM_remove_pfs_storage(...)");

@@ -451,9 +451,9 @@ transfer_dataset(const server& srv, ADM_job_t job, ADM_dataset_t** sources,
    (void) mapping;
    (void) transfer;

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

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

    LOGGER_INFO("ADM_transfer_dataset(...)");

@@ -479,9 +479,9 @@ set_dataset_information(const server& srv, ADM_job_t job, ADM_dataset_t target,
    (void) target;
    (void) info;

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

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

    LOGGER_INFO("ADM_set_dataset_information(...)");

@@ -507,9 +507,9 @@ set_io_resources(const server& srv, ADM_job_t job, ADM_storage_t tier,
    (void) tier;
    (void) resources;

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

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

    LOGGER_INFO("ADM_set_io_resources(...)");

@@ -535,9 +535,9 @@ get_transfer_priority(const server& srv, ADM_job_t job, ADM_transfer_t transfer,
    (void) transfer;
    (void) priority;

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

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

    LOGGER_INFO("ADM_get_transfer_priority(...)");

@@ -563,9 +563,9 @@ set_transfer_priority(const server& srv, ADM_job_t job, ADM_transfer_t transfer,
    (void) transfer;
    (void) incr;

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

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

    LOGGER_INFO("ADM_set_transfer_priority(...)");

@@ -589,9 +589,9 @@ cancel_transfer(const server& srv, ADM_job_t job, ADM_transfer_t transfer) {
    (void) job;
    (void) transfer;

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

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

    LOGGER_INFO("ADM_cancel_transfer(...)");

@@ -617,9 +617,9 @@ get_pending_transfers(const server& srv, ADM_job_t job,
    (void) job;
    (void) pending_transfers;

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

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

    LOGGER_INFO("ADM_get_pending_transfers(...)");

@@ -646,9 +646,9 @@ set_qos_constraints(const server& srv, ADM_job_t job, ADM_qos_entity_t entity,
    (void) entity;
    (void) limit;

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

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

    LOGGER_INFO("ADM_set_qos_constraints(...)");

@@ -675,9 +675,9 @@ get_qos_constraints(const server& srv, ADM_job_t job, ADM_qos_entity_t entity,
    (void) entity;
    (void) limits;

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

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

    LOGGER_INFO("ADM_get_qos_constraints(...)");

@@ -705,9 +705,9 @@ define_data_operation(const server& srv, ADM_job_t job, const char* path,
    (void) op;
    (void) args;

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

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

    LOGGER_INFO("ADM_define_data_operation(...)");

@@ -736,9 +736,9 @@ connect_data_operation(const server& srv, ADM_job_t job, ADM_dataset_t input,
    (void) should_stream;
    (void) args;

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

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

    LOGGER_INFO("ADM_connect_data_operation(...)");

@@ -766,9 +766,9 @@ finalize_data_operation(const server& srv, ADM_job_t job,
    (void) op;
    (void) status;

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

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

    LOGGER_INFO("ADM_finalize_data_operation(...)");

@@ -797,9 +797,9 @@ link_transfer_to_data_operation(const server& srv, ADM_job_t job,
    (void) should_stream;
    (void) args;

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

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

    LOGGER_INFO("ADM_link_transfer_to_data_operation(...)");

@@ -824,9 +824,9 @@ get_statistics(const server& srv, ADM_job_t job, ADM_job_stats_t** stats) {
    (void) job;
    (void) stats;

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

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

    LOGGER_INFO("ADM_get_statistics(...)");

+126 −51
Original line number Diff line number Diff line
@@ -40,31 +40,62 @@ using job_id = std::uint64_t;
struct server {

    server(std::string protocol, std::string address);

    explicit server(const ADM_server_t& srv);
    server(server&&) noexcept;
    server&
    operator=(server&&) noexcept;
    ~server();

    std::string m_protocol;
    std::string m_address;
    std::string
    protocol() const;
    std::string
    address() const;

private:
    class impl;
    std::unique_ptr<impl> m_pimpl;
};

struct job {

    explicit job(job_id id);

    explicit job(ADM_job_t job);

    job_id m_id;
    job(const job&) noexcept;
    job(job&&) noexcept;
    job&
    operator=(job&&) noexcept;
    job&
    operator=(const job&) noexcept;
    ~job();

    job_id
    id() const;

    [[nodiscard]] ADM_job_t
    to_ctype() const;

private:
    class impl;
    std::unique_ptr<impl> m_pimpl;
};

struct dataset {
    explicit dataset(std::string id) : m_id(std::move(id)) {}
    explicit dataset(std::string id);
    explicit dataset(ADM_dataset_t dataset);
    dataset(const dataset&) noexcept;
    dataset(dataset&&) noexcept;
    dataset&
    operator=(const dataset&) noexcept;
    dataset&
    operator=(dataset&&) noexcept;
    ~dataset();

    std::string
    to_string() const {
        return "foo";
    }
    id() const;

    std::string m_id;
private:
    class impl;
    std::unique_ptr<impl> m_pimpl;
};

struct storage {
@@ -78,15 +109,25 @@ struct storage {
        gpfs = ADM_STORAGE_GPFS
    };

    struct ctx {
        virtual ~ctx() = default;
    };

    storage(storage::type type, std::string id);

    virtual ~storage() = default;

    virtual ADM_storage_t
    to_rpc_type() const = 0;
    std::string
    id() const;
    type
    type() const;

    virtual std::shared_ptr<ctx>
    context() const = 0;

protected:
    std::string m_id;
    type m_type;
    enum type m_type;
};

struct adhoc_storage : public storage {
@@ -104,59 +145,80 @@ struct adhoc_storage : public storage {
        read_write = ADM_ADHOC_ACCESS_RDWR,
    };

    struct context {
    struct ctx : storage::ctx {

        context(execution_mode exec_mode, access_type access_type,
        ctx(execution_mode exec_mode, access_type access_type,
            std::uint32_t nodes, std::uint32_t walltime, bool should_flush);

        explicit context(ADM_adhoc_context_t ctx);
        explicit ctx(ADM_adhoc_context_t ctx);

        ADM_adhoc_context_t
        to_rpc_type() const;
        execution_mode
        exec_mode() const;
        enum access_type
        access_type() const;
        std::uint32_t
        nodes() const;
        std::uint32_t
        walltime() const;
        bool
        should_flush() const;

    private:
        execution_mode m_exec_mode;
        access_type m_access_type;
        enum access_type m_access_type;
        std::uint32_t m_nodes;
        std::uint32_t m_walltime;
        bool m_should_flush;
    };

    adhoc_storage(storage::type type, std::string id, execution_mode exec_mode,
                  access_type access_type, std::uint32_t nodes,
                  std::uint32_t walltime, bool should_flush);

    adhoc_storage(storage::type type, std::string id, ADM_adhoc_context_t ctx);


    ADM_storage_t
    to_rpc_type() const final;

    context m_ctx;
    adhoc_storage(enum storage::type type, std::string id,
                  execution_mode exec_mode, access_type access_type,
                  std::uint32_t nodes, std::uint32_t walltime,
                  bool should_flush);
    adhoc_storage(enum storage::type type, std::string id,
                  ADM_adhoc_context_t ctx);
    adhoc_storage(adhoc_storage&&) noexcept = default;
    adhoc_storage&
    operator=(adhoc_storage&&) noexcept = default;
    ~adhoc_storage() override;

    std::shared_ptr<storage::ctx>
    context() const final;

private:
    class impl;
    std::unique_ptr<impl> m_pimpl;
};

struct pfs_storage : public storage {

    struct context {
    struct ctx : storage::ctx {

        explicit context(std::filesystem::path mount_point);
        explicit ctx(std::filesystem::path mount_point);

        explicit context(ADM_pfs_context_t ctx);
        explicit ctx(ADM_pfs_context_t ctx);

        ADM_pfs_context_t
        to_rpc_type() const;
        std::filesystem::path
        mount_point() const;

    private:
        std::filesystem::path m_mount_point;
    };

    pfs_storage(storage::type type, std::string id,
    pfs_storage(enum storage::type type, std::string id,
                std::filesystem::path mount_point);

    pfs_storage(storage::type type, std::string id, ADM_pfs_context_t ctx);

    ADM_storage_t
    to_rpc_type() const final;

    context m_ctx;
    pfs_storage(enum storage::type type, std::string id, ADM_pfs_context_t ctx);
    pfs_storage(pfs_storage&&) noexcept = default;
    pfs_storage&
    operator=(pfs_storage&&) noexcept = default;
    ~pfs_storage() override;

    std::shared_ptr<storage::ctx>
    context() const final;

private:
    class impl;
    std::unique_ptr<impl> m_pimpl;
};

struct job_requirements {
@@ -170,12 +232,25 @@ struct job_requirements {

    explicit job_requirements(ADM_job_requirements_t reqs);

    ADM_job_requirements_t
    to_rpc_type() const;

    std::vector<admire::dataset> m_inputs;
    std::vector<admire::dataset> m_outputs;
    std::unique_ptr<admire::storage> m_storage;
    job_requirements(const job_requirements&) noexcept;
    job_requirements(job_requirements&&) noexcept;
    job_requirements&
    operator=(const job_requirements&) noexcept;
    job_requirements&
    operator=(job_requirements&&) noexcept;

    ~job_requirements();

    std::vector<admire::dataset>
    inputs() const;
    std::vector<admire::dataset>
    outputs() const;
    std::shared_ptr<admire::storage>
    storage() const;

private:
    class impl;
    std::unique_ptr<impl> m_pimpl;
};

} // namespace admire
+351 −113

File changed.

Preview size limit exceeded, changes collapsed.