use of io.pravega.shared.protocol.netty.Append in project pravega by pravega.
the class SegmentOutputStreamTest method testClose.
@Test(timeout = 10000)
public void testClose() throws ConnectionFailedException {
UUID cid = UUID.randomUUID();
PravegaNodeUri uri = new PravegaNodeUri("endpoint", SERVICE_PORT);
MockConnectionFactoryImpl cf = new MockConnectionFactoryImpl();
cf.setExecutor(executorService());
MockController controller = new MockController(uri.getEndpoint(), uri.getPort(), cf, true);
ClientConnection connection = mock(ClientConnection.class);
cf.provideConnection(uri, connection);
SegmentOutputStreamImpl output = new SegmentOutputStreamImpl(SEGMENT, true, controller, cf, cid, segmentSealedCallback, RETRY_SCHEDULE, DelegationTokenProviderFactory.createWithEmptyToken());
output.reconnect();
verify(connection).send(new SetupAppend(output.getRequestId(), cid, SEGMENT, ""));
cf.getProcessor(uri).appendSetup(new AppendSetup(output.getRequestId(), SEGMENT, cid, 0));
ByteBuffer data = getBuffer("test");
CompletableFuture<Void> acked = new CompletableFuture<>();
output.write(PendingEvent.withoutHeader(null, data, acked));
verify(connection).send(new Append(SEGMENT, cid, 1, 1, Unpooled.wrappedBuffer(data), null, output.getRequestId()));
assertEquals(false, acked.isDone());
AssertExtensions.assertBlocks(() -> output.close(), () -> cf.getProcessor(uri).dataAppended(new WireCommands.DataAppended(output.getRequestId(), cid, 1, 0, -1)));
assertEquals(false, acked.isCompletedExceptionally());
assertEquals(true, acked.isDone());
verify(connection, Mockito.atMost(1)).send(new WireCommands.KeepAlive());
verify(connection).close();
verifyNoMoreInteractions(connection);
}
use of io.pravega.shared.protocol.netty.Append in project pravega by pravega.
the class CommandEncoderTest method testAppendSizeQueuedBreak.
@Test
public void testAppendSizeQueuedBreak() throws IOException {
AppendBatchSizeTracker batchSizeTracker = new FixedBatchSizeTracker(100);
DecodingOutputStream output = new DecodingOutputStream();
PravegaNodeUri endpoint = new PravegaNodeUri("localhost", SERVICE_PORT);
CommandEncoder commandEncoder = new CommandEncoder(x -> batchSizeTracker, null, output, null, endpoint);
UUID writerId1 = UUID.randomUUID();
WireCommand setupAppend = new WireCommands.SetupAppend(0, writerId1, "seg", "");
commandEncoder.write(setupAppend);
assertEquals(output.decoded.remove(0), setupAppend);
UUID writerId2 = UUID.randomUUID();
setupAppend = new WireCommands.SetupAppend(0, writerId2, "seg", "");
commandEncoder.write(setupAppend);
assertEquals(output.decoded.remove(0), setupAppend);
ByteBuf data = Unpooled.wrappedBuffer(new byte[40]);
WireCommands.Event event = new WireCommands.Event(data);
Append append1 = new Append("seg", writerId1, 1, event, 0);
commandEncoder.write(append1);
Append appendOther1 = new Append("seg", writerId2, 101, event, 0);
WireCommands.Event largeEvent = new WireCommands.Event(Unpooled.wrappedBuffer(new byte[CommandEncoder.MAX_QUEUED_SIZE]));
Append appendOther2 = new Append("seg", writerId2, 102, largeEvent, 0);
commandEncoder.write(appendOther1);
commandEncoder.write(appendOther2);
AppendBlock block = (AppendBlock) output.decoded.remove(0);
assertEquals(108, block.getData().readableBytes());
AppendBlockEnd blockEnd = (AppendBlockEnd) output.decoded.remove(0);
assertEquals(writerId1, blockEnd.getWriterId());
assertEquals(48, blockEnd.getSizeOfWholeEvents());
assertEquals(0, blockEnd.getData().readableBytes());
assertEquals(1, blockEnd.getNumEvents());
block = (AppendBlock) output.decoded.remove(0);
assertEquals(CommandEncoder.MAX_QUEUED_SIZE + 48 + 8, block.getData().readableBytes());
blockEnd = (AppendBlockEnd) output.decoded.remove(0);
assertEquals(writerId2, blockEnd.getWriterId());
assertEquals(CommandEncoder.MAX_QUEUED_SIZE + 48 + 8, blockEnd.getSizeOfWholeEvents());
assertEquals(0, blockEnd.getData().readableBytes());
assertEquals(2, blockEnd.getNumEvents());
}
use of io.pravega.shared.protocol.netty.Append in project pravega by pravega.
the class CommandEncoderTest method testValidateAppend.
@Test
public void testValidateAppend() {
UUID writerId = UUID.randomUUID();
ByteBuf data = Unpooled.wrappedBuffer(new byte[40]);
WireCommands.Event event = new WireCommands.Event(data);
assertThrows(InvalidMessageException.class, () -> CommandEncoder.validateAppend(new Append("", writerId, 1, event, 1), null));
CommandEncoder.Session s = Mockito.mock(CommandEncoder.Session.class);
Mockito.doReturn(writerId).when(s).getId();
CommandEncoder.validateAppend(new Append("", writerId, 1, event, 1), s);
assertThrows(InvalidMessageException.class, () -> CommandEncoder.validateAppend(new Append("", writerId, -1, event, 1), s));
assertThrows(IllegalArgumentException.class, () -> CommandEncoder.validateAppend(new Append("", writerId, 1, event, 132, 1), s));
}
use of io.pravega.shared.protocol.netty.Append in project pravega by pravega.
the class CommandEncoderTest method testAppendsAreBatched.
@Test
public void testAppendsAreBatched() throws IOException {
AppendBatchSizeTracker batchSizeTracker = new FixedBatchSizeTracker(100);
DecodingOutputStream output = new DecodingOutputStream();
PravegaNodeUri endpoint = new PravegaNodeUri("localhost", SERVICE_PORT);
CommandEncoder commandEncoder = new CommandEncoder(x -> batchSizeTracker, null, output, null, endpoint);
UUID writerId = UUID.randomUUID();
WireCommand setupAppend = new WireCommands.SetupAppend(0, writerId, "seg", "");
commandEncoder.write(setupAppend);
assertEquals(output.decoded.remove(0), setupAppend);
ByteBuf data = Unpooled.wrappedBuffer(new byte[40]);
WireCommands.Event event = new WireCommands.Event(data);
Append append1 = new Append("seg", writerId, 1, event, 0);
Append append2 = new Append("seg", writerId, 2, event, 0);
Append append3 = new Append("seg", writerId, 3, event, 0);
commandEncoder.write(append1);
commandEncoder.write(append2);
commandEncoder.write(append3);
AppendBlock block = (AppendBlock) output.decoded.remove(0);
assertEquals(108, block.getData().readableBytes());
AppendBlockEnd blockEnd = (AppendBlockEnd) output.decoded.remove(0);
assertEquals(writerId, blockEnd.getWriterId());
assertEquals(80 + 16, blockEnd.getSizeOfWholeEvents());
assertEquals(40 + 4, blockEnd.getData().readableBytes());
assertEquals(3, blockEnd.getNumEvents());
}
use of io.pravega.shared.protocol.netty.Append in project pravega by pravega.
the class CommandEncoderTest method testBatchInterupted.
@Test
public void testBatchInterupted() throws IOException {
AppendBatchSizeTracker batchSizeTracker = new FixedBatchSizeTracker(100);
DecodingOutputStream output = new DecodingOutputStream();
PravegaNodeUri endpoint = new PravegaNodeUri("localhost", SERVICE_PORT);
CommandEncoder commandEncoder = new CommandEncoder(x -> batchSizeTracker, null, output, null, endpoint);
UUID writerId = UUID.randomUUID();
WireCommand setupAppend = new WireCommands.SetupAppend(0, writerId, "seg", "");
commandEncoder.write(setupAppend);
assertEquals(output.decoded.remove(0), setupAppend);
ByteBuf data = Unpooled.wrappedBuffer(new byte[40]);
WireCommands.Event event = new WireCommands.Event(data);
Append append1 = new Append("seg", writerId, 1, event, 0);
commandEncoder.write(append1);
commandEncoder.write(new WireCommands.KeepAlive());
AppendBlock block = (AppendBlock) output.decoded.remove(0);
assertEquals(108, block.getData().readableBytes());
AppendBlockEnd blockEnd = (AppendBlockEnd) output.decoded.remove(0);
assertEquals(writerId, blockEnd.getWriterId());
assertEquals(48, blockEnd.getSizeOfWholeEvents());
assertEquals(0, blockEnd.getData().readableBytes());
assertEquals(1, blockEnd.getNumEvents());
WireCommands.KeepAlive breakingCommand = (WireCommands.KeepAlive) output.decoded.remove(0);
assertNotNull(breakingCommand);
}
Aggregations