@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 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 CompletableFuture<Long> appendEntry(LogEntryProto entry) { checkLogState(); try(AutoCloseableLock writeLock = writeLock()) { entries.add(entry); } return CompletableFuture.completedFuture(entry.getIndex()); }
@Override public TermIndex getTermIndex(long index) { checkLogState(); try(AutoCloseableLock readLock = readLock()) { return entries.getTermIndex(Math.toIntExact(index)); } }
@Override public TermIndex getTermIndex(long index) { checkLogState(); try(AutoCloseableLock readLock = readLock()) { final int i = (int) index; return i >= 0 && i < entries.size() ? ServerProtoUtils.toTermIndex(entries.get(i)) : null; } }
@Override public TermIndex getLastEntryTermIndex() { checkLogState(); try(AutoCloseableLock readLock = readLock()) { final int size = entries.size(); return size == 0 ? null : ServerProtoUtils.toTermIndex(entries.get(size - 1)); } }
@Override public LogEntryProto get(long index) { checkLogState(); try(AutoCloseableLock readLock = readLock()) { return entries.get(Math.toIntExact(index)); } }
@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 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 TermIndex[] getEntries(long startIndex, long endIndex) { checkLogState(); try(AutoCloseableLock readLock = readLock()) { final int from = (int) startIndex; if (startIndex >= entries.size()) { return null; } final int to = (int) Math.min(entries.size(), endIndex); TermIndex[] ti = new TermIndex[to - from]; for (int i = 0; i < ti.length; i++) { ti[i] = TermIndex.newTermIndex(entries.get(i).getTerm(), entries.get(i).getIndex()); } return ti; } }
@Override public TermIndex[] getEntries(long startIndex, long endIndex) { checkLogState(); try(AutoCloseableLock readLock = readLock()) { if (startIndex >= entries.size()) { return null; } final int from = Math.toIntExact(startIndex); final int to = Math.toIntExact(Math.min(entries.size(), endIndex)); TermIndex[] ti = new TermIndex[to - from]; for (int i = 0; i < ti.length; i++) { ti[i] = entries.getTermIndex(i); } return ti; } }
@Override public TermIndex getLastEntryTermIndex() { checkLogState(); try(AutoCloseableLock readLock = readLock()) { return entries.getTermIndex(entries.size() - 1); } }
@Override CompletableFuture<Long> appendEntryImpl(LogEntryProto entry) { checkLogState(); try(AutoCloseableLock writeLock = writeLock()) { validateLogEntry(entry); entries.add(entry); } return CompletableFuture.completedFuture(entry.getIndex()); }
@Override public List<CompletableFuture<Long>> append(LogEntryProto... entries) { checkLogState(); try(AutoCloseableLock writeLock = writeLock()) { if (entries == null || entries.length == 0) {
@Override public List<CompletableFuture<Long>> appendImpl(LogEntryProto... entries) { checkLogState(); if (entries == null || entries.length == 0) { return Collections.emptyList();