@Override long getEndIndex() { return segmentToClose.getEndIndex(); }
long getEndIndex() { return openSegment != null ? openSegment.getEndIndex() : (closedSegments.isEmpty() ? INVALID_LOG_INDEX : closedSegments.get(closedSegments.size() - 1).getEndIndex()); }
@Override public int compareTo(Long l) { return (l >= getStartIndex() && l <= getEndIndex()) ? 0 : (this.getEndIndex() < l ? -1 : 1); }
@Override public int compareTo(Long l) { return (l >= getStartIndex() && l <= getEndIndex()) ? 0 : (this.getEndIndex() < l ? -1 : 1); }
static SegmentFileInfo deleteOpenSegment(LogSegment openSegment, Runnable clearOpenSegment) { final long oldEnd = openSegment.getEndIndex(); openSegment.clear(); final SegmentFileInfo info = new SegmentFileInfo(openSegment.getStartIndex(), oldEnd, true, 0, openSegment.getEndIndex()); clearOpenSegment.run(); return info; } }
long getEndIndex() { return openSegment != null ? openSegment.getEndIndex() : (closedSegments.isEmpty() ? INVALID_LOG_INDEX : closedSegments.get(closedSegments.size() - 1).getEndIndex()); }
private void getFromSegment(LogSegment segment, long startIndex, TermIndex[] entries, int offset, int size) { long endIndex = segment.getEndIndex(); endIndex = Math.min(endIndex, startIndex + size - 1); int index = offset; for (long i = startIndex; i <= endIndex; i++) { LogRecord r = segment.getLogRecord(i); entries[index++] = r == null ? null : r.getTermIndex(); } }
@Override public TermIndex next() { LogRecord record; if (currentSegment == null || (record = currentSegment.getLogRecord(nextIndex)) == null) { throw new NoSuchElementException(); } if (++nextIndex > currentSegment.getEndIndex()) { if (currentSegment != openSegment) { segmentIndex++; currentSegment = segmentIndex == closedSegments.size() ? openSegment : closedSegments.get(segmentIndex); } } return record.getTermIndex(); } }
private static void getFromSegment(LogSegment segment, long startIndex, TermIndex[] entries, int offset, int size) { long endIndex = segment.getEndIndex(); endIndex = Math.min(endIndex, startIndex + size - 1); int index = offset; for (long i = startIndex; i <= endIndex; i++) { LogRecord r = segment.getLogRecord(i); entries[index++] = r == null ? null : r.getTermIndex(); } }
void rollLogSegment(LogSegment segmentToClose) { LOG.info("Rolling segment:{} index to:{}", name, (segmentToClose.getEndIndex() + 1)); addIOTask(new FinalizeLogSegment(segmentToClose)); addIOTask(new StartLogSegment(segmentToClose.getEndIndex() + 1)); }
FinalizeLogSegment(LogSegment segmentToClose) { Preconditions.assertTrue(segmentToClose != null, "Log segment to be rolled is null"); this.startIndex = segmentToClose.getStartIndex(); this.endIndex = segmentToClose.getEndIndex(); }
private SegmentFileInfo deleteOpenSegment() { final long oldEnd = openSegment.getEndIndex(); openSegment.clear(); SegmentFileInfo info = new SegmentFileInfo(openSegment.getStartIndex(), oldEnd, true, 0, openSegment.getEndIndex()); clearOpenSegment(); return info; }
void rollLogSegment(LogSegment segmentToClose) { LOG.info("{}: Rolling segment {} to index:{}", name, segmentToClose.toString(), segmentToClose.getEndIndex()); addIOTask(new FinalizeLogSegment(segmentToClose)); addIOTask(new StartLogSegment(segmentToClose.getEndIndex() + 1)); }
@Override public TermIndex next() { LogRecord record; if (currentSegment == null || (record = currentSegment.getLogRecord(nextIndex)) == null) { throw new NoSuchElementException(); } if (++nextIndex > currentSegment.getEndIndex()) { if (currentSegment != openSegment) { segmentIndex++; currentSegment = segmentIndex == closedSegments.size() ? openSegment : closedSegments.get(segmentIndex); } } return record.getTermIndex(); } }
/** * finalize the current open segment, and start a new open segment */ void rollOpenSegment(boolean createNewOpen) { Preconditions.assertTrue(openSegment != null && openSegment.numOfEntries() > 0); final long nextIndex = openSegment.getEndIndex() + 1; openSegment.close(); closedSegments.add(openSegment); clearOpenSegment(); if (createNewOpen) { addOpenSegment(nextIndex); } }
private void validateAdding(LogSegment segment) { final LogSegment lastClosed = getLastClosedSegment(); if (lastClosed != null) { Preconditions.assertTrue(!lastClosed.isOpen()); Preconditions.assertTrue(lastClosed.getEndIndex() + 1 == segment.getStartIndex()); } }
private void validateAdding(LogSegment segment) { final LogSegment lastClosed = closedSegments.getLast(); if (lastClosed != null) { Preconditions.assertTrue(!lastClosed.isOpen()); Preconditions.assertTrue(lastClosed.getEndIndex() + 1 == segment.getStartIndex()); } }
/** * finalize the current open segment, and start a new open segment */ void rollOpenSegment(boolean createNewOpen) { Preconditions.assertTrue(openSegment != null && openSegment.numOfEntries() > 0); final long nextIndex = openSegment.getEndIndex() + 1; openSegment.close(); closedSegments.add(openSegment); clearOpenSegment(); if (createNewOpen) { addOpenSegment(nextIndex); } }
private void checkLogSegment(LogSegment segment, long start, long end, boolean isOpen, long totalSize, long term) throws Exception { Assert.assertEquals(start, segment.getStartIndex()); Assert.assertEquals(end, segment.getEndIndex()); Assert.assertEquals(isOpen, segment.isOpen()); Assert.assertEquals(totalSize, segment.getTotalSize()); long offset = SegmentedRaftLog.HEADER_BYTES.length; for (long i = start; i <= end; i++) { LogSegment.LogRecord record = segment.getLogRecord(i); LogRecordWithEntry lre = segment.getEntryWithoutLoading(i); Assert.assertEquals(i, lre.getRecord().getTermIndex().getIndex()); Assert.assertEquals(term, lre.getRecord().getTermIndex().getTerm()); Assert.assertEquals(offset, record.getOffset()); LogEntryProto entry = lre.hasEntry() ? lre.getEntry() : segment.loadCache(lre.getRecord()); offset += getEntrySize(entry); } }
static void checkLogSegment(LogSegment segment, long start, long end, boolean isOpen, long totalSize, long term) throws Exception { Assert.assertEquals(start, segment.getStartIndex()); Assert.assertEquals(end, segment.getEndIndex()); Assert.assertEquals(isOpen, segment.isOpen()); Assert.assertEquals(totalSize, segment.getTotalSize()); long offset = SegmentedRaftLogFormat.getHeaderLength(); for (long i = start; i <= end; i++) { LogSegment.LogRecord record = segment.getLogRecord(i); LogRecordWithEntry lre = segment.getEntryWithoutLoading(i); Assert.assertEquals(i, lre.getRecord().getTermIndex().getIndex()); Assert.assertEquals(term, lre.getRecord().getTermIndex().getTerm()); Assert.assertEquals(offset, record.getOffset()); LogEntryProto entry = lre.hasEntry() ? lre.getEntry() : segment.loadCache(lre.getRecord()); offset += getEntrySize(entry); } }