Commit 1ff8c135 authored by Ramon Nou's avatar Ramon Nou
Browse files

limit data servers

parent a21b705b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -78,6 +78,9 @@ static constexpr auto DIRENTS_BUFF_SIZE = ADD_PREFIX("DIRENTS_BUFF_SIZE");
static constexpr auto USE_DIRENTS_COMPRESSION =
        ADD_PREFIX("USE_DIRENTS_COMPRESSION");
static constexpr auto DATA_COMPRESSION = ADD_PREFIX("DATA_COMPRESSION");
static constexpr auto DATA_DISTRIBUTION_HOSTS =
        ADD_PREFIX("DATA_DISTRIBUTION_HOSTS");


static constexpr auto NUM_REPL = ADD_PREFIX("NUM_REPL");
static constexpr auto PROXY_PID_FILE = ADD_PREFIX("PROXY_PID_FILE");
+38 −3
Original line number Diff line number Diff line
@@ -60,8 +60,6 @@ public:
    virtual host_t
    locate_data(const std::string& path, const chunkid_t& chnk_id,
                const int num_copy) const = 0;
    // TODO: We need to pass hosts_size in the server side, because the number
    // of servers are not defined (in startup)

    virtual unsigned int
    hosts_size() const = 0;
@@ -69,6 +67,12 @@ public:
    virtual void
    hosts_size(unsigned int size) = 0;

    virtual void
    data_hosts_size(unsigned int size) = 0;

    virtual unsigned int
    data_hosts_size() const = 0;

    virtual host_t
    locate_data(const std::string& path, const chunkid_t& chnk_id,
                unsigned int hosts_size, const int num_copy) = 0;
@@ -85,6 +89,7 @@ class SimpleHashDistributor : public Distributor {
private:
    host_t localhost_;
    unsigned int hosts_size_{0};
    unsigned int data_hosts_size_{0};
    std::vector<host_t> all_hosts_;
    std::hash<std::string> str_hash;

@@ -93,12 +98,21 @@ public:

    SimpleHashDistributor(host_t localhost, unsigned int hosts_size);

    SimpleHashDistributor(host_t localhost, unsigned int hosts_size,
                          unsigned int data_hosts_size);

    unsigned int
    hosts_size() const override;

    void
    hosts_size(unsigned int size) override;

    unsigned int
    data_hosts_size() const override;

    void
    data_hosts_size(unsigned int size) override;

    host_t
    localhost() const override;

@@ -108,7 +122,7 @@ public:

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

    host_t
    locate_file_metadata(const std::string& path,
@@ -122,6 +136,7 @@ class LocalOnlyDistributor : public Distributor {
private:
    host_t localhost_;
    unsigned int hosts_size_{0};
    unsigned int data_hosts_size_{0};

public:
    explicit LocalOnlyDistributor(host_t localhost);
@@ -135,6 +150,12 @@ public:
    void
    hosts_size(unsigned int size) override;

    unsigned int
    data_hosts_size() const override;

    void
    data_hosts_size(unsigned int size) override;

    host_t
    locate_data(const std::string& path, const chunkid_t& chnk_id,
                const int num_copy) const override;
@@ -155,6 +176,7 @@ class ForwarderDistributor : public Distributor {
private:
    host_t fwd_host_;
    unsigned int hosts_size_{0};
    unsigned int data_hosts_size_{0};
    std::vector<host_t> all_hosts_;
    std::hash<std::string> str_hash;

@@ -170,6 +192,12 @@ public:
    void
    hosts_size(unsigned int size) override;

    void
    data_hosts_size(unsigned int size) override;

    unsigned int
    data_hosts_size() const override;

    host_t
    locate_data(const std::string& path, const chunkid_t& chnk_id,
                const int num_copy) const override final;
@@ -204,6 +232,7 @@ class GuidedDistributor : public Distributor {
private:
    host_t localhost_;
    unsigned int hosts_size_{0};
    unsigned int data_hosts_size_{0};
    std::vector<host_t> all_hosts_;
    std::hash<std::string> str_hash;
    std::unordered_map<std::string, std::pair<IntervalSet, unsigned int>>
@@ -226,6 +255,12 @@ public:
    void
    hosts_size(unsigned int size) override;

    void
    data_hosts_size(unsigned int size) override;

    unsigned int
    data_hosts_size() const override;

    host_t
    locate_data(const std::string& path, const chunkid_t& chnk_id,
                const int num_copy) const override;
+0 −4
Original line number Diff line number Diff line
@@ -117,11 +117,7 @@ constexpr auto use_atime = false;
constexpr auto use_ctime = false;
constexpr auto use_mtime = false;
constexpr auto use_link_cnt = false;
#ifdef HAS_RENAME
constexpr auto use_blocks = true;
#else
constexpr auto use_blocks = false;
#endif // HAS_RENAME
/*
 * If true, all chunks on the same host are removed during a metadata remove
 * rpc. This is a technical optimization that reduces the number of RPCs for
+1 −0
Original line number Diff line number Diff line
@@ -129,6 +129,7 @@ endif ()
if (GKFS_ENABLE_AGIOS)
    target_compile_definitions(gkfs_intercept PUBLIC GKFS_ENABLE_AGIOS)
endif ()

# Enable MSGPack metrics for intercept only

target_link_libraries(
+10 −0
Original line number Diff line number Diff line
@@ -259,6 +259,15 @@ init_environment() {
        CTX->distributor(forwarder_dist);
    } else {

        auto data_hosts_str = gkfs::env::get_var(
                gkfs::env::DATA_DISTRIBUTION_HOSTS, "0");
        int data_hosts_size = 0;
        try {
            data_hosts_size = std::stoi(data_hosts_str);
        } catch(const std::exception& e) {
            LOG(ERROR, "Failed to parse data distribution hosts: '{}'. Using default (0).", data_hosts_str);
        }

#ifdef GKFS_USE_GUIDED_DISTRIBUTION
        auto distributor = std::make_shared<gkfs::rpc::GuidedDistributor>(
                CTX->local_host_id(), CTX->hosts().size());
@@ -266,6 +275,7 @@ init_environment() {
        auto distributor = std::make_shared<gkfs::rpc::SimpleHashDistributor>(
                CTX->local_host_id(), CTX->hosts().size());
#endif
        distributor->data_hosts_size(data_hosts_size);
        CTX->distributor(distributor);
    }

Loading