@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 CompletableFuture<Long> truncateImpl(long index) { checkLogState(); try(AutoCloseableLock writeLock = writeLock()) { Preconditions.assertTrue(index >= 0); entries.truncate(Math.toIntExact(index)); } return CompletableFuture.completedFuture(index); }
TermIndex getTermIndex(int i) { return ServerProtoUtils.toTermIndex(get(i)); }
@Override public long getStartIndex() { return entries.size() == 0? RaftServerConstants.INVALID_LOG_INDEX: entries.getTermIndex(0).getIndex(); }
@Override CompletableFuture<Long> appendEntryImpl(LogEntryProto entry) { checkLogState(); try(AutoCloseableLock writeLock = writeLock()) { validateLogEntry(entry); entries.add(entry); } return CompletableFuture.completedFuture(entry.getIndex()); }
@Override public LogEntryProto get(long index) { checkLogState(); try(AutoCloseableLock readLock = readLock()) { return entries.get(Math.toIntExact(index)); } }
@Override public TermIndex getLastEntryTermIndex() { checkLogState(); try(AutoCloseableLock readLock = readLock()) { return entries.getTermIndex(entries.size() - 1); } }
@Override public TermIndex getTermIndex(long index) { checkLogState(); try(AutoCloseableLock readLock = readLock()) { return entries.getTermIndex(Math.toIntExact(index)); } }