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/inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new fcbe089577 [INLONG-9277][SDK] CPP SDK supports dynamic load balancing 
(#9278)
fcbe089577 is described below

commit fcbe089577d5990d1d00567b463f653811a9871f
Author: doleyzi <43397300+dole...@users.noreply.github.com>
AuthorDate: Mon Nov 13 19:24:45 2023 +0800

    [INLONG-9277][SDK] CPP SDK supports dynamic load balancing (#9278)
---
 .../dataproxy-sdk-cpp/release/inc/sdk_conf.h       |  3 ++-
 .../dataproxy-sdk-cpp/src/config/sdk_conf.cc       | 26 ++++++++++++++++++++--
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git 
a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-cpp/release/inc/sdk_conf.h 
b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-cpp/release/inc/sdk_conf.h
index 609d6c35b8..9df35d85a8 100644
--- a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-cpp/release/inc/sdk_conf.h
+++ b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-cpp/release/inc/sdk_conf.h
@@ -40,8 +40,9 @@ private:
   void InitTcpParam(const rapidjson::Value &doc);
   void InitAuthParm(const rapidjson::Value &doc);
   void OthersParam(const rapidjson::Value &doc);
+  void InitLocalIp();
 
-public:
+      public:
   // cache parameter
   std::vector<std::string>
       inlong_group_ids_;   // Initialize the inlong groupid collection
diff --git 
a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-cpp/src/config/sdk_conf.cc 
b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-cpp/src/config/sdk_conf.cc
index 91e2fa8ad4..c2bf211b69 100644
--- a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-cpp/src/config/sdk_conf.cc
+++ b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-cpp/src/config/sdk_conf.cc
@@ -18,6 +18,9 @@
  */
 
 #include "sdk_conf.h"
+#include <net/if.h>
+#include <arpa/inet.h>
+#include <sys/ioctl.h>
 #include <rapidjson/document.h>
 
 #include "../utils/capi_constant.h"
@@ -62,6 +65,7 @@ bool SdkConfig::ParseConfig(const std::string &config_path) {
   InitLogParam(doc);
   InitManagerParam(doc);
   InitTcpParam(doc);
+  InitLocalIp();
   OthersParam(doc);
   InitAuthParm(doc);
 
@@ -419,8 +423,6 @@ void SdkConfig::OthersParam(const rapidjson::Value &doc) {
   if (doc.HasMember("ser_ip") && doc["ser_ip"].IsString()) {
     const rapidjson::Value &obj = doc["ser_ip"];
     local_ip_ = obj.GetString();
-  } else {
-    local_ip_ = constants::kSerIP;
   }
   // ser_port
   if (doc.HasMember("ser_port") && doc["ser_port"].IsInt() &&
@@ -458,6 +460,26 @@ void SdkConfig::OthersParam(const rapidjson::Value &doc) {
   }
 }
 
+void SdkConfig::InitLocalIp() {
+  struct sockaddr_in dest;
+  dest.sin_family = AF_INET;
+
+  int fd = socket(AF_INET, SOCK_DGRAM, 0);
+  if (fd <= 0) {
+    throw std::runtime_error(std::string("socket failed") + strerror(errno));
+  }
+
+  struct ifreq ifreq_Buf;
+  strcpy(ifreq_Buf.ifr_name, "eth1"); // just check the eth1
+  if (-1 == ioctl(fd, SIOCGIFADDR, &ifreq_Buf)) {
+    throw std::runtime_error(std::string("ioctl failed") + strerror(errno));
+  }
+
+  close(fd);
+  struct sockaddr_in *addr = (struct sockaddr_in *)&ifreq_Buf.ifr_addr;
+  local_ip_ = inet_ntoa(addr->sin_addr);
+}
+
 void SdkConfig::ShowClientConfig() {
   LOG_INFO("per_groupid_thread_nums: " << per_groupid_thread_nums_);
   LOG_INFO("group_ids: " << Utils::getVectorStr(inlong_group_ids_).c_str());

Reply via email to