public StringBuilder appendTo(final StringBuilder builder) { ControlMessageRequestDecoder writer = new ControlMessageRequestDecoder(); writer.wrap(buffer, offset, BLOCK_LENGTH, SCHEMA_VERSION); return writer.appendTo(builder); } }
public ControlMessageType messageType() { return bodyDecoder.messageType(); }
public int partitionId() { return bodyDecoder.partitionId(); }
@Override public void wrap(DirectBuffer buffer, int offset, int length) { reset(); final int frameEnd = offset + length; headerDecoder.wrap(buffer, offset); offset += headerDecoder.encodedLength(); bodyDecoder.wrap(buffer, offset, headerDecoder.blockLength(), headerDecoder.version()); messageType = bodyDecoder.messageType(); partitionId = bodyDecoder.partitionId(); offset += bodyDecoder.sbeBlockLength(); final int dataLength = bodyDecoder.dataLength(); offset += ControlMessageRequestDecoder.dataHeaderLength(); data.wrap(buffer, offset, dataLength); offset += dataLength; bodyDecoder.limit(offset); assert bodyDecoder.limit() == frameEnd : "Decoder read only to position " + bodyDecoder.limit() + " but expected " + frameEnd + " as final position"; }
@Override public int onFragment( DirectBuffer buffer, int offset, int length, int streamId, boolean isMarkedFailed) { requestHeaderDescriptor.wrap(buffer, offset); final long requestId = requestHeaderDescriptor.requestId(); final int requestStreamId = requestHeaderDescriptor.streamId(); offset += ControlMessageRequestHeaderDescriptor.headerLength(); messageHeaderDecoder.wrap(requestBuffer, 0); offset += messageHeaderDecoder.encodedLength(); requestDecoder.wrap( buffer, offset, requestDecoder.sbeBlockLength(), requestDecoder.sbeSchemaVersion()); final ControlMessageType messageType = requestDecoder.messageType(); lastRequestMessageType(messageType); final int partitionId = requestDecoder.partitionId(); ensureBufferCapacity(requestDecoder.dataLength()); requestDecoder.getData(requestBuffer, 0, requestDecoder.dataLength()); final ControlMessageHandler handler = handlersByTypeId.get(messageType.value()); if (handler != null) { handler.handle(actor, partitionId, requestBuffer, requestId, requestStreamId); } else { sendResponse( actor, () -> errorResponseWriter .unsupportedMessage( getLastRequestMessageType().name(), handlersByTypeId.keySet().toArray()) .tryWriteResponseOrLogFailure(requestStreamId, requestId)); } return FragmentHandler.CONSUME_FRAGMENT_RESULT; }
@Override public void wrap(DirectBuffer buffer, int offset, int length) { headerDecoder.wrap(buffer, offset); bodyDecoder.wrap( buffer, offset + headerDecoder.encodedLength(), headerDecoder.blockLength(), headerDecoder.version()); final int dataLength = bodyDecoder.dataLength(); if (dataLength > 0) { data = msgPackHelper.readMsgPack( new DirectBufferInputStream( buffer, bodyDecoder.limit() + ControlMessageRequestDecoder.dataHeaderLength(), dataLength)); } } }
public StringBuilder appendTo(final StringBuilder builder) final int originalLimit = limit(); limit(offset + actingBlockLength); builder.append("[ControlMessageRequest](sbeTemplateId="); builder.append(TEMPLATE_ID); builder.append(messageType()); builder.append('|'); builder.append(partitionId()); builder.append('|'); builder.append('\'' + data() + '\''); limit(originalLimit);
@Test public void shouldHandleControlRequest() { // given final int writtenLength = writeControlRequestToBuffer(buffer); when(mockControlMessageDispatcher.claim(any(ClaimedFragment.class), anyInt())) .thenAnswer(claimFragment(0)); // when final boolean isHandled = messageHandler.onRequest( serverOutput, DEFAULT_ADDRESS, buffer, 0, writtenLength, REQUEST_ID); // then assertThat(isHandled).isTrue(); verify(mockControlMessageDispatcher).claim(any(ClaimedFragment.class), anyInt()); int offset = fragmentOffset; controlMessageRequestHeaderDescriptor.wrap(sendBuffer, offset); assertThat(controlMessageRequestHeaderDescriptor.streamId()) .isEqualTo(DEFAULT_ADDRESS.getStreamId()); assertThat(controlMessageRequestHeaderDescriptor.requestId()).isEqualTo(REQUEST_ID); offset += ControlMessageRequestHeaderDescriptor.headerLength(); headerEncoder.wrap(sendBuffer, offset); offset += headerEncoder.encodedLength(); controlRequestDecoder.wrap( sendBuffer, offset, controlRequestDecoder.sbeBlockLength(), controlRequestDecoder.sbeSchemaVersion()); final byte[] requestData = readBytes(controlRequestDecoder::getData, controlRequestDecoder::dataLength); assertThat(requestData).isEqualTo(JOB_EVENT); }
public ControlMessageRequestDecoder wrap( final DirectBuffer buffer, final int offset, final int actingBlockLength, final int actingVersion) { if (buffer != this.buffer) { this.buffer = buffer; } this.offset = offset; this.actingBlockLength = actingBlockLength; this.actingVersion = actingVersion; limit(offset + actingBlockLength); return this; }
@Override public int onFragment( DirectBuffer buffer, int offset, int length, int streamId, boolean isMarkedFailed) { requestHeaderDescriptor.wrap(buffer, offset); final long requestId = requestHeaderDescriptor.requestId(); final int requestStreamId = requestHeaderDescriptor.streamId(); offset += ControlMessageRequestHeaderDescriptor.headerLength(); messageHeaderDecoder.wrap(requestBuffer, 0); offset += messageHeaderDecoder.encodedLength(); requestDecoder.wrap( buffer, offset, requestDecoder.sbeBlockLength(), requestDecoder.sbeSchemaVersion()); final ControlMessageType messageType = requestDecoder.messageType(); lastRequestMessageType(messageType); final int partitionId = requestDecoder.partitionId(); ensureBufferCapacity(requestDecoder.dataLength()); requestDecoder.getData(requestBuffer, 0, requestDecoder.dataLength()); final ControlMessageHandler handler = handlersByTypeId.get(messageType.value()); if (handler != null) { handler.handle(actor, partitionId, requestBuffer, requestId, requestStreamId); } else { sendResponse( actor, () -> errorResponseWriter .unsupportedMessage( getLastRequestMessageType().name(), handlersByTypeId.keySet().toArray()) .tryWriteResponseOrLogFailure(requestStreamId, requestId)); } return FragmentHandler.CONSUME_FRAGMENT_RESULT; }
@Override public void wrap(DirectBuffer buffer, int offset, int length) { headerDecoder.wrap(buffer, offset); bodyDecoder.wrap( buffer, offset + headerDecoder.encodedLength(), headerDecoder.blockLength(), headerDecoder.version()); final int dataLength = bodyDecoder.dataLength(); if (dataLength > 0) { data = msgPackHelper.readMsgPack( new DirectBufferInputStream( buffer, bodyDecoder.limit() + ControlMessageRequestDecoder.dataHeaderLength(), dataLength)); } } }
public StringBuilder appendTo(final StringBuilder builder) final int originalLimit = limit(); limit(offset + actingBlockLength); builder.append("[ControlMessageRequest](sbeTemplateId="); builder.append(TEMPLATE_ID); builder.append(messageType()); builder.append('|'); builder.append(partitionId()); builder.append('|'); builder.append('\'' + data() + '\''); limit(originalLimit);
@Test public void shouldHandleControlRequest() { // given final int writtenLength = writeControlRequestToBuffer(buffer); when(mockControlMessageDispatcher.claim(any(ClaimedFragment.class), anyInt())) .thenAnswer(claimFragment(0)); // when final boolean isHandled = messageHandler.onRequest( serverOutput, DEFAULT_ADDRESS, buffer, 0, writtenLength, REQUEST_ID); // then assertThat(isHandled).isTrue(); verify(mockControlMessageDispatcher).claim(any(ClaimedFragment.class), anyInt()); int offset = fragmentOffset; controlMessageRequestHeaderDescriptor.wrap(sendBuffer, offset); assertThat(controlMessageRequestHeaderDescriptor.streamId()) .isEqualTo(DEFAULT_ADDRESS.getStreamId()); assertThat(controlMessageRequestHeaderDescriptor.requestId()).isEqualTo(REQUEST_ID); offset += ControlMessageRequestHeaderDescriptor.headerLength(); headerEncoder.wrap(sendBuffer, offset); offset += headerEncoder.encodedLength(); controlRequestDecoder.wrap( sendBuffer, offset, controlRequestDecoder.sbeBlockLength(), controlRequestDecoder.sbeSchemaVersion()); final byte[] requestData = readBytes(controlRequestDecoder::getData, controlRequestDecoder::dataLength); assertThat(requestData).isEqualTo(JOB_EVENT); }
public ControlMessageRequestDecoder wrap( final DirectBuffer buffer, final int offset, final int actingBlockLength, final int actingVersion) { if (buffer != this.buffer) { this.buffer = buffer; } this.offset = offset; this.actingBlockLength = actingBlockLength; this.actingVersion = actingVersion; limit(offset + actingBlockLength); return this; }
public int getData(final MutableDirectBuffer dst, final int dstOffset, final int length) { final int headerLength = 2; final int limit = parentMessage.limit(); final int dataLength = (int)(buffer.getShort(limit, java.nio.ByteOrder.LITTLE_ENDIAN) & 0xFFFF); final int bytesCopied = Math.min(length, dataLength); parentMessage.limit(limit + headerLength + dataLength); buffer.getBytes(limit + headerLength, dst, dstOffset, bytesCopied); return bytesCopied; }
public StringBuilder appendTo(final StringBuilder builder) { ControlMessageRequestDecoder writer = new ControlMessageRequestDecoder(); writer.wrap(buffer, offset, BLOCK_LENGTH, SCHEMA_VERSION); return writer.appendTo(builder); } }
public ControlMessageType messageType() { return bodyDecoder.messageType(); }
public int partitionId() { return bodyDecoder.partitionId(); }
public void wrapData(final DirectBuffer wrapBuffer) { final int headerLength = 2; final int limit = parentMessage.limit(); final int dataLength = (int)(buffer.getShort(limit, java.nio.ByteOrder.LITTLE_ENDIAN) & 0xFFFF); parentMessage.limit(limit + headerLength + dataLength); wrapBuffer.wrap(buffer, limit + headerLength, dataLength); }
public int getData(final MutableDirectBuffer dst, final int dstOffset, final int length) { final int headerLength = 2; final int limit = parentMessage.limit(); final int dataLength = (int)(buffer.getShort(limit, java.nio.ByteOrder.LITTLE_ENDIAN) & 0xFFFF); final int bytesCopied = Math.min(length, dataLength); parentMessage.limit(limit + headerLength + dataLength); buffer.getBytes(limit + headerLength, dst, dstOffset, bytesCopied); return bytesCopied; }