use of org.agrona.MutableDirectBuffer in project Aeron by real-logic.
the class ControlResponseProxy method attemptSendSignal.
void attemptSendSignal(final long controlSessionId, final long correlationId, final long recordingId, final long subscriptionId, final long position, final RecordingSignal recordingSignal, final Publication controlPublication) {
final int messageLength = MESSAGE_HEADER_LENGTH + RecordingSignalEventEncoder.BLOCK_LENGTH;
int attempts = SEND_ATTEMPTS;
do {
final long result = controlPublication.tryClaim(messageLength, bufferClaim);
if (result > 0) {
final MutableDirectBuffer buffer = bufferClaim.buffer();
final int bufferOffset = bufferClaim.offset();
recordingSignalEventEncoder.wrapAndApplyHeader(buffer, bufferOffset, messageHeaderEncoder).controlSessionId(controlSessionId).correlationId(correlationId).recordingId(recordingId).subscriptionId(subscriptionId).position(position).signal(recordingSignal);
bufferClaim.commit();
break;
}
} while (--attempts > 0);
}
use of org.agrona.MutableDirectBuffer in project Aeron by real-logic.
the class ReplaySessionTest method mockPublication.
private void mockPublication(final ExclusivePublication replay, final UnsafeBuffer termBuffer) {
when(replay.offerBlock(any(MutableDirectBuffer.class), anyInt(), anyInt())).then((invocation) -> {
final MutableDirectBuffer buffer = invocation.getArgument(0);
final int offset = invocation.getArgument(1);
final int length = invocation.getArgument(2);
termBuffer.putBytes(offerBlockOffset, buffer, offset, length);
messageCounter++;
offerBlockOffset += length;
return (long) length;
});
when(replay.appendPadding(anyInt())).then((invocation) -> {
final int claimedSize = invocation.getArgument(0);
messageCounter++;
return (long) claimedSize;
});
}
use of org.agrona.MutableDirectBuffer in project Aeron by real-logic.
the class ClusterNetworkTopologyTest method connectAndSendMessages.
private void connectAndSendMessages(final String ingressChannel, final String ingressEndpoints, final Selector selector, final double messageCount) {
final String message = "Hello World!";
final MutableDirectBuffer messageBuffer = new UnsafeBuffer(ByteBuffer.allocate(128));
final int length = messageBuffer.putStringAscii(0, message);
final MutableReference<String> egressResponse = new MutableReference<>();
final EgressListener egressListener = (clusterSessionId, timestamp, buffer, offset, length1, header) -> {
final String stringAscii = buffer.getStringAscii(offset);
egressResponse.set(stringAscii);
};
try (MediaDriver mediaDriver = MediaDriver.launchEmbedded(new MediaDriver.Context().threadingMode(ThreadingMode.SHARED).dirDeleteOnStart(true).dirDeleteOnShutdown(true));
AeronCluster.AsyncConnect asyncConnect = AeronCluster.asyncConnect(new AeronCluster.Context().messageTimeoutNs(TimeUnit.SECONDS.toNanos(CLUSTER_START_ELECTION_TIMEOUT_S * 2)).egressListener(egressListener).egressChannel("aeron:udp?endpoint=10.42.0.1:0").aeronDirectoryName(mediaDriver.aeronDirectoryName()).ingressChannel(ingressChannel).ingressEndpoints(ingressEndpoints));
AeronCluster aeronCluster = pollUntilConnected(asyncConnect, selector)) {
for (int i = 0; i < messageCount; i++) {
Tests.await(() -> {
final long position = aeronCluster.offer(messageBuffer, 0, length);
pollSelector(selector);
return 0 < position;
}, SECONDS.toNanos(5));
Tests.await(() -> {
aeronCluster.pollEgress();
pollSelector(selector);
return message.equals(egressResponse.get());
}, SECONDS.toNanos(5));
}
}
}
use of org.agrona.MutableDirectBuffer in project Aeron by real-logic.
the class TimestampingSystemTest method shouldSupportReceiveTimestampsOnMds.
@Test
@InterruptAfter(10)
void shouldSupportReceiveTimestampsOnMds() {
final MutableDirectBuffer buffer = new UnsafeBuffer(new byte[64]);
try (TestMediaDriver driver = driver();
Aeron aeron = Aeron.connect(new Aeron.Context().aeronDirectoryName(driver.aeronDirectoryName()))) {
final Subscription mdsSub = aeron.addSubscription("aeron:udp?control-mode=manual|channel-rcv-ts-offset=0", 1000);
final Publication pub1 = aeron.addPublication("aeron:udp?endpoint=localhost:23424", 1000);
final Publication pub2 = aeron.addPublication("aeron:udp?endpoint=localhost:23425", 1000);
mdsSub.addDestination("aeron:udp?endpoint=localhost:23424");
mdsSub.addDestination("aeron:udp?endpoint=localhost:23425");
while (!pub1.isConnected() || !pub2.isConnected()) {
Tests.yieldingIdle("Failed to connect");
}
buffer.putLong(0, SENTINEL_VALUE);
while (0 > pub1.offer(buffer, 0, buffer.capacity())) {
Tests.yieldingIdle("Failed to offer message");
}
while (0 > pub2.offer(buffer, 0, buffer.capacity())) {
Tests.yieldingIdle("Failed to offer message");
}
final MutableLong sendTimestamp = new MutableLong(SENTINEL_VALUE);
final FragmentHandler fragmentHandler = (buffer1, offset, length, header) -> sendTimestamp.set(buffer1.getLong(offset));
while (1 > mdsSub.poll(fragmentHandler, 1)) {
Tests.yieldingIdle("Failed to receive message");
}
assertNotEquals(SENTINEL_VALUE, sendTimestamp.longValue());
while (1 > mdsSub.poll(fragmentHandler, 1)) {
Tests.yieldingIdle("Failed to receive message");
}
assertNotEquals(SENTINEL_VALUE, sendTimestamp.longValue());
}
}
use of org.agrona.MutableDirectBuffer in project aeron by real-logic.
the class ClusterNetworkTopologyTest method connectAndSendMessages.
private void connectAndSendMessages(final String ingressChannel, final String ingressEndpoints, final Selector selector, final double messageCount) {
final String message = "Hello World!";
final MutableDirectBuffer messageBuffer = new UnsafeBuffer(ByteBuffer.allocate(128));
final int length = messageBuffer.putStringAscii(0, message);
final MutableReference<String> egressResponse = new MutableReference<>();
final EgressListener egressListener = (clusterSessionId, timestamp, buffer, offset, length1, header) -> {
final String stringAscii = buffer.getStringAscii(offset);
egressResponse.set(stringAscii);
};
try (MediaDriver mediaDriver = MediaDriver.launchEmbedded(new MediaDriver.Context().threadingMode(ThreadingMode.SHARED).dirDeleteOnStart(true).dirDeleteOnShutdown(true));
AeronCluster.AsyncConnect asyncConnect = AeronCluster.asyncConnect(new AeronCluster.Context().messageTimeoutNs(TimeUnit.SECONDS.toNanos(CLUSTER_START_ELECTION_TIMEOUT_S * 2)).egressListener(egressListener).egressChannel("aeron:udp?endpoint=10.42.0.1:0").aeronDirectoryName(mediaDriver.aeronDirectoryName()).ingressChannel(ingressChannel).ingressEndpoints(ingressEndpoints));
AeronCluster aeronCluster = pollUntilConnected(asyncConnect, selector)) {
for (int i = 0; i < messageCount; i++) {
Tests.await(() -> {
final long position = aeronCluster.offer(messageBuffer, 0, length);
pollSelector(selector);
return 0 < position;
}, SECONDS.toNanos(5));
Tests.await(() -> {
aeronCluster.pollEgress();
pollSelector(selector);
return message.equals(egressResponse.get());
}, SECONDS.toNanos(5));
}
}
}
Aggregations