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());