in manager/dm-server/src/main/java/org/apache/doris/stack/control/manager/ResourceClusterManager.java [215:281]
public void deleteAgentsOperation(long resourceClusterId) throws Exception {
log.info("delete resource cluster {} all nodes agent", resourceClusterId);
Optional<ResourceClusterEntity> resourceClusterOpt = resourceClusterRepository.findById(resourceClusterId);
if (!resourceClusterOpt.isPresent()) {
throw new Exception("resource cluster " + resourceClusterId + " does not exist");
}
ResourceClusterEntity clusterEntity = resourceClusterOpt.get();
PMResourceClusterAccessInfo accessInfo = JSON.parseObject(clusterEntity.getAccessInfo(),
PMResourceClusterAccessInfo.class);
List<ResourceNodeEntity> nodeEntities = nodeRepository.getByResourceClusterId(resourceClusterId);
List<ResourceNodeEntity> agentInstalledNodes = new ArrayList<>();
for (ResourceNodeEntity nodeEntity : nodeEntities) {
if (!nodeAndAgentManager.isAgentInstalled(nodeEntity)) {
log.warn("the agent has not been installed on {} node {}", nodeEntity.getId(), nodeEntity.getHost());
} else {
agentInstalledNodes.add(nodeEntity);
}
}
// we check something before uninstall agent
// to guarantee uninstall operation must be executed
List<Pair<ResourceNodeEntity, CompletableFuture<Void>>> nodeFutures = new ArrayList<>();
for (ResourceNodeEntity nodeEntity : agentInstalledNodes) {
CompletableFuture<Void> portCheckFuture = CompletableFuture.runAsync(() -> {
AgentInstallEventConfigInfo installConfig = new AgentInstallEventConfigInfo();
installConfig.setSshUser(accessInfo.getSshUser());
installConfig.setSshPort(accessInfo.getSshPort());
installConfig.setSshKey(accessInfo.getSshKey());
try {
log.info("check ssh connect and stop script before uninstall agent on node {}", nodeEntity.getId());
nodeAndAgentManager.checkSshConnect(nodeEntity, installConfig);
nodeAndAgentManager.checkStopScriptExist(nodeEntity, installConfig);
} catch (Exception e) {
log.error("check node {} exception: {}", nodeEntity.getHost(), e.getMessage());
throw new CompletionException(e);
}
});
nodeFutures.add(Pair.of(nodeEntity, portCheckFuture));
}
for (Pair<ResourceNodeEntity, CompletableFuture<Void>> nodeFuture: nodeFutures) {
ResourceNodeEntity nodeEntity = nodeFuture.getLeft();
CompletableFuture<Void> future = nodeFuture.getRight();
try {
future.get();
} catch (Exception e) {
log.error("check {} node {} stop script exception {}", nodeEntity.getId(), nodeEntity.getHost(), e);
throw new Exception("check node stop script failed" + e);
}
}
// async delete agent
for (ResourceNodeEntity nodeEntity : agentInstalledNodes) {
AgentUnInstallEventConfigInfo uninstallConfig = new AgentUnInstallEventConfigInfo(
accessInfo.getSshUser(), accessInfo.getSshPort(), accessInfo.getSshKey(),
nodeEntity.getHost(), nodeEntity.getAgentInstallDir(),
nodeEntity.getId(), nodeEntity.getAgentPort());
log.info("to stop agent of {} node {}", nodeEntity.getId(), nodeEntity.getHost());
nodeAndAgentManager.deleteAgentOperation(nodeEntity, uninstallConfig);
}
}