You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by la...@apache.org on 2022/06/30 12:17:16 UTC

[kudu] 02/02: [Catalog] Make DNS name of Kudu master case insensitive

This is an automated email from the ASF dual-hosted git repository.

laiyingchun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git

commit 00a2c7f29408968ab989215d56fc01dab4edac5b
Author: xinghuayu007 <14...@qq.com>
AuthorDate: Mon May 23 16:47:31 2022 +0800

    [Catalog] Make DNS name of Kudu master case insensitive
    
    Kudu master gets DNS name from config file when server startup
    and writes it into sys table. But after rewriting Raft config,
    it will be changed with different character case. Therefore it will
    be good to keep case insensitive for DNS name.
    
    In our situtation, the config file uses lower case DNS name,
    when rewriting Raft configure, user will input DNS name, which
    may be in upper case. Then Kudu master get an error when starting.
    
    Change-Id: If955e91a9e081dad7aebdcc497c413c8eb10eb4b
    Reviewed-on: http://gerrit.cloudera.org:8080/18567
    Tested-by: Kudu Jenkins
    Reviewed-by: Yingchun Lai <ac...@gmail.com>
---
 src/kudu/master/sys_catalog.cc | 13 ++++++++++---
 src/kudu/util/net/net_util.h   |  2 +-
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/kudu/master/sys_catalog.cc b/src/kudu/master/sys_catalog.cc
index 2b31d6bbb..58a44922b 100644
--- a/src/kudu/master/sys_catalog.cc
+++ b/src/kudu/master/sys_catalog.cc
@@ -83,6 +83,7 @@
 #include "kudu/util/net/net_util.h"
 #include "kudu/util/pb_util.h"
 #include "kudu/util/slice.h"
+#include "kudu/util/string_case.h"
 
 DEFINE_double(sys_catalog_fail_during_write, 0.0,
               "Fraction of the time when system table writes will fail");
@@ -221,7 +222,7 @@ Status SysCatalogTable::VerifyAndPopulateSingleMasterConfig(ConsensusMetadata* c
     if (peer.has_last_known_addr()) {
       // Verify the supplied master address matches with the on-disk Raft config.
       auto raft_master_addr = HostPortFromPB(peer.last_known_addr());
-      if (raft_master_addr != master_addr) {
+      if (!iequals(raft_master_addr.ToString(), master_addr.ToString())) {
         return Status::InvalidArgument(
             Substitute("Single master Raft config error. On-disk master: $0 and "
                        "supplied master: $1 are different", raft_master_addr.ToString(),
@@ -273,9 +274,12 @@ Status SysCatalogTable::Load(FsManager *fs_manager) {
     // Make sure the set of masters passed in at start time matches the set in
     // the on-disk cmeta.
     set<string> peer_addrs_from_opts;
+    string hp_str;
     const auto& master_addresses = master_->opts().master_addresses();
     for (const auto& hp : master_addresses) {
-      peer_addrs_from_opts.insert(hp.ToString());
+      hp_str = hp.ToString();
+      ToLowerCase(&hp_str);
+      peer_addrs_from_opts.insert(hp_str);
     }
     if (peer_addrs_from_opts.size() < master_addresses.size()) {
       LOG(WARNING) << Substitute("Found duplicates in --master_addresses: "
@@ -283,8 +287,11 @@ Status SysCatalogTable::Load(FsManager *fs_manager) {
                                  JoinStrings(peer_addrs_from_opts, ", "));
     }
     set<string> peer_addrs_from_disk;
+    string last_known_addr_str;
     for (const auto& p : cstate.committed_config().peers()) {
-      peer_addrs_from_disk.insert(HostPortFromPB(p.last_known_addr()).ToString());
+      last_known_addr_str = HostPortFromPB(p.last_known_addr()).ToString();
+      ToLowerCase(&last_known_addr_str);
+      peer_addrs_from_disk.insert(last_known_addr_str);
     }
     vector<string> symm_diff;
     std::set_symmetric_difference(peer_addrs_from_opts.begin(),
diff --git a/src/kudu/util/net/net_util.h b/src/kudu/util/net/net_util.h
index ea77bc686..ff756d702 100644
--- a/src/kudu/util/net/net_util.h
+++ b/src/kudu/util/net/net_util.h
@@ -94,7 +94,7 @@ class HostPort {
   // Takes a vector of HostPort objects and returns a comma separated
   // string containing of "host:port" pairs. This method is the
   // "inverse" of ParseStrings().
-  static std::string ToCommaSeparatedString(const std::vector<HostPort>& host_ports);
+  static std::string ToCommaSeparatedString(const std::vector<HostPort>& hostports);
 
   // Returns true if addr is within 127.0.0.0/8 range.
   static bool IsLoopback(uint32_t addr);