public boolean start(final Endpoint listenAddr, final boolean emptyPeers, final int snapshotIntervalSecs,
                         final boolean enableMetrics, final SnapshotThrottle snapshotThrottle,
                         final RaftOptions raftOptions, final int priority) throws IOException {

        if (this.serverMap.get(listenAddr.toString()) != null) {
            return true;
        }

        final NodeOptions nodeOptions = new NodeOptions();
        nodeOptions.setElectionTimeoutMs(this.electionTimeoutMs);
        nodeOptions.setEnableMetrics(enableMetrics);
        nodeOptions.setSnapshotThrottle(snapshotThrottle);
        nodeOptions.setSnapshotIntervalSecs(snapshotIntervalSecs);
        nodeOptions.setServiceFactory(this.raftServiceFactory);
        if (raftOptions != null) {
            nodeOptions.setRaftOptions(raftOptions);
        }
        final String serverDataPath = this.dataPath + File.separator + listenAddr.toString().replace(':', '_');
        FileUtils.forceMkdir(new File(serverDataPath));
        nodeOptions.setLogUri(serverDataPath + File.separator + "logs");
        nodeOptions.setRaftMetaUri(serverDataPath + File.separator + "meta");
        nodeOptions.setSnapshotUri(serverDataPath + File.separator + "snapshot");
        nodeOptions.setElectionPriority(priority);

        final MockStateMachine fsm = new MockStateMachine(listenAddr);
        nodeOptions.setFsm(fsm);

        if (!emptyPeers) {
            nodeOptions.setInitialConf(new Configuration(this.peers, this.learners));
        }

        final RpcServer rpcServer = RaftRpcServerFactory.createRaftRpcServer(listenAddr);
        final RaftGroupService server = new RaftGroupService(this.name, new PeerId(listenAddr, 0, priority),
            nodeOptions, rpcServer);

        this.lock.lock();
        try {
            if (this.serverMap.put(listenAddr.toString(), server) == null) {
                final Node node = server.start();

                this.fsms.put(new PeerId(listenAddr, 0), fsm);
                this.nodes.add((NodeImpl) node);
                return true;
            }
        } finally {
            this.lock.unlock();
        }
        return false;
    }
Test cluster for NodeTest
@author boyan (boyan@alibaba-inc.com)

2018-Apr-20 1:41:17 PM
jraft-extension/java-log-storage-impl/src/test/java/com/alipay/sofa/jraft/core/TestCluster.java