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

fix(distributor): correct prefix matching boundary in guided distributor

parent 35167706
Loading
Loading
Loading
Loading
Loading
+6 −4
Changes for src/common/rpc/distributor.cpp: 6 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -314,8 +314,9 @@ GuidedDistributor::locate_data(const string& path, const chunkid_t& chnk_id,

    for(auto const& prefix_rule : prefix_list) {
        const auto& prefix = prefix_rule.first;
        if(0 == path.compare(0, min(prefix.length(), path.length()), prefix, 0,
                             min(prefix.length(), path.length()))) {
        if(path.length() >= prefix.length() &&
           0 == path.compare(0, prefix.length(), prefix) &&
           (prefix.back() == '/' || path.length() == prefix.length() || path[prefix.length()] == '/')) {
            if(hosts_size_ > 0 && prefix_rule.second < hosts_size_) {
                return prefix_rule.second;
            }
@@ -342,8 +343,9 @@ GuidedDistributor::locate_file_metadata(const string& path,
                                        const int num_copy) const {
    for(auto const& prefix_rule : prefix_list) {
        const auto& prefix = prefix_rule.first;
        if(0 == path.compare(0, min(prefix.length(), path.length()), prefix, 0,
                             min(prefix.length(), path.length()))) {
        if(path.length() >= prefix.length() &&
           0 == path.compare(0, prefix.length(), prefix) &&
           (prefix.back() == '/' || path.length() == prefix.length() || path[prefix.length()] == '/')) {
            if(hosts_size_ > 0 && prefix_rule.second < hosts_size_) {
                return prefix_rule.second;
            }