public static ClusterConfiguration fromBytes(ByteBuffer buffer){ ClusterConfiguration configuration = new ClusterConfiguration(); configuration.setLogIndex(buffer.getLong()); configuration.setLastLogIndex(buffer.getLong()); while(buffer.hasRemaining()){ configuration.getServers().add(new ClusterServer(buffer)); } return configuration; }
private String getLeaderEndpoint(){ for(ClusterServer server : this.configuration.getServers()){ if(server.getId() == this.leaderId){ return server.getEndpoint(); } } logger.info("no endpoint could be found for leader %d, that usually means no leader is elected, retry the first one", this.leaderId); this.randomLeader = true; this.leaderId = this.configuration.getServers().get(0).getId(); return this.configuration.getServers().get(0).getEndpoint(); } }
public byte[] toBytes(){ int totalSize = Long.BYTES * 2; List<byte[]> serversData = new ArrayList<byte[]>(this.servers.size()); for(int i = 0; i < this.servers.size(); ++i){ ClusterServer server = this.servers.get(i); byte[] dataForServer = server.toBytes(); totalSize += dataForServer.length; serversData.add(dataForServer); } ByteBuffer buffer = ByteBuffer.allocate(totalSize); buffer.putLong(this.logIndex); buffer.putLong(this.lastLogIndex); for(int i = 0; i < serversData.size(); ++i){ buffer.put(serversData.get(i)); } return buffer.array(); } }
ClusterServer server = new ClusterServer(); server.setEndpoint(values.get(2)); server.setId(Integer.parseInt(values.get(1))); boolean accepted = client.addServer(server).get(); System.out.println("Accepted: " + String.valueOf(accepted));
rpcClient = this.server.context.getRpcClientFactory().createRpcClient(leader.getEndpoint()); this.rpcClients.put(leaderId, rpcClient);
ClusterServer server = new ClusterServer(ByteBuffer.wrap(logEntries[0].getValue())); if(this.peers.containsKey(server.getId()) || this.id == server.getId()){ this.logger.warning("the server to be added has a duplicated id with existing server %d", server.getId()); return response;
public ClusterServer getServer(int id){ for(ClusterServer server : this.servers){ if(server.getId() == id){ return server; } } return null; }
ClusterServer server = new ClusterServer(); server.setEndpoint(values.get(2)); server.setId(Integer.parseInt(values.get(1))); boolean accepted = client.addServer(server).get(); System.out.println("Accepted: " + String.valueOf(accepted));
rpcClient = this.server.context.getRpcClientFactory().createRpcClient(leader.getEndpoint()); this.rpcClients.put(leaderId, rpcClient);
ClusterServer server = new ClusterServer(ByteBuffer.wrap(logEntries[0].getValue())); if(this.peers.containsKey(server.getId()) || this.id == server.getId()){ this.logger.warning("the server to be added has a duplicated id with existing server %d", server.getId()); return response;
/** * Try to get a cluster server configuration from cluster configuration * @param id the server id * @return a cluster server configuration or null if id is not found */ public ClusterServer getServer(int id){ for(ClusterServer server : this.servers){ if(server.getId() == id){ return server; } } return null; }
ClusterServer server = new ClusterServer(); server.setEndpoint(values.get(1)); server.setId(Integer.parseInt(values.get(0))); messageSender.addServer(server).whenCompleteAsync((Boolean result, Throwable err) -> { if(err != null){
rpcClient = this.server.context.getRpcClientFactory().createRpcClient(leader.getEndpoint()); this.rpcClients.put(leaderId, rpcClient);
private String getLeaderEndpoint(){ for(ClusterServer server : this.configuration.getServers()){ if(server.getId() == this.leaderId){ return server.getEndpoint(); } } logger.info("no endpoint could be found for leader %d, that usually means no leader is elected, retry the first one", this.leaderId); this.randomLeader = true; this.leaderId = this.configuration.getServers().get(0).getId(); return this.configuration.getServers().get(0).getEndpoint(); } }
ClusterServer server = new ClusterServer(ByteBuffer.wrap(logEntries[0].getValue())); if(this.peers.containsKey(server.getId()) || this.id == server.getId()){ this.logger.warning("the server to be added has a duplicated id with existing server %d", server.getId()); return response;
/** * Try to get a cluster server configuration from cluster configuration * @param id the server id * @return a cluster server configuration or null if id is not found */ public ClusterServer getServer(int id){ for(ClusterServer server : this.servers){ if(server.getId() == id){ return server; } } return null; }
/** * Serialize the cluster configuration into a buffer * this is used for the leader to serialize a new cluster configuration and replicate to peers * @return binary data that represents the cluster configuration */ public byte[] toBytes(){ int totalSize = Long.BYTES * 2; List<byte[]> serversData = new ArrayList<byte[]>(this.servers.size()); for(int i = 0; i < this.servers.size(); ++i){ ClusterServer server = this.servers.get(i); byte[] dataForServer = server.toBytes(); totalSize += dataForServer.length; serversData.add(dataForServer); } ByteBuffer buffer = ByteBuffer.allocate(totalSize); buffer.putLong(this.logIndex); buffer.putLong(this.lastLogIndex); for(int i = 0; i < serversData.size(); ++i){ buffer.put(serversData.get(i)); } return buffer.array(); } }
/** * De-serialize the data stored in buffer to cluster configuration * this is used for the peers to get the cluster configuration from log entry value * @param buffer the binary data * @return cluster configuration */ public static ClusterConfiguration fromBytes(ByteBuffer buffer){ ClusterConfiguration configuration = new ClusterConfiguration(); configuration.setLogIndex(buffer.getLong()); configuration.setLastLogIndex(buffer.getLong()); while(buffer.hasRemaining()){ configuration.getServers().add(new ClusterServer(buffer)); } return configuration; }
ClusterServer server = new ClusterServer(); server.setEndpoint(values.get(1)); server.setId(Integer.parseInt(values.get(0))); messageSender.addServer(server).whenCompleteAsync((Boolean result, Throwable err) -> { if(err != null){
port = Integer.parseInt(args[2]); URI localEndpoint = new URI(config.getServer(stateManager.getServerId()).getEndpoint()); RaftParameters raftParameters = new RaftParameters() .withElectionTimeoutUpper(5000)