rpc_data.hpp 1.15 KiB
Newer Older
Marc Vef's avatar
Marc Vef committed
#ifndef LFS_RPC_DATA_HPP
#define LFS_RPC_DATA_HPP

#include <daemon/daemon.hpp>
Marc Vef's avatar
Marc Vef committed

namespace gkfs {
namespace daemon {

Marc Vef's avatar
Marc Vef committed
class RPCData {

private:
    RPCData() {}

    // Margo IDs. They can also be used to retrieve the Mercury classes and
    // contexts that were created at init time
    margo_instance_id server_rpc_mid_;
Marc Vef's avatar
Marc Vef committed

    // Argobots I/O pools and execution streams
    ABT_pool io_pool_;
    std::vector<ABT_xstream> io_streams_;
    std::string self_addr_str_;
Marc Vef's avatar
Marc Vef committed

public:
    static RPCData*
    getInstance() {
Marc Vef's avatar
Marc Vef committed
        static RPCData instance;
        return &instance;
    }

    RPCData(RPCData const&) = delete;

    void
    operator=(RPCData const&) = delete;
Marc Vef's avatar
Marc Vef committed

    // Getter/Setter

    margo_instance*
    server_rpc_mid();
    void
    server_rpc_mid(margo_instance* server_rpc_mid);
    ABT_pool
    io_pool() const;
    void
    io_pool(ABT_pool io_pool);
    std::vector<ABT_xstream>&
    io_streams();
    void
    io_streams(const std::vector<ABT_xstream>& io_streams);
    const std::string&
    self_addr_str() const;
    void
    self_addr_str(const std::string& addr_str);
Marc Vef's avatar
Marc Vef committed
};

} // namespace daemon
} // namespace gkfs

#endif // LFS_RPC_DATA_HPP