Loading include/client/env.hpp +3 −0 Original line number Diff line number Diff line Loading @@ -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"); Loading include/common/rpc/distributor.hpp +38 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading @@ -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); Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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>> Loading @@ -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; Loading include/config.hpp +0 −4 Original line number Diff line number Diff line Loading @@ -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 Loading src/client/CMakeLists.txt +1 −0 Original line number Diff line number Diff line Loading @@ -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( Loading src/client/preload.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -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()); Loading @@ -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 Loading
include/client/env.hpp +3 −0 Original line number Diff line number Diff line Loading @@ -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"); Loading
include/common/rpc/distributor.hpp +38 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading @@ -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); Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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>> Loading @@ -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; Loading
include/config.hpp +0 −4 Original line number Diff line number Diff line Loading @@ -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 Loading
src/client/CMakeLists.txt +1 −0 Original line number Diff line number Diff line Loading @@ -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( Loading
src/client/preload.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -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()); Loading @@ -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