use of com.alibaba.nacos.core.cluster.Member in project nacos by alibaba.
the class NacosClusterController method leave.
/**
* member leave.
*
* @param params member ip list, example [ip1:port1,ip2:port2,...]
* @return {@link RestResult}
* @throws Exception {@link Exception}
*/
@PostMapping("/server/leave")
public RestResult<String> leave(@RequestBody Collection<String> params) throws Exception {
Collection<Member> memberList = MemberUtil.multiParse(params);
memberManager.memberLeave(memberList);
final NacosAsyncRestTemplate nacosAsyncRestTemplate = HttpClientBeanHolder.getNacosAsyncRestTemplate(Loggers.CLUSTER);
final GenericType<RestResult<String>> genericType = new GenericType<RestResult<String>>() {
};
final Collection<Member> notifyList = memberManager.allMembersWithoutSelf();
notifyList.removeAll(memberList);
CountDownLatch latch = new CountDownLatch(notifyList.size());
for (Member member : notifyList) {
final String url = HttpUtils.buildUrl(false, member.getAddress(), EnvUtil.getContextPath(), Commons.NACOS_CORE_CONTEXT, "/cluster/server/leave");
nacosAsyncRestTemplate.post(url, Header.EMPTY, Query.EMPTY, params, genericType.getType(), new Callback<String>() {
@Override
public void onReceive(RestResult<String> result) {
try {
if (result.ok()) {
LoggerUtils.printIfDebugEnabled(Loggers.CLUSTER, "The node : [{}] success to process the request", member);
MemberUtil.onSuccess(memberManager, member);
} else {
Loggers.CLUSTER.warn("The node : [{}] failed to process the request, response is : {}", member, result);
MemberUtil.onFail(memberManager, member);
}
} finally {
latch.countDown();
}
}
@Override
public void onError(Throwable throwable) {
try {
Loggers.CLUSTER.error("Failed to communicate with the node : {}", member);
MemberUtil.onFail(memberManager, member);
} finally {
latch.countDown();
}
}
@Override
public void onCancel() {
}
});
}
try {
latch.await(10_000, TimeUnit.MILLISECONDS);
return RestResultUtils.success("ok");
} catch (Throwable ex) {
return RestResultUtils.failed(ex.getMessage());
}
}
use of com.alibaba.nacos.core.cluster.Member in project nacos by alibaba.
the class UpgradeJudgement method checkForUpgrade.
private boolean checkForUpgrade() {
if (!useGrpcFeatures.get()) {
boolean selfCheckResult = selfUpgradeChecker.isReadyToUpgrade(serviceManager, doubleWriteDelayTaskEngine);
Member self = memberManager.getSelf();
self.setExtendVal(MemberMetaDataConstants.READY_TO_UPGRADE, selfCheckResult);
memberManager.updateMember(self);
if (!selfCheckResult) {
NamingExecuteTaskDispatcher.getInstance().dispatchAndExecuteTask(AsyncServicesCheckTask.class, new AsyncServicesCheckTask(doubleWriteDelayTaskEngine, this));
}
}
boolean result = true;
for (Member each : memberManager.allMembers()) {
Object isReadyToUpgrade = each.getExtendVal(MemberMetaDataConstants.READY_TO_UPGRADE);
result &= null != isReadyToUpgrade && (boolean) isReadyToUpgrade;
}
return result;
}
use of com.alibaba.nacos.core.cluster.Member in project nacos by alibaba.
the class NacosClusterController method leave.
/**
* member leave.
*
* @param params member ip list, example [ip1:port1,ip2:port2,...]
* @return {@link RestResult}
* @throws Exception {@link Exception}
*/
@PostMapping("/server/leave")
public RestResult<String> leave(@RequestBody Collection<String> params, @RequestParam(defaultValue = "true") Boolean notifyOtherMembers) throws Exception {
Collection<Member> memberList = MemberUtil.multiParse(params);
memberManager.memberLeave(memberList);
// End conditions for cluster notifications, FIX https://github.com/alibaba/nacos/issues/6273
if (Boolean.FALSE.equals(notifyOtherMembers)) {
return RestResultUtils.success("ok");
}
final NacosAsyncRestTemplate nacosAsyncRestTemplate = HttpClientBeanHolder.getNacosAsyncRestTemplate(Loggers.CLUSTER);
final GenericType<RestResult<String>> genericType = new GenericType<RestResult<String>>() {
};
final Collection<Member> notifyList = memberManager.allMembersWithoutSelf();
notifyList.removeAll(memberList);
CountDownLatch latch = new CountDownLatch(notifyList.size());
for (Member member : notifyList) {
final String url = HttpUtils.buildUrl(false, member.getAddress(), EnvUtil.getContextPath(), Commons.NACOS_CORE_CONTEXT, "/cluster/server/leave?notifyOtherMembers=false");
nacosAsyncRestTemplate.post(url, Header.EMPTY, Query.EMPTY, params, genericType.getType(), new Callback<String>() {
@Override
public void onReceive(RestResult<String> result) {
try {
if (result.ok()) {
LoggerUtils.printIfDebugEnabled(Loggers.CLUSTER, "The node : [{}] success to process the request", member);
MemberUtil.onSuccess(memberManager, member);
} else {
Loggers.CLUSTER.warn("The node : [{}] failed to process the request, response is : {}", member, result);
MemberUtil.onFail(memberManager, member);
}
} finally {
latch.countDown();
}
}
@Override
public void onError(Throwable throwable) {
try {
Loggers.CLUSTER.error("Failed to communicate with the node : {}", member);
MemberUtil.onFail(memberManager, member);
} finally {
latch.countDown();
}
}
@Override
public void onCancel() {
}
});
}
try {
latch.await(10_000, TimeUnit.MILLISECONDS);
return RestResultUtils.success("ok");
} catch (Throwable ex) {
return RestResultUtils.failed(ex.getMessage());
}
}
use of com.alibaba.nacos.core.cluster.Member in project nacos by alibaba.
the class NacosClusterV2Controller method deleteNodes.
/**
* member leave.
*
* @param addresses member ip list, example [ip1:port1,ip2:port2,...]
* @return {@link RestResult}
* @throws Exception throw {@link Exception}
*/
@DeleteMapping("/nodes")
public RestResult<Void> deleteNodes(@RequestParam("addresses") List<String> addresses) throws Exception {
Collection<Member> memberList = MemberUtil.multiParse(addresses);
memberManager.memberLeave(memberList);
final NacosAsyncRestTemplate nacosAsyncRestTemplate = HttpClientBeanHolder.getNacosAsyncRestTemplate(Loggers.CLUSTER);
final GenericType<RestResult<String>> genericType = new GenericType<RestResult<String>>() {
};
final Collection<Member> notifyList = memberManager.allMembersWithoutSelf();
notifyList.removeAll(memberList);
CountDownLatch latch = new CountDownLatch(notifyList.size());
for (Member member : notifyList) {
final String url = HttpUtils.buildUrl(false, member.getAddress(), EnvUtil.getContextPath(), Commons.NACOS_CORE_CONTEXT_V2, "/cluster/nodes");
nacosAsyncRestTemplate.delete(url, Header.EMPTY, StringUtils.join(addresses, ","), genericType.getType(), new Callback<Void>() {
@Override
public void onReceive(RestResult<Void> result) {
try {
if (result.ok()) {
LoggerUtils.printIfDebugEnabled(Loggers.CLUSTER, "The node : [{}] success to process the request", member);
MemberUtil.onSuccess(memberManager, member);
} else {
Loggers.CLUSTER.warn("The node : [{}] failed to process the request, response is : {}", member, result);
MemberUtil.onFail(memberManager, member);
}
} finally {
latch.countDown();
}
}
@Override
public void onError(Throwable throwable) {
try {
Loggers.CLUSTER.error("Failed to communicate with the node : {}", member);
MemberUtil.onFail(memberManager, member);
} finally {
latch.countDown();
}
}
@Override
public void onCancel() {
}
});
}
try {
latch.await(10_000, TimeUnit.MILLISECONDS);
return RestResultUtils.success();
} catch (Throwable ex) {
return RestResultUtils.failed(ex.getMessage());
}
}
use of com.alibaba.nacos.core.cluster.Member in project nacos by alibaba.
the class NacosClusterV2Controller method updateNodes.
// The client can get all the nacos node information in the current
// cluster according to this interface
/**
* Other nodes return their own metadata information.
*
* @param nodes List of {@link Member}
* @return {@link RestResult}
*/
@PutMapping(value = "/nodes")
public RestResult<Void> updateNodes(@RequestBody List<Member> nodes) {
for (Member node : nodes) {
if (!node.check()) {
LoggerUtils.printIfWarnEnabled(Loggers.CLUSTER, "node information is illegal, ignore node: {}", node);
continue;
}
LoggerUtils.printIfDebugEnabled(Loggers.CLUSTER, "node state updating, node: {}", node);
node.setState(NodeState.UP);
node.setFailAccessCnt(0);
boolean update = memberManager.update(node);
if (!update) {
LoggerUtils.printIfErrorEnabled(Loggers.CLUSTER, "node state update failed, node: {}", node);
}
}
return RestResultUtils.success();
}
Aggregations