-
Notifications
You must be signed in to change notification settings - Fork 13.2k
Closed
Milestone
Description
nacos 0.8
ApiCommands.updateIpPublish方法中,如果countDownLatch非空则在其他server节点(不包括当前主节点)成功返回后进行countDown操作。如果集群只有2个节点,一个leader、一个fllower,那么countDownLatch的初始值是RaftCore.getPeerSet().majorityCount()=2,这样的话在进行countDownLatch.await(UtilsAndCommons.MAX_PUBLISH_WAIT_TIME_MILLIS, TimeUnit.MILLISECONDS)始终会等待超时的。超时抛异常,也就是 data publish failed.
private void updateIpPublish(Map<String, String> proxyParams, CountDownLatch countDownLatch, String action) {
// 不包括当前节点
for (final String peer : RaftCore.getPeerSet().allServersWithoutMySelf()) {
UtilsAndCommons.RAFT_PUBLISH_EXECUTOR.execute(new Runnable() {
@Override
public void run() {
String server = peer;
if (!server.contains(UtilsAndCommons.CLUSTER_CONF_IP_SPLITER)) {
server = server + UtilsAndCommons.CLUSTER_CONF_IP_SPLITER + RunningConfig.getServerPort();
}
String api = action.equals("remove") ? "onRemvIP4Dom" : "onAddIP4Dom";
String url = "http://" + server
+ RunningConfig.getContextPath() + UtilsAndCommons.NACOS_NAMING_CONTEXT + "/api/" + api;
try {
HttpClient.asyncHttpPost(url, null, proxyParams, new AsyncCompletionHandler() {
@Override
public Integer onCompleted(Response response) throws Exception {
if (response.getStatusCode() != HttpURLConnection.HTTP_OK) {
Loggers.SRV_LOG.warn("failed to add ip params: " + proxyParams
+ ",code: " + response.getStatusCode() + ", caused " + response.getResponseBody()
+ ", server: " + peer);
return 1;
}
if (countDownLatch != null) {
countDownLatch.countDown();
}
return 0;
}
});
} catch (Exception e) {
Loggers.SRV_LOG.error(action + "-IP", "failed when publish to peer." + url, e);
}
}
});
}
}