private void setupMessageCheck(final long nowNs, final int activeTermId, final int termOffset) { if ((timeOfLastSetupNs + PUBLICATION_SETUP_TIMEOUT_NS) - nowNs < 0) { timeOfLastSetupNs = nowNs; timeOfLastSendOrHeartbeatNs = nowNs; setupBuffer.clear(); setupHeader .activeTermId(activeTermId) .termOffset(termOffset) .sessionId(sessionId) .streamId(streamId) .initialTermId(initialTermId) .termLength(termBufferLength) .mtuLength(mtuLength) .ttl(channelEndpoint.multicastTtl()); if (SetupFlyweight.HEADER_LENGTH != channelEndpoint.send(setupBuffer)) { shortSends.increment(); } if (hasReceivers) { shouldSendSetupFrame = false; } } }
@Test public void shouldSendSetupFrameOnChannelWhenTimeoutWithoutStatusMessage() { sender.doWork(); assertThat(receivedFrames.size(), is(1)); currentTimestamp += Configuration.PUBLICATION_SETUP_TIMEOUT_NS - 1; sender.doWork(); assertThat(receivedFrames.size(), is(1)); currentTimestamp += 10; sender.doWork(); assertThat(receivedFrames.size(), is(2)); setupHeader.wrap(new UnsafeBuffer(receivedFrames.remove())); assertThat(setupHeader.frameLength(), is(SetupFlyweight.HEADER_LENGTH)); assertThat(setupHeader.initialTermId(), is(INITIAL_TERM_ID)); assertThat(setupHeader.activeTermId(), is(INITIAL_TERM_ID)); assertThat(setupHeader.streamId(), is(STREAM_ID)); assertThat(setupHeader.sessionId(), is(SESSION_ID)); assertThat(setupHeader.headerType(), is(HeaderFlyweight.HDR_TYPE_SETUP)); assertThat(setupHeader.flags(), is((short)0)); assertThat(setupHeader.version(), is((short)HeaderFlyweight.CURRENT_VERSION)); }
private void fillSetupFrame(final SetupFlyweight header, final int termOffset) { header.wrap(setupBuffer); header .streamId(STREAM_ID) .sessionId(SESSION_ID) .initialTermId(INITIAL_TERM_ID) .activeTermId(ACTIVE_TERM_ID) .termOffset(termOffset) .frameLength(SetupFlyweight.HEADER_LENGTH) .headerType(HeaderFlyweight.HDR_TYPE_SETUP) .flags((byte)0) .version(HeaderFlyweight.CURRENT_VERSION); } }
public NetworkPublicationThreadLocals() { final ByteBuffer byteBuffer = BufferUtil.allocateDirectAligned(192, BitUtil.CACHE_LINE_LENGTH); byteBuffer.limit(DataHeaderFlyweight.HEADER_LENGTH); heartbeatBuffer = byteBuffer.slice(); dataHeader = new DataHeaderFlyweight(heartbeatBuffer); byteBuffer.limit(64 + SetupFlyweight.HEADER_LENGTH).position(64); setupBuffer = byteBuffer.slice(); setupHeader = new SetupFlyweight(setupBuffer); byteBuffer.limit(128 + RttMeasurementFlyweight.HEADER_LENGTH).position(128); rttMeasurementBuffer = byteBuffer.slice(); rttMeasurementHeader = new RttMeasurementFlyweight(rttMeasurementBuffer); dataHeader .version(HeaderFlyweight.CURRENT_VERSION) .flags((byte)DataHeaderFlyweight.BEGIN_AND_END_FLAGS) .headerType(HeaderFlyweight.HDR_TYPE_DATA) .frameLength(0); setupHeader .version(HeaderFlyweight.CURRENT_VERSION) .headerType(HeaderFlyweight.HDR_TYPE_SETUP) .frameLength(SetupFlyweight.HEADER_LENGTH); rttMeasurementHeader .version(HeaderFlyweight.CURRENT_VERSION) .headerType(HeaderFlyweight.HDR_TYPE_RTTM) .frameLength(RttMeasurementFlyweight.HEADER_LENGTH); }
public void onSetupMessage( final SetupFlyweight header, final UnsafeBuffer buffer, final int length, final InetSocketAddress srcAddress, final int transportIndex) { if (!dataLossGenerator.shouldDropFrame(srcAddress, buffer, header.frameLength())) { super.onSetupMessage(header, buffer, length, srcAddress, transportIndex); } }
public NetworkPublicationThreadLocals() { final ByteBuffer byteBuffer = BufferUtil.allocateDirectAligned(192, BitUtil.CACHE_LINE_LENGTH); byteBuffer.limit(DataHeaderFlyweight.HEADER_LENGTH); heartbeatBuffer = byteBuffer.slice(); dataHeader = new DataHeaderFlyweight(heartbeatBuffer); byteBuffer.limit(64 + SetupFlyweight.HEADER_LENGTH).position(64); setupBuffer = byteBuffer.slice(); setupHeader = new SetupFlyweight(setupBuffer); byteBuffer.limit(128 + RttMeasurementFlyweight.HEADER_LENGTH).position(128); rttMeasurementBuffer = byteBuffer.slice(); rttMeasurementHeader = new RttMeasurementFlyweight(rttMeasurementBuffer); dataHeader .version(HeaderFlyweight.CURRENT_VERSION) .flags((byte)DataHeaderFlyweight.BEGIN_AND_END_FLAGS) .headerType(HeaderFlyweight.HDR_TYPE_DATA) .frameLength(0); setupHeader .version(HeaderFlyweight.CURRENT_VERSION) .headerType(HeaderFlyweight.HDR_TYPE_SETUP) .frameLength(SetupFlyweight.HEADER_LENGTH); rttMeasurementHeader .version(HeaderFlyweight.CURRENT_VERSION) .headerType(HeaderFlyweight.HDR_TYPE_RTTM) .frameLength(RttMeasurementFlyweight.HEADER_LENGTH); }
public void onSetupMessage( final SetupFlyweight header, final UnsafeBuffer buffer, final int length, final InetSocketAddress srcAddress, final int transportIndex) { if (!dataLossGenerator.shouldDropFrame(srcAddress, buffer, header.frameLength())) { super.onSetupMessage(header, buffer, length, srcAddress, transportIndex); } }
public String toString() { final StringBuilder sb = new StringBuilder(); final String formattedFlags = String.format("%1$8s", Integer.toBinaryString(flags())).replace(' ', '0'); sb.append("SETUP Message{") .append("frame_length=").append(frameLength()) .append(" version=").append(version()) .append(" flags=").append(formattedFlags) .append(" type=").append(headerType()) .append(" term_offset=").append(termOffset()) .append(" session_id=").append(sessionId()) .append(" stream_id=").append(streamId()) .append(" initial_term_id=").append(initialTermId()) .append(" active_term_id=").append(activeTermId()) .append(" term_length=").append(termLength()) .append(" mtu_length=").append(mtuLength()) .append(" ttl=").append(ttl()) .append("}"); return sb.toString(); } }
public NetworkPublicationThreadLocals() { final ByteBuffer byteBuffer = BufferUtil.allocateDirectAligned(192, BitUtil.CACHE_LINE_LENGTH); byteBuffer.limit(DataHeaderFlyweight.HEADER_LENGTH); heartbeatBuffer = byteBuffer.slice(); dataHeader = new DataHeaderFlyweight(heartbeatBuffer); byteBuffer.limit(64 + SetupFlyweight.HEADER_LENGTH).position(64); setupBuffer = byteBuffer.slice(); setupHeader = new SetupFlyweight(setupBuffer); byteBuffer.limit(128 + RttMeasurementFlyweight.HEADER_LENGTH).position(128); rttMeasurementBuffer = byteBuffer.slice(); rttMeasurementHeader = new RttMeasurementFlyweight(rttMeasurementBuffer); dataHeader .version(HeaderFlyweight.CURRENT_VERSION) .flags((byte)DataHeaderFlyweight.BEGIN_AND_END_FLAGS) .headerType(HeaderFlyweight.HDR_TYPE_DATA) .frameLength(0); setupHeader .version(HeaderFlyweight.CURRENT_VERSION) .headerType(HeaderFlyweight.HDR_TYPE_SETUP) .frameLength(SetupFlyweight.HEADER_LENGTH); rttMeasurementHeader .version(HeaderFlyweight.CURRENT_VERSION) .headerType(HeaderFlyweight.HDR_TYPE_RTTM) .frameLength(RttMeasurementFlyweight.HEADER_LENGTH); }
public void onSetupMessage( final SetupFlyweight header, final UnsafeBuffer buffer, final int length, final InetSocketAddress srcAddress, final int transportIndex) { if (!dataLossGenerator.shouldDropFrame(srcAddress, buffer, header.frameLength())) { super.onSetupMessage(header, buffer, length, srcAddress, transportIndex); } }
private static void dissect(final SetupFlyweight msg, final StringBuilder builder) { builder .append("SETUP ") .append(msg.flags()) .append(" len ") .append(msg.frameLength()) .append(' ') .append(msg.sessionId()) .append(':') .append(msg.streamId()) .append(':') .append(msg.activeTermId()) .append(' ') .append(msg.initialTermId()) .append(" @") .append(msg.termOffset()) .append(' ') .append(msg.termLength()) .append(" MTU ") .append(msg.mtuLength()) .append(" TTL ") .append(msg.ttl()); }
final int transportIndex) final int streamId = header.streamId(); final StreamInterest streamInterest = streamInterestByIdMap.get(streamId); final int sessionId = header.sessionId(); final int initialTermId = header.initialTermId(); final int activeTermId = header.activeTermId(); final SessionInterest sessionInterest = streamInterest.sessionInterestByIdMap.get(sessionId); initialTermId, activeTermId, header.termOffset(), header.termLength(), header.mtuLength(), header.ttl()); initialTermId, activeTermId, header.termOffset(), header.termLength(), header.mtuLength(), header.ttl());
@Before public void setUp() { when(mockHeader.sessionId()).thenReturn(SESSION_ID); when(mockHeader.streamId()).thenReturn(STREAM_ID); when(mockHeader.termId()).thenReturn(ACTIVE_TERM_ID); when(mockHeader.termOffset()).thenReturn(TERM_OFFSET); when(mockImage.sessionId()).thenReturn(SESSION_ID); when(mockImage.streamId()).thenReturn(STREAM_ID); when(mockSetupHeader.sessionId()).thenReturn(SESSION_ID); when(mockSetupHeader.streamId()).thenReturn(STREAM_ID); when(mockSetupHeader.activeTermId()).thenReturn(ACTIVE_TERM_ID); when(mockSetupHeader.initialTermId()).thenReturn(INITIAL_TERM_ID); when(mockSetupHeader.termOffset()).thenReturn(TERM_OFFSET); when(mockSetupHeader.mtuLength()).thenReturn(MTU_LENGTH); when(mockSetupHeader.termLength()).thenReturn(TERM_LENGTH); }
private void setupMessageCheck(final long nowNs, final int activeTermId, final int termOffset) { if ((timeOfLastSetupNs + PUBLICATION_SETUP_TIMEOUT_NS) - nowNs < 0) { timeOfLastSetupNs = nowNs; timeOfLastSendOrHeartbeatNs = nowNs; setupBuffer.clear(); setupHeader .activeTermId(activeTermId) .termOffset(termOffset) .sessionId(sessionId) .streamId(streamId) .initialTermId(initialTermId) .termLength(termBufferLength) .mtuLength(mtuLength) .ttl(channelEndpoint.multicastTtl()); if (SetupFlyweight.HEADER_LENGTH != channelEndpoint.send(setupBuffer)) { shortSends.increment(); } if (hasReceivers) { shouldSendSetupFrame = false; } } }
public String toString() { final StringBuilder sb = new StringBuilder(); final String formattedFlags = String.format("%1$8s", Integer.toBinaryString(flags())).replace(' ', '0'); sb.append("SETUP Message{") .append("frame_length=").append(frameLength()) .append(" version=").append(version()) .append(" flags=").append(formattedFlags) .append(" type=").append(headerType()) .append(" term_offset=").append(termOffset()) .append(" session_id=").append(sessionId()) .append(" stream_id=").append(streamId()) .append(" initial_term_id=").append(initialTermId()) .append(" active_term_id=").append(activeTermId()) .append(" term_length=").append(termLength()) .append(" mtu_length=").append(mtuLength()) .append(" ttl=").append(ttl()) .append("}"); return sb.toString(); } }
private static void dissect(final SetupFlyweight msg, final StringBuilder builder) { builder .append("SETUP ") .append(msg.flags()) .append(" len ") .append(msg.frameLength()) .append(' ') .append(msg.sessionId()) .append(':') .append(msg.streamId()) .append(':') .append(msg.activeTermId()) .append(' ') .append(msg.initialTermId()) .append(" @") .append(msg.termOffset()) .append(' ') .append(msg.termLength()) .append(" MTU ") .append(msg.mtuLength()) .append(" TTL ") .append(msg.ttl()); }
private void setupMessageCheck(final long nowNs, final int activeTermId, final int termOffset) { if ((timeOfLastSetupNs + PUBLICATION_SETUP_TIMEOUT_NS) - nowNs < 0) { timeOfLastSetupNs = nowNs; timeOfLastSendOrHeartbeatNs = nowNs; setupBuffer.clear(); setupHeader .activeTermId(activeTermId) .termOffset(termOffset) .sessionId(sessionId) .streamId(streamId) .initialTermId(initialTermId) .termLength(termBufferLength) .mtuLength(mtuLength) .ttl(channelEndpoint.multicastTtl()); if (SetupFlyweight.HEADER_LENGTH != channelEndpoint.send(setupBuffer)) { shortSends.increment(); } if (hasReceivers) { shouldSendSetupFrame = false; } } }
public String toString() { final StringBuilder sb = new StringBuilder(); final String formattedFlags = String.format("%1$8s", Integer.toBinaryString(flags())).replace(' ', '0'); sb.append("SETUP Message{") .append("frame_length=").append(frameLength()) .append(" version=").append(version()) .append(" flags=").append(formattedFlags) .append(" type=").append(headerType()) .append(" term_offset=").append(termOffset()) .append(" session_id=").append(sessionId()) .append(" stream_id=").append(streamId()) .append(" initial_term_id=").append(initialTermId()) .append(" active_term_id=").append(activeTermId()) .append(" term_length=").append(termLength()) .append(" mtu_length=").append(mtuLength()) .append(" ttl=").append(ttl()) .append("}"); return sb.toString(); } }
final int transportIndex) final int streamId = header.streamId(); final StreamInterest streamInterest = streamInterestByIdMap.get(streamId); final int sessionId = header.sessionId(); final int initialTermId = header.initialTermId(); final int activeTermId = header.activeTermId(); final SessionInterest sessionInterest = streamInterest.sessionInterestByIdMap.get(sessionId); initialTermId, activeTermId, header.termOffset(), header.termLength(), header.mtuLength(), header.ttl()); initialTermId, activeTermId, header.termOffset(), header.termLength(), header.mtuLength(), header.ttl());
final int transportIndex) final int streamId = header.streamId(); final StreamInterest streamInterest = streamInterestByIdMap.get(streamId); final int sessionId = header.sessionId(); final int initialTermId = header.initialTermId(); final int activeTermId = header.activeTermId(); final SessionInterest sessionInterest = streamInterest.sessionInterestByIdMap.get(sessionId); initialTermId, activeTermId, header.termOffset(), header.termLength(), header.mtuLength(), header.ttl()); initialTermId, activeTermId, header.termOffset(), header.termLength(), header.mtuLength(), header.ttl());