Skip to content

ApiCommands.updateIpPublish countDownLatch timeout issue #811

@luoxn28

Description

@luoxn28

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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions