Commit e319a5ca authored by Ramon Nou's avatar Ramon Nou
Browse files

Moved distributor instantation to RPC_DATA and daemon.cpp on the server side.

Added interval_map to GuidedDistributor for better performance
parent 14a24d65
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -18,6 +18,13 @@
#include <daemon/daemon.hpp>

namespace gkfs {

/* Forward declarations */
namespace rpc {
class Distributor;
}


namespace daemon {

class RPCData {
@@ -32,6 +39,8 @@ private:
    ABT_pool io_pool_;
    std::vector<ABT_xstream> io_streams_;
    std::string self_addr_str_;
    // Distributor
    std::shared_ptr<gkfs::rpc::Distributor> distributor_;
         
public:

@@ -62,6 +71,9 @@ public:

    void self_addr_str(const std::string& addr_str);

    const std::shared_ptr<gkfs::rpc::Distributor>& distributor() const;

    void distributor(const std::shared_ptr<gkfs::rpc::Distributor>& distributor);
};

} // namespace daemon
+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ extern "C" {

#include <daemon/classes/fs_data.hpp>
#include <daemon/classes/rpc_data.hpp>
#include <global/rpc/distributor.hpp>

#define GKFS_DATA (static_cast<gkfs::daemon::FsData*>(gkfs::daemon::FsData::getInstance()))
#define RPC_DATA (static_cast<gkfs::daemon::RPCData*>(gkfs::daemon::RPCData::getInstance()))
+18 −5
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <numeric>
#include <unordered_map>
#include <fstream>
#include <boost/icl/interval_map.hpp>

namespace gkfs {
namespace rpc {
@@ -33,6 +34,8 @@ public:

    virtual host_t locate_data(const std::string& path, const chunkid_t& chnk_id) const = 0;

    virtual host_t locate_data(const std::string& path, const chunkid_t& chnk_id, unsigned int hosts_size) = 0;

    virtual host_t locate_file_metadata(const std::string& path) const = 0;
    
    virtual std::vector<host_t> locate_directory_metadata(const std::string& path) const = 0;
@@ -42,16 +45,21 @@ public:
class SimpleHashDistributor : public Distributor {
private:
    host_t localhost_;
    unsigned int hosts_size_;
    unsigned int hosts_size_{0};
    std::vector<host_t> all_hosts_;
    std::hash<std::string> str_hash;
public:
    
    SimpleHashDistributor();

    SimpleHashDistributor(host_t localhost, unsigned int hosts_size);

    host_t localhost() const override;

    host_t locate_data(const std::string& path, const chunkid_t& chnk_id) const override;

    host_t locate_data(const std::string& path, const chunkid_t& chnk_id, unsigned int host_size);

    host_t locate_file_metadata(const std::string& path) const override;

    std::vector<host_t> locate_directory_metadata(const std::string& path) const override;
@@ -93,17 +101,22 @@ public:
class GuidedDistributor : public Distributor {
private:
    host_t localhost_;
    unsigned int hosts_size_;
    unsigned int hosts_size_{0};
    std::vector<host_t> all_hosts_;
    std::hash<std::string> str_hash;
    std::unordered_map< std::string, host_t > mapping;
    std::unordered_map< std::string, boost::icl::interval_map <chunkid_t, unsigned int > > map_interval; 
    bool init_guided();
public:
    GuidedDistributor();

    GuidedDistributor(host_t localhost, unsigned int hosts_size);
    
    host_t localhost() const override;

    host_t locate_data(const std::string& path, const chunkid_t& chnk_id) const override;

    host_t locate_data(const std::string& path, const chunkid_t& chnk_id, unsigned int host_size);

    host_t locate_file_metadata(const std::string& path) const override;

    std::vector<host_t> locate_directory_metadata(const std::string& path) const override;
+1 −1
Original line number Diff line number Diff line
@@ -320,7 +320,7 @@ vector<pair<string, string>> read_hosts_file() {
    }

    LOG(INFO, "Hosts pool size: {}", hosts.size());

    sort(hosts.begin(),hosts.end());  // Sort hosts by alphanumerical value.    
    return hosts;
}

+10 −1
Original line number Diff line number Diff line
@@ -53,5 +53,14 @@ void RPCData::self_addr_str(const std::string& addr_str) {
    self_addr_str_ = addr_str;
}

const std::shared_ptr<gkfs::rpc::Distributor>& RPCData::distributor() const {
    return distributor_;
}

void RPCData::distributor(const std::shared_ptr<gkfs::rpc::Distributor>& distributor) {
    distributor_ = distributor;
}


} // namespace daemon
} // namespace gkfs
Loading