/** * Start bootstrapping new peers */ PendingRequest startSetConfiguration(SetConfigurationRequest request) { Preconditions.assertTrue(running && !inStagingState()); RaftPeer[] peersInNewConf = request.getPeersInNewConf(); Collection<RaftPeer> peersToBootStrap = RaftConfiguration .computeNewPeers(peersInNewConf, server.getRaftConf()); // add the request to the pending queue final PendingRequest pending = pendingRequests.addConfRequest(request); ConfigurationStagingState stagingState = new ConfigurationStagingState( peersToBootStrap, new PeerConfiguration(Arrays.asList(peersInNewConf))); Collection<RaftPeer> newPeers = stagingState.getNewPeers(); // set the staging state this.stagingState = stagingState; if (newPeers.isEmpty()) { applyOldNewConf(); } else { // update the LeaderState's sender list addSenders(newPeers); } return pending; }
/** * Start bootstrapping new peers */ PendingRequest startSetConfiguration(SetConfigurationRequest request) { Preconditions.assertTrue(running && !inStagingState()); RaftPeer[] peersInNewConf = request.getPeersInNewConf(); Collection<RaftPeer> peersToBootStrap = RaftConfiguration .computeNewPeers(peersInNewConf, server.getRaftConf()); // add the request to the pending queue final PendingRequest pending = pendingRequests.addConfRequest(request); ConfigurationStagingState stagingState = new ConfigurationStagingState( peersToBootStrap, new PeerConfiguration(Arrays.asList(peersInNewConf))); Collection<RaftPeer> newPeers = stagingState.getNewPeers(); // set the staging state this.stagingState = stagingState; if (newPeers.isEmpty()) { applyOldNewConf(); } else { // update the LeaderState's sender list addSenders(newPeers); } return pending; }