@Override public void truncateToRevision(Revision newStart) { meta.truncateSegment(newStart.asImpl().getOffsetInSegment()); }
EventRead<byte[]> event1 = reader.readNextEvent(0); assertEquals(buffer1, ByteBuffer.wrap(event1.getEvent())); metadataClient.truncateSegment(length / 3); assertEquals(buffer2, ByteBuffer.wrap(reader.readNextEvent(0).getEvent())); metadataClient.truncateSegment(length); ByteBuffer buffer4 = writeInt(stream, 4); AssertExtensions.assertThrows(TruncatedDataException.class, () -> reader.readNextEvent(0));
@Test(timeout = 5000) public void testTruncate() { MockSegmentStreamFactory factory = new MockSegmentStreamFactory(); Segment segment = new Segment("Scope", "Stream", 1); EventWriterConfig config = EventWriterConfig.builder().build(); SegmentOutputStream outputStream = factory.createOutputStreamForSegment(segment, c -> { }, config, ""); sendData("1", outputStream); sendData("2", outputStream); sendData("3", outputStream); SegmentMetadataClient metadataClient = factory.createSegmentMetadataClient(segment, ""); long length = metadataClient.getSegmentInfo().getWriteOffset(); @Cleanup SegmentIteratorImpl<String> iter = new SegmentIteratorImpl<>(factory, segment, stringSerializer, 0, length); assertEquals("1", iter.next()); long segmentLength = metadataClient.fetchCurrentSegmentLength(); assertEquals(0, segmentLength % 3); metadataClient.truncateSegment(segmentLength * 2 / 3); AssertExtensions.assertThrows(TruncatedDataException.class, () -> iter.next()); @Cleanup SegmentIteratorImpl<String> iter2 = new SegmentIteratorImpl<>(factory, segment, stringSerializer, segmentLength * 2 / 3, length); assertTrue(iter2.hasNext()); assertEquals("3", iter2.next()); assertFalse(iter.hasNext()); }
assertEquals(writeOffset, metadataClient.fetchCurrentSegmentLength()); assertTrue(metadataClient.getSegmentInfo().getWriteOffset() > testString.length()); metadataClient.truncateSegment(writeOffset); assertEquals(writeOffset, metadataClient.getSegmentInfo().getStartingOffset()); assertEquals(writeOffset, metadataClient.getSegmentInfo().getWriteOffset());