Skip to content

Commit 2d65ad3

Browse files
feat:update client id generator. (#572)
1 parent f2ad583 commit 2d65ad3

File tree

3 files changed

+53
-4
lines changed
  • polaris-common
  • polaris-plugins/polaris-plugins-connector/connector-polaris-grpc/src/main/java/com/tencent/polaris/plugins/connector/grpc

3 files changed

+53
-4
lines changed

polaris-common/polaris-client/src/main/java/com/tencent/polaris/client/api/SDKContext.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.tencent.polaris.api.plugin.stat.ReporterMetaInfo;
4444
import com.tencent.polaris.api.plugin.stat.StatReporter;
4545
import com.tencent.polaris.api.utils.CollectionUtils;
46+
import com.tencent.polaris.api.utils.IPAddressUtils;
4647
import com.tencent.polaris.api.utils.StringUtils;
4748
import com.tencent.polaris.client.flow.AbstractFlow;
4849
import com.tencent.polaris.client.util.NamedThreadFactory;
@@ -64,6 +65,7 @@
6465
import java.util.concurrent.ScheduledExecutorService;
6566
import java.util.concurrent.TimeUnit;
6667
import java.util.concurrent.atomic.AtomicBoolean;
68+
import java.util.concurrent.atomic.AtomicInteger;
6769

6870
/**
6971
* SDK初始化相关的上下文信息
@@ -74,6 +76,12 @@ public class SDKContext extends Destroyable implements InitContext, AutoCloseabl
7476

7577
private static final Logger LOG = LoggerFactory.getLogger(SDKContext.class);
7678
private static final String DEFAULT_ADDRESS = "127.0.0.1";
79+
80+
/**
81+
* 客户端ID自增序列
82+
*/
83+
private static final AtomicInteger CLIENT_ID_SEQ = new AtomicInteger(0);
84+
7785
/**
7886
* 配置对象
7987
*/
@@ -105,7 +113,8 @@ public SDKContext(Configuration configuration, Manager plugins, ValueContext val
105113
this.configuration = configuration;
106114
this.plugins = plugins;
107115
this.valueContext = valueContext;
108-
this.valueContext.setClientId(generateClientId(this.valueContext.getHost()));
116+
this.valueContext.setClientId(generateClientId(getHostNameOrDefaultToHost(this.valueContext.getHost())));
117+
LOG.info("init SDKContext with clientId={}", this.valueContext.getClientId());
109118
List<ServerServiceInfo> services = new ArrayList<>();
110119
//加载系统服务配置
111120
SystemConfig system = configuration.getGlobal().getSystem();
@@ -130,7 +139,24 @@ public SDKContext(Configuration configuration, Manager plugins, ValueContext val
130139
}
131140

132141
private static String generateClientId(String host) {
133-
return host + "-" + getProcessId("0");
142+
if (!StringUtils.equalsIgnoreCase(host, DEFAULT_ADDRESS)) {
143+
return host + "_" + getProcessId("0") + "_" + CLIENT_ID_SEQ.getAndIncrement();
144+
} else {
145+
return UUID.randomUUID().toString();
146+
}
147+
}
148+
149+
private static String getHostNameOrDefaultToHost(String host) {
150+
try {
151+
String hostName = IPAddressUtils.getHostName();
152+
if (StringUtils.isBlank(hostName)) {
153+
hostName = host;
154+
}
155+
return hostName;
156+
} catch (Throwable throwable) {
157+
LOG.error("fail to get host name", throwable);
158+
return host;
159+
}
134160
}
135161

136162
private static String getProcessId(String fallback) {

polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/utils/IPAddressUtils.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,18 @@
1717

1818
package com.tencent.polaris.api.utils;
1919

20+
import com.tencent.polaris.logging.LoggerFactory;
21+
import org.slf4j.Logger;
22+
23+
import java.net.InetAddress;
24+
2025
/**
2126
* @author Haotian Zhang
2227
*/
2328
public class IPAddressUtils {
24-
29+
30+
private static final Logger LOG = LoggerFactory.getLogger(IPAddressUtils.class);
31+
2532
public static String getIpCompatible(String ip) {
2633
if (StringUtils.isEmpty(ip)) {
2734
return ip;
@@ -31,4 +38,20 @@ public static String getIpCompatible(String ip) {
3138
}
3239
return ip;
3340
}
41+
42+
public static String getHostName() {
43+
try {
44+
String hostname = System.getenv("HOSTNAME");
45+
if (StringUtils.isBlank(hostname)) {
46+
hostname = System.getProperty("HOSTNAME");
47+
}
48+
if (StringUtils.isBlank(hostname)) {
49+
hostname = InetAddress.getLocalHost().getHostName();
50+
}
51+
return hostname;
52+
} catch (Exception e) {
53+
LOG.warn("get host name error", e);
54+
return "";
55+
}
56+
}
3457
}

polaris-plugins/polaris-plugins-connector/connector-polaris-grpc/src/main/java/com/tencent/polaris/plugins/connector/grpc/GrpcConnector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ private void initActually(InitContext ctx, ServerConnectorConfig connectorConfig
170170
updateServiceExecutor = new ScheduledThreadPoolExecutor(1,
171171
new NamedThreadFactory(getName() + "-update-service"));
172172
updateServiceExecutor.setMaximumPoolSize(1);
173-
clientInstanceId = UUID.randomUUID().toString();
173+
clientInstanceId = ctx.getValueContext().getClientId();
174174
initialized = true;
175175
}
176176

0 commit comments

Comments
 (0)