You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tubemq.apache.org by do...@apache.org on 2020/09/16 03:02:43 UTC

[incubator-tubemq] branch master updated: [TUBEMQ-354]Found a dns translate bug in C/C++ sdk (#267)

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

dockerzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tubemq.git


The following commit(s) were added to refs/heads/master by this push:
     new c04065a  [TUBEMQ-354]Found a dns translate bug in C/C++ sdk (#267)
c04065a is described below

commit c04065ae4164bce5ffa66787fe0d21ec42301d75
Author: gosonzhang <46...@qq.com>
AuthorDate: Wed Sep 16 11:02:34 2020 +0800

    [TUBEMQ-354]Found a dns translate bug in C/C++ sdk (#267)
    
    Co-authored-by: gosonzhang <go...@tencent.com>
---
 .../tubemq-client-cpp/src/client_service.cc        | 29 ++++++++++------------
 .../tubemq-client-cpp/src/tubemq_config.cc         |  2 +-
 2 files changed, 14 insertions(+), 17 deletions(-)

diff --git a/tubemq-client-twins/tubemq-client-cpp/src/client_service.cc b/tubemq-client-twins/tubemq-client-cpp/src/client_service.cc
index c6e0aaa..18c21bb 100644
--- a/tubemq-client-twins/tubemq-client-cpp/src/client_service.cc
+++ b/tubemq-client-twins/tubemq-client-cpp/src/client_service.cc
@@ -207,21 +207,22 @@ void TubeMQService::shutDownClinets() const {
 bool TubeMQService::AddMasterAddress(string& err_info, const string& master_info) {
   map<string, int32_t>::iterator it;
   map<string, int32_t> tmp_addr_map;
+  map<string, int32_t> new_addr_map;
   Utils::Split(master_info, tmp_addr_map, delimiter::kDelimiterComma, delimiter::kDelimiterColon);
   if (tmp_addr_map.empty()) {
     err_info = "Illegal parameter: master_info is blank!";
     return false;
   }
-  for (it = tmp_addr_map.begin(); it != tmp_addr_map.end();) {
-    if (!Utils::NeedDnsXfs(it->first)) {
-      tmp_addr_map.erase(it++);
+  for (it = tmp_addr_map.begin(); it != tmp_addr_map.end(); ++it) {
+    if (Utils::NeedDnsXfs(it->first)) {
+      new_addr_map[it->first] = it->second;
     }
   }
-  if (tmp_addr_map.empty()) {
+  if (new_addr_map.empty()) {
     err_info = "Ok";
     return true;
   }
-  if (addNeedDnsXfsAddr(tmp_addr_map)) {
+  if (addNeedDnsXfsAddr(new_addr_map)) {
     updMasterAddrByDns();
   }
   err_info = "Ok";
@@ -230,7 +231,7 @@ bool TubeMQService::AddMasterAddress(string& err_info, const string& master_info
 
 void TubeMQService::GetXfsMasterAddress(const string& source, string& target) {
   target = source;
-  lock_guard<mutex> lck(mutex_);
+  lock_guard<mutex> lck(dns_mutex_);
   if (master_source_.find(source) != master_source_.end()) {
     target = master_target_[source];
   }
@@ -252,7 +253,7 @@ void TubeMQService::thread_task_dnsxfs(int dns_xfs_period_ms) {
 }
 
 bool TubeMQService::hasXfsTask(map<string, int32_t>& src_addr_map) {
-  lock_guard<mutex> lck(mutex_);
+  lock_guard<mutex> lck(dns_mutex_);
   if (!master_source_.empty()) {
     src_addr_map = master_source_;
     return true;
@@ -264,7 +265,7 @@ bool TubeMQService::addNeedDnsXfsAddr(map<string, int32_t>& src_addr_map) {
   bool added = false;
   map<string, int32_t>::iterator it;
   if (!src_addr_map.empty()) {
-    lock_guard<mutex> lck(mutex_);
+    lock_guard<mutex> lck(dns_mutex_);
     for (it = src_addr_map.begin(); it != src_addr_map.end(); it++) {
       if (master_source_.find(it->first) == master_source_.end()) {
         added = true;
@@ -278,18 +279,14 @@ bool TubeMQService::addNeedDnsXfsAddr(map<string, int32_t>& src_addr_map) {
 void TubeMQService::updMasterAddrByDns() {
   map<string, int32_t> tmp_src_addr_map;
   map<string, string> tmp_tgt_addr_map;
-  map<string, int32_t>::iterator it;
+  map<string, string>::iterator it;
   if (!hasXfsTask(tmp_src_addr_map)) {
     return;
   }
   Utils::XfsAddrByDns(tmp_src_addr_map, tmp_tgt_addr_map);
-  lock_guard<mutex> lck(mutex_);
-  if (tmp_tgt_addr_map.empty()) {
-    for (it = tmp_src_addr_map.begin(); it != tmp_src_addr_map.end(); it++) {
-      master_target_[it->first] = it->first;
-    }
-  } else {
-    master_target_ = tmp_tgt_addr_map;
+  lock_guard<mutex> lck(dns_mutex_);
+  for (it = tmp_tgt_addr_map.begin(); it != tmp_tgt_addr_map.end(); it++) {
+    master_target_[it->first] = it->second;
   }
 }
 
diff --git a/tubemq-client-twins/tubemq-client-cpp/src/tubemq_config.cc b/tubemq-client-twins/tubemq-client-cpp/src/tubemq_config.cc
index a2534ff..fac11b8 100644
--- a/tubemq-client-twins/tubemq-client-cpp/src/tubemq_config.cc
+++ b/tubemq-client-twins/tubemq-client-cpp/src/tubemq_config.cc
@@ -88,7 +88,7 @@ bool BaseConfig::SetMasterAddrInfo(string& err_info, const string& master_addrin
   Utils::Split(master_addrinfo, tgt_address_map, delimiter::kDelimiterComma,
                delimiter::kDelimiterColon);
   if (tgt_address_map.empty()) {
-    err_info = "Illegal parameter: master_addrinfo is blank!";
+    err_info = "Illegal parameter: unrecognized master_addrinfo address information!";
     return false;
   }
   master_addrinfo_ = trimed_master_addr_info;