public StringBuilder appendTo(final StringBuilder builder) { builder.append('('); //Token{signal=ENCODING, name='blockLength', referencedName='null', description='null', id=-1, version=0, deprecated=0, encodedLength=2, offset=0, componentTokenCount=1, encoding=Encoding{presence=REQUIRED, primitiveType=UINT16, byteOrder=LITTLE_ENDIAN, minValue=null, maxValue=null, nullValue=null, constValue=null, characterEncoding='null', epoch='null', timeUnit=null, semanticType='null'}} builder.append("blockLength="); builder.append(blockLength()); builder.append('|'); //Token{signal=ENCODING, name='templateId', referencedName='null', description='null', id=-1, version=0, deprecated=0, encodedLength=2, offset=2, componentTokenCount=1, encoding=Encoding{presence=REQUIRED, primitiveType=UINT16, byteOrder=LITTLE_ENDIAN, minValue=null, maxValue=null, nullValue=null, constValue=null, characterEncoding='null', epoch='null', timeUnit=null, semanticType='null'}} builder.append("templateId="); builder.append(templateId()); builder.append('|'); //Token{signal=ENCODING, name='schemaId', referencedName='null', description='null', id=-1, version=0, deprecated=0, encodedLength=2, offset=4, componentTokenCount=1, encoding=Encoding{presence=REQUIRED, primitiveType=UINT16, byteOrder=LITTLE_ENDIAN, minValue=null, maxValue=null, nullValue=null, constValue=null, characterEncoding='null', epoch='null', timeUnit=null, semanticType='null'}} builder.append("schemaId="); builder.append(schemaId()); builder.append('|'); //Token{signal=ENCODING, name='version', referencedName='null', description='null', id=-1, version=0, deprecated=0, encodedLength=2, offset=6, componentTokenCount=1, encoding=Encoding{presence=REQUIRED, primitiveType=UINT16, byteOrder=LITTLE_ENDIAN, minValue=null, maxValue=null, nullValue=null, constValue=null, characterEncoding='null', epoch='null', timeUnit=null, semanticType='null'}} builder.append("version="); builder.append(version()); builder.append(')'); return builder; } }
public StringBuilder appendTo(final StringBuilder builder) { builder.append('('); //Token{signal=ENCODING, name='blockLength', referencedName='null', description='null', id=-1, version=0, deprecated=0, encodedLength=2, offset=0, componentTokenCount=1, encoding=Encoding{presence=REQUIRED, primitiveType=UINT16, byteOrder=LITTLE_ENDIAN, minValue=null, maxValue=null, nullValue=null, constValue=null, characterEncoding='null', epoch='null', timeUnit=null, semanticType='null'}} builder.append("blockLength="); builder.append(blockLength()); builder.append('|'); //Token{signal=ENCODING, name='templateId', referencedName='null', description='null', id=-1, version=0, deprecated=0, encodedLength=2, offset=2, componentTokenCount=1, encoding=Encoding{presence=REQUIRED, primitiveType=UINT16, byteOrder=LITTLE_ENDIAN, minValue=null, maxValue=null, nullValue=null, constValue=null, characterEncoding='null', epoch='null', timeUnit=null, semanticType='null'}} builder.append("templateId="); builder.append(templateId()); builder.append('|'); //Token{signal=ENCODING, name='schemaId', referencedName='null', description='null', id=-1, version=0, deprecated=0, encodedLength=2, offset=4, componentTokenCount=1, encoding=Encoding{presence=REQUIRED, primitiveType=UINT16, byteOrder=LITTLE_ENDIAN, minValue=null, maxValue=null, nullValue=null, constValue=null, characterEncoding='null', epoch='null', timeUnit=null, semanticType='null'}} builder.append("schemaId="); builder.append(schemaId()); builder.append('|'); //Token{signal=ENCODING, name='version', referencedName='null', description='null', id=-1, version=0, deprecated=0, encodedLength=2, offset=6, componentTokenCount=1, encoding=Encoding{presence=REQUIRED, primitiveType=UINT16, byteOrder=LITTLE_ENDIAN, minValue=null, maxValue=null, nullValue=null, constValue=null, characterEncoding='null', epoch='null', timeUnit=null, semanticType='null'}} builder.append("version="); builder.append(version()); builder.append(')'); return builder; } }
protected <T extends MessageDecoderFlyweight> T getAs(int index, T decoder) { final DirectBuffer sentResponse = sentResponses.get(index); headerDecoder.wrap(sentResponse, MESSAGE_START_OFFSET); decoder.wrap( sentResponse, MESSAGE_START_OFFSET + headerDecoder.encodedLength(), headerDecoder.blockLength(), headerDecoder.version()); return decoder; }
protected <T extends MessageDecoderFlyweight> T getAs(int index, T decoder) { final DirectBuffer sentResponse = sentResponses.get(index); headerDecoder.wrap(sentResponse, MESSAGE_START_OFFSET); decoder.wrap( sentResponse, MESSAGE_START_OFFSET + headerDecoder.encodedLength(), headerDecoder.blockLength(), headerDecoder.version()); return decoder; }
private static boolean shouldRetryRequest(final DirectBuffer responseContent) { final ErrorResponseHandler errorHandler = new ErrorResponseHandler(); final MessageHeaderDecoder headerDecoder = new MessageHeaderDecoder(); headerDecoder.wrap(responseContent, 0); if (errorHandler.handlesResponse(headerDecoder)) { errorHandler.wrap( responseContent, headerDecoder.encodedLength(), headerDecoder.blockLength(), headerDecoder.version()); final ErrorCode errorCode = errorHandler.getErrorCode(); return errorCode == ErrorCode.PARTITION_LEADER_MISMATCH; } else { return false; } }
@Test public void shouldWriteResponse() { responseWriter.errorCode(ErrorCode.PARTITION_LEADER_MISMATCH).errorMessage("error message"); final UnsafeBuffer buf = new UnsafeBuffer(new byte[responseWriter.getLength()]); // when responseWriter.write(buf, 0); // then int offset = 0; messageHeaderDecoder.wrap(buf, offset); assertThat(messageHeaderDecoder.schemaId()).isEqualTo(responseDecoder.sbeSchemaId()); assertThat(messageHeaderDecoder.version()).isEqualTo(responseDecoder.sbeSchemaVersion()); assertThat(messageHeaderDecoder.templateId()).isEqualTo(responseDecoder.sbeTemplateId()); assertThat(messageHeaderDecoder.blockLength()).isEqualTo(responseDecoder.sbeBlockLength()); offset += messageHeaderDecoder.encodedLength(); responseDecoder.wrap( buf, offset, responseDecoder.sbeBlockLength(), responseDecoder.sbeSchemaVersion()); assertThat(responseDecoder.errorCode()).isEqualTo(ErrorCode.PARTITION_LEADER_MISMATCH); assertThat(responseDecoder.errorData()).isEqualTo("error message"); } }
@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 commandLength = bodyDecoder.valueLength(); final int commandOffset = bodyDecoder.limit() + ExecuteCommandRequestDecoder.valueHeaderLength(); command = msgPackHelper.readMsgPack( new DirectBufferInputStream(buffer, commandOffset, commandLength)); } }
@Override public void wrap(DirectBuffer responseBuffer, int offset, int length) { messageHeaderDecoder.wrap(responseBuffer, 0); if (messageHeaderDecoder.templateId() != bodyDecoder.sbeTemplateId()) { throw new RuntimeException("Unexpected response from broker."); } bodyDecoder.wrap( responseBuffer, messageHeaderDecoder.encodedLength(), messageHeaderDecoder.blockLength(), messageHeaderDecoder.version()); final int errorDataLength = bodyDecoder.errorDataLength(); final int errorDataOffset = messageHeaderDecoder.encodedLength() + messageHeaderDecoder.blockLength() + ErrorResponseDecoder.errorDataHeaderLength(); errorData = responseBuffer.getStringWithoutLengthUtf8(errorDataOffset, errorDataLength); bodyDecoder.limit(errorDataOffset + errorDataLength); } }
@Test public void shouldWriteResponse() { responseWriter.errorCode(ErrorCode.PARTITION_LEADER_MISMATCH).errorMessage("error message"); final UnsafeBuffer buf = new UnsafeBuffer(new byte[responseWriter.getLength()]); // when responseWriter.write(buf, 0); // then int offset = 0; messageHeaderDecoder.wrap(buf, offset); assertThat(messageHeaderDecoder.schemaId()).isEqualTo(responseDecoder.sbeSchemaId()); assertThat(messageHeaderDecoder.version()).isEqualTo(responseDecoder.sbeSchemaVersion()); assertThat(messageHeaderDecoder.templateId()).isEqualTo(responseDecoder.sbeTemplateId()); assertThat(messageHeaderDecoder.blockLength()).isEqualTo(responseDecoder.sbeBlockLength()); offset += messageHeaderDecoder.encodedLength(); responseDecoder.wrap( buf, offset, responseDecoder.sbeBlockLength(), responseDecoder.sbeSchemaVersion()); assertThat(responseDecoder.errorCode()).isEqualTo(ErrorCode.PARTITION_LEADER_MISMATCH); assertThat(responseDecoder.errorData()).isEqualTo("error message"); } }
@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 commandLength = bodyDecoder.valueLength(); final int commandOffset = bodyDecoder.limit() + ExecuteCommandRequestDecoder.valueHeaderLength(); command = msgPackHelper.readMsgPack( new DirectBufferInputStream(buffer, commandOffset, commandLength)); } }
@Override public void wrap(DirectBuffer responseBuffer, int offset, int length) { messageHeaderDecoder.wrap(responseBuffer, 0); if (messageHeaderDecoder.templateId() != bodyDecoder.sbeTemplateId()) { throw new RuntimeException("Unexpected response from broker."); } bodyDecoder.wrap( responseBuffer, messageHeaderDecoder.encodedLength(), messageHeaderDecoder.blockLength(), messageHeaderDecoder.version()); final int errorDataLength = bodyDecoder.errorDataLength(); final int errorDataOffset = messageHeaderDecoder.encodedLength() + messageHeaderDecoder.blockLength() + ErrorResponseDecoder.errorDataHeaderLength(); errorData = responseBuffer.getStringWithoutLengthUtf8(errorDataOffset, errorDataLength); bodyDecoder.limit(errorDataOffset + errorDataLength); } }
@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)); } } }
@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)); } } }
assertThat(messageHeaderDecoder.templateId()).isEqualTo(responseDecoder.sbeTemplateId()); assertThat(messageHeaderDecoder.schemaId()).isEqualTo(responseDecoder.sbeSchemaId()); assertThat(messageHeaderDecoder.version()).isEqualTo(responseDecoder.sbeSchemaVersion());
assertThat(messageHeaderDecoder.templateId()).isEqualTo(responseDecoder.sbeTemplateId()); assertThat(messageHeaderDecoder.schemaId()).isEqualTo(responseDecoder.sbeSchemaId()); assertThat(messageHeaderDecoder.version()).isEqualTo(responseDecoder.sbeSchemaVersion());
@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()); offset += bodyDecoder.sbeBlockLength(); final int dataLength = bodyDecoder.dataLength(); offset += ControlMessageResponseDecoder.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 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()); errorCode = bodyDecoder.errorCode(); offset += bodyDecoder.sbeBlockLength(); final int errorDataLength = bodyDecoder.errorDataLength(); offset += ErrorResponseDecoder.errorDataHeaderLength(); errorData.wrap(buffer, offset, errorDataLength); offset += errorDataLength; bodyDecoder.limit(offset); assert bodyDecoder.limit() == frameEnd : "Decoder read only to position " + bodyDecoder.limit() + " but expected " + frameEnd + " as final position"; }
@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 void wrap(DirectBuffer buffer, int offset, int length) { reset(); headerDecoder.wrap(buffer, offset); offset += headerDecoder.encodedLength(); decoder.wrap(buffer, offset, headerDecoder.blockLength(), headerDecoder.version()); recordType = decoder.recordType(); requestStreamId = decoder.requestStreamId(); requestId = decoder.requestId(); protocolVersion = decoder.protocolVersion(); valueType = decoder.valueType(); intent = Intent.fromProtocolValue(valueType, decoder.intent()); rejectionType = decoder.rejectionType(); final int rejectionReasonLength = decoder.rejectionReasonLength(); offset += headerDecoder.blockLength(); offset += RecordMetadataDecoder.rejectionReasonHeaderLength(); rejectionReason.wrap(buffer, offset, rejectionReasonLength); }
@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()); partitionId = bodyDecoder.partitionId(); key = bodyDecoder.key(); valueType = bodyDecoder.valueType(); intent = Intent.fromProtocolValue(valueType, bodyDecoder.intent()); offset += bodyDecoder.sbeBlockLength(); final int valueLength = bodyDecoder.valueLength(); offset += ExecuteCommandRequestDecoder.valueHeaderLength(); value.wrap(buffer, offset, valueLength); offset += valueLength; bodyDecoder.limit(offset); assert bodyDecoder.limit() == frameEnd : "Decoder read only to position " + bodyDecoder.limit() + " but expected " + frameEnd + " as final position"; }