Collections.singletonList(deleteOpenSegment())); } else { openSegment.truncate(index); Preconditions.assertTrue(!openSegment.isOpen()); SegmentFileInfo info = new SegmentFileInfo(openSegment.getStartIndex(), final long oldEnd = ts.getEndIndex(); List<SegmentFileInfo> list = new ArrayList<>(); ts.truncate(index); final int size = closedSegments.size(); for (int i = size - 1;
return new TruncationSegments(null, Collections.singletonList(deleted)); } else { openSegment.truncate(index); Preconditions.assertTrue(!openSegment.isOpen()); final SegmentFileInfo info = new SegmentFileInfo(openSegment.getStartIndex(), final long oldEnd = ts.getEndIndex(); final List<SegmentFileInfo> list = new ArrayList<>(); ts.truncate(index); final int size = segments.size(); for(int i = size - 1;
@Test public void testTruncate() throws Exception { final long term = 1; final long start = 1000; LogSegment segment = LogSegment.newOpenSegment(null, start); for (int i = 0; i < 100; i++) { LogEntryProto entry = ProtoUtils.toLogEntryProto( new SimpleOperation("m" + i).getLogEntryContent(), term, i + start, clientId, callId); segment.appendToOpenSegment(entry); } // truncate an open segment (remove 1080~1099) long newSize = segment.getLogRecord(start + 80).getOffset(); segment.truncate(start + 80); Assert.assertEquals(80, segment.numOfEntries()); checkLogSegment(segment, start, start + 79, false, newSize, term); // truncate a closed segment (remove 1050~1079) newSize = segment.getLogRecord(start + 50).getOffset(); segment.truncate(start + 50); Assert.assertEquals(50, segment.numOfEntries()); checkLogSegment(segment, start, start + 49, false, newSize, term); // truncate all the remaining entries segment.truncate(start); Assert.assertEquals(0, segment.numOfEntries()); checkLogSegment(segment, start, start - 1, false, SegmentedRaftLog.HEADER_BYTES.length, term); }
@Test public void testTruncate() throws Exception { final long term = 1; final long start = 1000; LogSegment segment = LogSegment.newOpenSegment(null, start); for (int i = 0; i < 100; i++) { LogEntryProto entry = ServerProtoUtils.toLogEntryProto( new SimpleOperation("m" + i).getLogEntryContent(), term, i + start); segment.appendToOpenSegment(entry); } // truncate an open segment (remove 1080~1099) long newSize = segment.getLogRecord(start + 80).getOffset(); segment.truncate(start + 80); Assert.assertEquals(80, segment.numOfEntries()); checkLogSegment(segment, start, start + 79, false, newSize, term); // truncate a closed segment (remove 1050~1079) newSize = segment.getLogRecord(start + 50).getOffset(); segment.truncate(start + 50); Assert.assertEquals(50, segment.numOfEntries()); checkLogSegment(segment, start, start + 49, false, newSize, term); // truncate all the remaining entries segment.truncate(start); Assert.assertEquals(0, segment.numOfEntries()); checkLogSegment(segment, start, start - 1, false, SegmentedRaftLogFormat.getHeaderLength(), term); }