private ModelControlResponse handleCreateAndStartResourceClusterEvent()

in manager/dm-server/src/main/java/org/apache/doris/stack/control/request/handler/DorisClusterTakeOverRequestHandler.java [121:185]


    private ModelControlResponse handleCreateAndStartResourceClusterEvent(CoreUserEntity user,
                                                                          DorisClusterTakeOverRequest request) throws Exception {
        long clusterId = request.getClusterId();
        log.info("handle take over cluster {} CREATE_AND_START_RESOURCE_CLUSTER request {} event",
                clusterId, request.getRequestId());

        ClusterInfoEntity clusterInfo = clusterInfoRepository.findById(clusterId).get();

        // TODO:get cluster nodes ip info
        List<String> nodeIps = new ArrayList<>();

        Statement stmt = jdbcClient.getStatement(clusterInfo.getAddress(), clusterInfo.getQueryPort(),
                clusterInfo.getUser(), CredsUtil.aesDecrypt(clusterInfo.getPasswd()));
        Set<String> feNodeIps = jdbcClient.getFeOrBeIps(stmt, "'/frontends';");
        log.debug("The node list IP of Doris cluster Fe is {}", feNodeIps);

        Set<String> beNodeIps = jdbcClient.getFeOrBeIps(stmt, "'/backends';");
        log.debug("The node list IP of Doris cluster Be is {}", beNodeIps);
        jdbcClient.closeStatement(stmt);

        Set<String> allNodeDistinct = new HashSet<>();
        allNodeDistinct.addAll(feNodeIps);
        allNodeDistinct.addAll(beNodeIps);

        log.debug("The node list distinct IP of Doris cluster is {}", allNodeDistinct);

        nodeIps.addAll(allNodeDistinct);
        log.debug("The node list IP of Doris cluster is {}", nodeIps);

        dorisClusterManager.createClusterResourceOperation(user, clusterInfo, request.getReqInfo().getAuthInfo(), nodeIps);
        dorisClusterManager.configClusterResourceOperation(clusterInfo, "",
                request.getReqInfo().getInstallInfo(), request.getReqInfo().getAgentPort());

        // TODO  sshInfo  and  iplist  can check agent port
        List<ResourceNodeEntity> nodeEntities =
                nodeRepository.getByResourceClusterId(clusterInfo.getResourceClusterId());
        Set<Long> feNodeIds = new HashSet<>();
        Set<Long> beNodeIds = new HashSet<>();
        for (ResourceNodeEntity nodeEntity : nodeEntities) {
            if (feNodeIps.contains(nodeEntity.getHost())) {
                feNodeIds.add(nodeEntity.getId());
            }

            if (beNodeIps.contains(nodeEntity.getHost())) {
                beNodeIds.add(nodeEntity.getId());
            }
        }
        log.debug("The node list ID of Doris cluster fe is {}", feNodeIds);
        log.debug("The node list ID of Doris cluster be is {}", beNodeIds);

        DorisClusterModuleResourceConfig feConfig = new DorisClusterModuleResourceConfig();
        feConfig.setModuleName(ServerAndAgentConstant.FE_NAME);
        feConfig.setNodeIds(feNodeIds);

        DorisClusterModuleResourceConfig beConfig = new DorisClusterModuleResourceConfig();
        beConfig.setModuleName(ServerAndAgentConstant.BE_NAME);
        beConfig.setNodeIds(beNodeIds);
        List<DorisClusterModuleResourceConfig> resourceConfigs = Lists.newArrayList(feConfig, beConfig);

        dorisClusterManager.scheduleClusterOperation(clusterId, resourceConfigs);

        dorisClusterManager.startClusterResourceOperation(clusterInfo, request.getRequestId());

        return getResponse(request, false);
    }