private long claimBatchForEvents() { final int batchLength = eventLength + (eventCount * HEADER_BLOCK_LENGTH); long claimedPosition = -1; do { claimedPosition = logWriteBuffer.claim(claimedBatch, eventCount, batchLength); } while (claimedPosition == RESULT_PADDING_AT_END_OF_PARTITION); return claimedPosition; }
/** * Claim a fragment of the buffer with the given length. Use {@link ClaimedFragment#getBuffer()} * to write the message and finish the operation using {@link ClaimedFragment#commit()} or {@link * ClaimedFragment#abort()}. Note that the claim operation can fail if the publisher limit or the * buffer partition size is reached. * * @return the new publisher position if the fragment was claimed successfully. Otherwise, the * return value is negative. */ public long claim(ClaimedFragment claim, int length) { return claim(claim, length, 0); }
private long claimBatchForEvents() { final int batchLength = eventLength + (eventCount * HEADER_BLOCK_LENGTH); long claimedPosition = -1; do { claimedPosition = logWriteBuffer.claim(claimedBatch, eventCount, batchLength); } while (claimedPosition == RESULT_PADDING_AT_END_OF_PARTITION); return claimedPosition; }
/** * Claim a fragment of the buffer with the given length. Use {@link ClaimedFragment#getBuffer()} * to write the message and finish the operation using {@link ClaimedFragment#commit()} or {@link * ClaimedFragment#abort()}. Note that the claim operation can fail if the publisher limit or the * buffer partition size is reached. * * @return the new publisher position if the fragment was claimed successfully. Otherwise, the * return value is negative. */ public long claim(ClaimedFragment claim, int length) { return claim(claim, length, 0); }
private long claimLogEntry(final int valueLength, final int metadataLength) { final int framedLength = valueLength + headerLength(metadataLength); long claimedPosition = -1; final Dispatcher logWriteBuffer = logStream.getWriteBuffer(); final int logId = logStream.getPartitionId(); do { claimedPosition = logWriteBuffer.claim(claimedFragment, framedLength, logId); } while (claimedPosition == RESULT_PADDING_AT_END_OF_PARTITION); return claimedPosition - DataFrameDescriptor.alignedFramedLength(framedLength); } }
private long claimLogEntry(final int valueLength, final int metadataLength) { final int framedLength = valueLength + headerLength(metadataLength); long claimedPosition = -1; final Dispatcher logWriteBuffer = logStream.getWriteBuffer(); final int logId = logStream.getPartitionId(); do { claimedPosition = logWriteBuffer.claim(claimedFragment, framedLength, logId); } while (claimedPosition == RESULT_PADDING_AT_END_OF_PARTITION); return claimedPosition - DataFrameDescriptor.alignedFramedLength(framedLength); } }
public boolean trySend(Dispatcher sendBuffer) { final int requiredLength = getLength(); long claimedOffset; do { claimedOffset = sendBuffer.claim(claimedFragment, requiredLength, remoteStreamId); } while (claimedOffset == -2); if (claimedOffset >= 0) { try { final MutableDirectBuffer buffer = claimedFragment.getBuffer(); final int writeOffset = claimedFragment.getOffset(); write(buffer, writeOffset); claimedFragment.commit(); return true; } catch (Throwable e) { claimedFragment.abort(); } } return false; }
public boolean trySend(Dispatcher sendBuffer) { final int requiredLength = getLength(); long claimedOffset; do { claimedOffset = sendBuffer.claim(claimedFragment, requiredLength, remoteStreamId); } while (claimedOffset == -2); if (claimedOffset >= 0) { try { final MutableDirectBuffer buffer = claimedFragment.getBuffer(); final int writeOffset = claimedFragment.getOffset(); write(buffer, writeOffset); claimedFragment.commit(); return true; } catch (Throwable e) { claimedFragment.abort(); } } return false; }
@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); }
@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); }
private boolean handleControlMessageRequest( final RecordMetadata eventMetadata, final DirectBuffer buffer, final int messageOffset, final int messageLength) { boolean isHandled = false; long publishPosition; do { publishPosition = controlMessageDispatcher.claim( claimedControlMessageFragment, ControlMessageRequestHeaderDescriptor.framedLength(messageLength)); } while (publishPosition == -2); if (publishPosition >= 0) { final MutableDirectBuffer writeBuffer = claimedControlMessageFragment.getBuffer(); int writeBufferOffset = claimedControlMessageFragment.getOffset(); controlMessageRequestHeaderDescriptor .wrap(writeBuffer, writeBufferOffset) .streamId(eventMetadata.getRequestStreamId()) .requestId(eventMetadata.getRequestId()); writeBufferOffset += ControlMessageRequestHeaderDescriptor.headerLength(); writeBuffer.putBytes(writeBufferOffset, buffer, messageOffset, messageLength); claimedControlMessageFragment.commit(); isHandled = true; } return isHandled; }
private boolean handleControlMessageRequest( final RecordMetadata eventMetadata, final DirectBuffer buffer, final int messageOffset, final int messageLength) { boolean isHandled = false; long publishPosition; do { publishPosition = controlMessageDispatcher.claim( claimedControlMessageFragment, ControlMessageRequestHeaderDescriptor.framedLength(messageLength)); } while (publishPosition == -2); if (publishPosition >= 0) { final MutableDirectBuffer writeBuffer = claimedControlMessageFragment.getBuffer(); int writeBufferOffset = claimedControlMessageFragment.getOffset(); controlMessageRequestHeaderDescriptor .wrap(writeBuffer, writeBufferOffset) .streamId(eventMetadata.getRequestStreamId()) .requestId(eventMetadata.getRequestId()); writeBufferOffset += ControlMessageRequestHeaderDescriptor.headerLength(); writeBuffer.putBytes(writeBufferOffset, buffer, messageOffset, messageLength); claimedControlMessageFragment.commit(); isHandled = true; } return isHandled; }