@Override public LogEntryProto get(long index) { checkLogState(); try(AutoCloseableLock readLock = readLock()) { final int i = (int) index; return i >= 0 && i < entries.size() ? entries.get(i) : null; } }
@Override public String toString() { return "last=" + getLastEntryTermIndex() + ", committed=" + ServerProtoUtils.toString(get(getLastCommittedIndex())); }
@Override public long append(long term, RaftConfiguration newConf) { checkLogState(); try(AutoCloseableLock writeLock = writeLock()) { final long nextIndex = getNextIndex(); final LogEntryProto e = ServerProtoUtils.toLogEntryProto(newConf, term, nextIndex); entries.add(e); return nextIndex; } }
@Override public List<CompletableFuture<Long>> append(LogEntryProto... entries) { checkLogState(); try(AutoCloseableLock writeLock = writeLock()) { if (entries == null || entries.length == 0) { return Collections.emptyList(); int truncateIndex = (int) entries[0].getIndex(); int index = 0; for (; truncateIndex < getNextIndex() && index < entries.length; index++, truncateIndex++) { if (this.entries.get(truncateIndex).getTerm() != if (toTruncate) { futures = new ArrayList<>(entries.length - index + 1); futures.add(truncate(truncateIndex)); } else { futures = new ArrayList<>(entries.length - index);
@Override CompletableFuture<Long> appendEntryImpl(LogEntryProto entry) { checkLogState(); try(AutoCloseableLock writeLock = writeLock()) { validateLogEntry(entry); entries.add(entry); } return CompletableFuture.completedFuture(entry.getIndex()); }
@Override CompletableFuture<Long> truncate(long index) { checkLogState(); try(AutoCloseableLock writeLock = writeLock()) { Preconditions.assertTrue(index >= 0); final int truncateIndex = (int) index; for (int i = entries.size() - 1; i >= truncateIndex; i--) { entries.remove(i); } } return CompletableFuture.completedFuture(index); }
@Override public EntryWithData getEntryWithData(long index) { return new EntryWithData(get(index), null); }
public String printAllLogs() { StringBuilder b = new StringBuilder("\n#servers = " + servers.size() + "\n"); for (RaftServerImpl s : iterateServerImpls()) { b.append(" "); b.append(s).append("\n"); final RaftLog log = s.getState().getLog(); if (log instanceof MemoryRaftLog) { b.append(" "); b.append(((MemoryRaftLog) log).getEntryString()); } } return b.toString(); }
@Override public long getLatestFlushedIndex() { return getNextIndex() - 1; }
/** * note we do not apply log entries to the state machine here since we do not * know whether they have been committed. */ private RaftLog initLog(RaftPeerId id, RaftProperties prop, long lastIndexInSnapshot, Consumer<LogEntryProto> logConsumer) throws IOException { final RaftLog log; if (RaftServerConfigKeys.Log.useMemory(prop)) { final int maxBufferSize = RaftServerConfigKeys.Log.Appender.bufferCapacity(prop).getSizeInt(); log = new MemoryRaftLog(id, maxBufferSize); } else { log = new SegmentedRaftLog(id, server, this.storage, lastIndexInSnapshot, prop); } log.open(lastIndexInSnapshot, logConsumer); return log; }
@Override public List<CompletableFuture<Long>> appendImpl(LogEntryProto... entries) { checkLogState(); if (entries == null || entries.length == 0) { return Collections.emptyList(); try(AutoCloseableLock writeLock = writeLock()) { int truncateIndex = (int) entries[0].getIndex(); int index = 0; for (; truncateIndex < getNextIndex() && index < entries.length; index++, truncateIndex++) { if (this.entries.get(truncateIndex).getTerm() != if (toTruncate) { futures = new ArrayList<>(entries.length - index + 1); futures.add(truncate(truncateIndex)); } else { futures = new ArrayList<>(entries.length - index);
@Override CompletableFuture<Long> appendEntry(LogEntryProto entry) { checkLogState(); try(AutoCloseableLock writeLock = writeLock()) { entries.add(entry); } return CompletableFuture.completedFuture(entry.getIndex()); }
@Override public boolean isConfigEntry(TermIndex ti) { return ProtoUtils.isConfigurationLogEntry(get(ti.getIndex())); } }
public String printAllLogs() { StringBuilder b = new StringBuilder("\n#servers = " + servers.size() + "\n"); for (RaftServerImpl s : iterateServerImpls()) { b.append(" "); b.append(s).append("\n"); final RaftLog log = s.getState().getLog(); if (log instanceof MemoryRaftLog) { b.append(" "); b.append(((MemoryRaftLog) log).getEntryString()); } } return b.toString(); }
@Override public long getLatestFlushedIndex() { return getNextIndex() - 1; }
/** * note we do not apply log entries to the state machine here since we do not * know whether they have been committed. */ private RaftLog initLog(RaftPeerId id, RaftProperties prop, long lastIndexInSnapshot, Consumer<LogEntryProto> logConsumer) throws IOException { final RaftLog log; if (RaftServerConfigKeys.Log.useMemory(prop)) { final int maxBufferSize = RaftServerConfigKeys.Log.Appender.bufferByteLimit(prop).getSizeInt(); log = new MemoryRaftLog(id, lastIndexInSnapshot, maxBufferSize); } else { log = new SegmentedRaftLog(id, server, this.storage, lastIndexInSnapshot, prop); } log.open(lastIndexInSnapshot, logConsumer); return log; }
@Override public TermIndex getTermIndex(long index) { checkLogState(); try(AutoCloseableLock readLock = readLock()) { return entries.getTermIndex(Math.toIntExact(index)); } }
@Override public String toString() { return "last=" + getLastEntryTermIndex() + ", committed=" + ServerProtoUtils.toString(get(getLastCommittedIndex())); }
@Override CompletableFuture<Long> truncateImpl(long index) { checkLogState(); try(AutoCloseableLock writeLock = writeLock()) { Preconditions.assertTrue(index >= 0); entries.truncate(Math.toIntExact(index)); } return CompletableFuture.completedFuture(index); }
@Override public boolean isConfigEntry(TermIndex ti) { return get(ti.getIndex()).hasConfigurationEntry(); } }