@Override public LogEntryProto get(long index) throws RaftLogIOException { checkLogState(); LogSegment segment; LogRecordWithEntry recordAndEntry; try (AutoCloseableLock readLock = readLock()) { segment = cache.getSegment(index); if (segment == null) { return null; } recordAndEntry = segment.getEntryWithoutLoading(index); if (recordAndEntry == null) { return null; } if (recordAndEntry.hasEntry()) { return recordAndEntry.getEntry(); } } // the entry is not in the segment's cache. Load the cache without holding // RaftLog's lock. checkAndEvictCache(); return segment.loadCache(recordAndEntry.getRecord()); }
@Override public LogEntryProto get(long index) throws RaftLogIOException { checkLogState(); LogSegment segment; LogRecordWithEntry recordAndEntry; try (AutoCloseableLock readLock = readLock()) { segment = cache.getSegment(index); if (segment == null) { return null; } recordAndEntry = segment.getEntryWithoutLoading(index); if (recordAndEntry == null) { return null; } if (recordAndEntry.hasEntry()) { return recordAndEntry.getEntry(); } } // the entry is not in the segment's cache. Load the cache without holding // RaftLog's lock. checkAndEvictCache(); return segment.loadCache(recordAndEntry.getRecord()); }
cache.rollOpenSegment(true); fileLogWorker.rollLogSegment(currentOpenSegment); checkAndEvictCache(); } else if (currentOpenSegment.numOfEntries() > 0 && currentOpenSegment.getLastTermIndex().getTerm() != entry.getTerm()) { cache.rollOpenSegment(true); fileLogWorker.rollLogSegment(currentOpenSegment); checkAndEvictCache();
cache.rollOpenSegment(true); fileLogWorker.rollLogSegment(currentOpenSegment); checkAndEvictCache(); } else if (currentOpenSegment.numOfEntries() > 0 && currentOpenSegment.getLastTermIndex().getTerm() != entry.getTerm()) { cache.rollOpenSegment(true); fileLogWorker.rollLogSegment(currentOpenSegment); checkAndEvictCache();