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 <[email protected]>
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());