@Override public RaftResponseMessage processRequest(RaftRequestMessage request) { String log = String.format( "Receive a request(Source: %d, Destination: %d, Term: %d, LLI: %d, LLT: %d, CI: %d, LEL: %d", request.getSource(), request.getDestination(), request.getTerm(), request.getLastLogIndex(), request.getLastLogTerm(), request.getCommitIndex(), request.getLogEntries() == null ? 0 : request.getLogEntries().length); logger.debug(log); System.out.println(log); return this.randomResponse(request.getSource(), request.getTerm()); }
@Override public RaftResponseMessage processRequest(RaftRequestMessage request) { String log = String.format( "Receive a request(Source: %d, Destination: %d, Term: %d, LLI: %d, LLT: %d, CI: %d, LEL: %d", request.getSource(), request.getDestination(), request.getTerm(), request.getLastLogIndex(), request.getLastLogTerm(), request.getCommitIndex(), request.getLogEntries() == null ? 0 : request.getLogEntries().length); logger.debug(log); System.out.println(log); return this.randomResponse(request.getSource(), request.getTerm()); }
public static byte[] messageToBytes(RaftRequestMessage request){ LogEntry[] logEntries = request.getLogEntries(); int logSize = 0; List<byte[]> buffersForLogs = null; if(logEntries != null && logEntries.length > 0){ buffersForLogs = new ArrayList<byte[]>(logEntries.length); for(LogEntry logEntry : logEntries){ byte[] logData = logEntryToBytes(logEntry); logSize += logData.length; buffersForLogs.add(logData); } } ByteBuffer requestBuffer = ByteBuffer.allocate(RAFT_REQUEST_HEADER_SIZE + logSize); requestBuffer.put(request.getMessageType().toByte()); requestBuffer.put(intToBytes(request.getSource())); requestBuffer.put(intToBytes(request.getDestination())); requestBuffer.put(longToBytes(request.getTerm())); requestBuffer.put(longToBytes(request.getLastLogTerm())); requestBuffer.put(longToBytes(request.getLastLogIndex())); requestBuffer.put(longToBytes(request.getCommitIndex())); requestBuffer.put(intToBytes(logSize)); if(buffersForLogs != null){ for(byte[] logData : buffersForLogs){ requestBuffer.put(logData); } } return requestBuffer.array(); }
public static byte[] messageToBytes(RaftRequestMessage request){ LogEntry[] logEntries = request.getLogEntries(); int logSize = 0; List<byte[]> buffersForLogs = null; if(logEntries != null && logEntries.length > 0){ buffersForLogs = new ArrayList<byte[]>(logEntries.length); for(LogEntry logEntry : logEntries){ byte[] logData = logEntryToBytes(logEntry); logSize += logData.length; buffersForLogs.add(logData); } } ByteBuffer requestBuffer = ByteBuffer.allocate(RAFT_REQUEST_HEADER_SIZE + logSize); requestBuffer.put(request.getMessageType().toByte()); requestBuffer.put(intToBytes(request.getSource())); requestBuffer.put(intToBytes(request.getDestination())); requestBuffer.put(longToBytes(request.getTerm())); requestBuffer.put(longToBytes(request.getLastLogTerm())); requestBuffer.put(longToBytes(request.getLastLogIndex())); requestBuffer.put(longToBytes(request.getCommitIndex())); requestBuffer.put(intToBytes(logSize)); if(buffersForLogs != null){ for(byte[] logData : buffersForLogs){ requestBuffer.put(logData); } } return requestBuffer.array(); }
request.getLastLogIndex(), request.getLastLogTerm(), request.getLogEntries() == null ? 0 : request.getLogEntries().length, request.getCommitIndex(), request.getTerm());
request.getLastLogIndex(), request.getLastLogTerm(), request.getLogEntries() == null ? 0 : request.getLogEntries().length, request.getCommitIndex(), request.getTerm());
request.getLastLogIndex(), request.getLastLogTerm(), request.getLogEntries() == null ? 0 : request.getLogEntries().length, request.getCommitIndex(), request.getTerm());
private RaftResponseMessage handleAddServerRequest(RaftRequestMessage request){ LogEntry[] logEntries = request.getLogEntries(); RaftResponseMessage response = new RaftResponseMessage(); response.setSource(this.id);
private RaftResponseMessage handleAddServerRequest(RaftRequestMessage request){ LogEntry[] logEntries = request.getLogEntries(); RaftResponseMessage response = new RaftResponseMessage(); response.setSource(this.id);
private RaftResponseMessage handleAddServerRequest(RaftRequestMessage request){ LogEntry[] logEntries = request.getLogEntries(); RaftResponseMessage response = new RaftResponseMessage(); response.setSource(this.id);
private RaftResponseMessage handleClientRequest(RaftRequestMessage request){ RaftResponseMessage response = new RaftResponseMessage(); response.setMessageType(RaftMessageType.AppendEntriesResponse); response.setSource(this.id); response.setDestination(this.leader); response.setTerm(this.state.getTerm()); long term; synchronized(this){ if(this.role != ServerRole.Leader){ response.setAccepted(false); return response; } term = this.state.getTerm(); } LogEntry[] logEntries = request.getLogEntries(); if(logEntries != null && logEntries.length > 0){ for(int i = 0; i < logEntries.length; ++i){ this.stateMachine.preCommit(this.logStore.append(new LogEntry(term, logEntries[i].getValue())), logEntries[i].getValue()); } } // Urgent commit, so that the commit will not depend on heartbeat this.requestAppendEntries(); response.setAccepted(true); response.setNextIndex(this.logStore.getFirstAvailableIndex()); return response; }
private RaftResponseMessage handleClientRequest(RaftRequestMessage request){ RaftResponseMessage response = new RaftResponseMessage(); response.setMessageType(RaftMessageType.AppendEntriesResponse); response.setSource(this.id); response.setDestination(this.leader); response.setTerm(this.state.getTerm()); long term; synchronized(this){ if(this.role != ServerRole.Leader){ response.setAccepted(false); return response; } term = this.state.getTerm(); } LogEntry[] logEntries = request.getLogEntries(); if(logEntries != null && logEntries.length > 0){ for(int i = 0; i < logEntries.length; ++i){ this.stateMachine.preCommit(this.logStore.append(new LogEntry(term, logEntries[i].getValue())), logEntries[i].getValue()); } } // Urgent commit, so that the commit will not depend on heartbeat this.requestAppendEntries(); response.setAccepted(true); response.setNextIndex(this.logStore.getFirstAvailableIndex()); return response; }
private RaftResponseMessage handleClientRequest(RaftRequestMessage request){ RaftResponseMessage response = new RaftResponseMessage(); response.setMessageType(RaftMessageType.AppendEntriesResponse); response.setSource(this.id); response.setDestination(this.leader); response.setTerm(this.state.getTerm()); long term; synchronized(this){ if(this.role != ServerRole.Leader){ response.setAccepted(false); return response; } term = this.state.getTerm(); } LogEntry[] logEntries = request.getLogEntries(); if(logEntries != null && logEntries.length > 0){ for(int i = 0; i < logEntries.length; ++i){ this.stateMachine.preCommit(this.logStore.append(new LogEntry(term, logEntries[i].getValue())), logEntries[i].getValue()); } } // Urgent commit, so that the commit will not depend on heartbeat this.requestAppendEntries(); response.setAccepted(true); response.setNextIndex(this.logStore.getFirstAvailableIndex()); return response; }
private RaftResponseMessage handleLogSyncRequest(RaftRequestMessage request){ LogEntry[] logEntries = request.getLogEntries(); RaftResponseMessage response = new RaftResponseMessage(); response.setSource(this.id); response.setDestination(request.getSource()); response.setTerm(this.state.getTerm()); response.setMessageType(RaftMessageType.SyncLogResponse); response.setNextIndex(this.logStore.getFirstAvailableIndex()); response.setAccepted(false); if(logEntries == null || logEntries.length != 1 || logEntries[0].getValueType() != LogValueType.LogPack || logEntries[0].getValue() == null || logEntries[0].getValue().length == 0){ this.logger.info("receive an invalid LogSyncRequest as the log entry value doesn't meet the requirements"); return response; } if(!this.catchingUp){ this.logger.debug("This server is ready for cluster, ignore the request"); return response; } this.logStore.applyLogPack(request.getLastLogIndex() + 1, logEntries[0].getValue()); this.commit(this.logStore.getFirstAvailableIndex() -1); response.setNextIndex(this.logStore.getFirstAvailableIndex()); response.setAccepted(true); return response; }
private RaftResponseMessage handleLogSyncRequest(RaftRequestMessage request){ LogEntry[] logEntries = request.getLogEntries(); RaftResponseMessage response = new RaftResponseMessage(); response.setSource(this.id); response.setDestination(request.getSource()); response.setTerm(this.state.getTerm()); response.setMessageType(RaftMessageType.SyncLogResponse); response.setNextIndex(this.logStore.getFirstAvailableIndex()); response.setAccepted(false); if(logEntries == null || logEntries.length != 1 || logEntries[0].getValueType() != LogValueType.LogPack || logEntries[0].getValue() == null || logEntries[0].getValue().length == 0){ this.logger.info("receive an invalid LogSyncRequest as the log entry value doesn't meet the requirements"); return response; } if(!this.catchingUp){ this.logger.debug("This server is ready for cluster, ignore the request"); return response; } this.logStore.applyLogPack(request.getLastLogIndex() + 1, logEntries[0].getValue()); this.commit(this.logStore.getFirstAvailableIndex() -1); response.setNextIndex(this.logStore.getFirstAvailableIndex()); response.setAccepted(true); return response; }
private RaftResponseMessage handleLogSyncRequest(RaftRequestMessage request){ LogEntry[] logEntries = request.getLogEntries(); RaftResponseMessage response = new RaftResponseMessage(); response.setSource(this.id); response.setDestination(request.getSource()); response.setTerm(this.state.getTerm()); response.setMessageType(RaftMessageType.SyncLogResponse); response.setNextIndex(this.logStore.getFirstAvailableIndex()); response.setAccepted(false); if(logEntries == null || logEntries.length != 1 || logEntries[0].getValueType() != LogValueType.LogPack || logEntries[0].getValue() == null || logEntries[0].getValue().length == 0){ this.logger.info("receive an invalid LogSyncRequest as the log entry value doesn't meet the requirements"); return response; } if(!this.catchingUp){ this.logger.debug("This server is ready for cluster, ignore the request"); return response; } this.logStore.applyLogPack(request.getLastLogIndex() + 1, logEntries[0].getValue()); this.commit(this.logStore.getFirstAvailableIndex() -1); response.setNextIndex(this.logStore.getFirstAvailableIndex()); response.setAccepted(true); return response; }
private RaftResponseMessage handleJoinClusterRequest(RaftRequestMessage request){ LogEntry[] logEntries = request.getLogEntries(); RaftResponseMessage response = new RaftResponseMessage(); response.setSource(this.id);
private RaftResponseMessage handleJoinClusterRequest(RaftRequestMessage request){ LogEntry[] logEntries = request.getLogEntries(); RaftResponseMessage response = new RaftResponseMessage(); response.setSource(this.id);
private RaftResponseMessage handleJoinClusterRequest(RaftRequestMessage request){ LogEntry[] logEntries = request.getLogEntries(); RaftResponseMessage response = new RaftResponseMessage(); response.setSource(this.id);
LogEntry logEntries[] = request.getLogEntries(); if(logEntries == null || logEntries.length != 1 || logEntries[0].getValueType() != LogValueType.SnapshotSyncRequest){ this.logger.warning("Receive an invalid InstallSnapshotRequest due to bad log entries or bad log entry value");