public static void init()

in server/src/main/java/org/apache/seata/server/cluster/raft/RaftServerManager.java [91:152]


    public static void init() {
        if (INIT.compareAndSet(false, true)) {
            String initConfStr = CONFIG.getConfig(ConfigurationKeys.SERVER_RAFT_SERVER_ADDR);
            RAFT_MODE = StoreConfig.getSessionMode().equals(SessionMode.RAFT);
            if (StringUtils.isBlank(initConfStr)) {
                if (RAFT_MODE) {
                    throw new IllegalArgumentException(
                        "Raft store mode must config: " + ConfigurationKeys.SERVER_RAFT_SERVER_ADDR);
                }
                return;
            } else {
                if (RAFT_MODE) {
                    for (RegistryService<?> instance : MultiRegistryFactory.getInstances()) {
                        if (!(instance instanceof FileRegistryServiceImpl)
                            && !(instance instanceof NamingserverRegistryServiceImpl)) {
                            throw new IllegalArgumentException("Raft store mode not support other Registration Center");
                        }
                    }
                }
                LOGGER.warn("raft mode and raft cluster is an experimental feature");
            }
            final Configuration initConf = new Configuration();
            if (!initConf.parse(initConfStr)) {
                throw new IllegalArgumentException("fail to parse initConf:" + initConfStr);
            }
            int port = Integer.parseInt(System.getProperty(SERVER_RAFT_PORT_CAMEL, "0"));
            PeerId serverId = null;
            String host = XID.getIpAddress();
            if (port <= 0) {
                // Highly available deployments require different nodes
                for (PeerId peer : initConf.getPeers()) {
                    List<String> peerIps = NetUtil.getHostByName(peer.getIp());
                    for (String peerIp : peerIps) {
                        if (StringUtils.equals(peerIp, host)) {
                            if (serverId != null) {
                                throw new IllegalArgumentException(
                                        "server.raft.cluster has duplicate ip, For local debugging, use -Dserver.raftPort to specify the raft port");
                            }
                            serverId = peer;
                            break;
                        }
                    }
                }
            } else {
                // Local debugging use
                serverId = new PeerId(host, port);
            }
            final String dataPath = CONFIG.getConfig(ConfigurationKeys.STORE_FILE_DIR, DEFAULT_SESSION_STORE_FILE_DIR)
                + separator + "raft" + separator + serverId.getPort();
            String group = CONFIG.getConfig(ConfigurationKeys.SERVER_RAFT_GROUP, DEFAULT_SEATA_GROUP);
            try {
                // Here you have raft RPC and business RPC using the same RPC server, and you can usually do this
                // separately
                rpcServer = RaftRpcServerFactory.createRaftRpcServer(serverId.getEndpoint());
                RaftServer raftServer = new RaftServer(dataPath, group, serverId, initNodeOptions(initConf), rpcServer);
                // as the foundation for multi raft group in the future
                RAFT_SERVER_MAP.put(group, raftServer);
            } catch (IOException e) {
                throw new IllegalArgumentException("fail init raft cluster:" + e.getMessage(), e);
            }
        }
    }