connection.send(new SegmentIsTruncated(nonCachedEntry.getStreamSegmentOffset(), segment, info.getStartOffset(), EMPTY_STACK_TRACE))) .exceptionally(e -> handleException(nonCachedEntry.getStreamSegmentOffset(), segment, operation, wrapCancellationException(e))); } else { connection.send(new SegmentIsTruncated(nonCachedEntry.getStreamSegmentOffset(), segment, nonCachedEntry.getStreamSegmentOffset(), clientReplyStackTrace)); } else {
@Override public void segmentIsTruncated(SegmentIsTruncated segmentIsTruncated) { log.info("Received segmentIsTruncated {}", segmentIsTruncated); CompletableFuture<SegmentRead> future = grabFuture(segmentIsTruncated.getSegment(), segmentIsTruncated.getRequestId()); if (future != null) { future.completeExceptionally(new SegmentTruncatedException()); } }
} else if (u instanceof BadOffsetException) { BadOffsetException badOffset = (BadOffsetException) u; invokeSafely(connection::send, new SegmentIsTruncated(requestId, segment, badOffset.getExpectedOffset(), clientReplyStackTrace), failureHandler); } else if (u instanceof TableSegmentNotEmptyException) { log.warn(requestId, "Table segment '{}' is not empty to perform '{}'.", segment, operation);
order.verify(connection).send(new WireCommands.SegmentTruncated(3, streamSegmentName)); order.verify(connection).send(new WireCommands.SegmentTruncated(4, streamSegmentName)); order.verify(connection).send(new WireCommands.SegmentIsTruncated(5, streamSegmentName, truncateOffset, "")); order.verify(connection).send(new WireCommands.SegmentDeleted(6, streamSegmentName)); order.verifyNoMoreInteractions();
WireCommands.SegmentIsTruncated segmentIsTruncated = new WireCommands.SegmentIsTruncated(1234L, segment.getScopedName(), 1234, mockClientReplyStackTrace);
@Test(timeout = 20000) public void testReadSegmentTruncated() { // Set up PravegaRequestProcessor instance to execute read segment request against String streamSegmentName = "testReadSegment"; int readLength = 1000; StreamSegmentStore store = mock(StreamSegmentStore.class); ServerConnection connection = mock(ServerConnection.class); PravegaRequestProcessor processor = new PravegaRequestProcessor(store, mock(TableStore.class), connection); TestReadResultEntry entry1 = new TestReadResultEntry(ReadResultEntryType.Truncated, 0, readLength); List<ReadResultEntry> results = new ArrayList<>(); results.add(entry1); CompletableFuture<ReadResult> readResult = new CompletableFuture<>(); readResult.complete(new TestReadResult(0, readLength, results)); when(store.read(streamSegmentName, 0, readLength, PravegaRequestProcessor.TIMEOUT)).thenReturn(readResult); StreamSegmentInformation info = StreamSegmentInformation.builder() .name(streamSegmentName) .length(1234) .startOffset(123) .build(); when(store.getStreamSegmentInfo(streamSegmentName, PravegaRequestProcessor.TIMEOUT)) .thenReturn(CompletableFuture.completedFuture(info)); // Execute and Verify readSegment calling stack in connection and store is executed as design. processor.readSegment(new WireCommands.ReadSegment(streamSegmentName, 0, readLength, "")); verify(store).read(streamSegmentName, 0, readLength, PravegaRequestProcessor.TIMEOUT); verify(store).getStreamSegmentInfo(streamSegmentName, PravegaRequestProcessor.TIMEOUT); verify(connection).send(new WireCommands.SegmentIsTruncated(0, streamSegmentName, info.getStartOffset(), "")); verifyNoMoreInteractions(connection); verifyNoMoreInteractions(store); }
@Test public void testSegmentIsTruncated() throws IOException { testCommand(new WireCommands.SegmentIsTruncated(l, testString1, l + 1, "SomeException")); }
@Test public void testCompatibilitySegmentIsTruncatedV5() throws IOException { // Test that we are able to decode a message with a previous version ByteArrayOutputStream bout = new ByteArrayOutputStream(); SegmentIsTruncatedV5 commandV5 = new SegmentIsTruncatedV5(l, "", 0); commandV5.writeFields(new DataOutputStream(bout)); testCommandFromByteArray(bout.toByteArray(), new WireCommands.SegmentIsTruncated(l, "", 0, "")); }
public static WireCommand readFrom(ByteBufInputStream in, int length) throws IOException { long requestId = in.readLong(); String segment = in.readUTF(); long startOffset = in.readLong(); String serverStackTrace = (in.available() > 0) ? in.readUTF() : EMPTY_STACK_TRACE; return new SegmentIsTruncated(requestId, segment, startOffset, serverStackTrace); }