use of io.aeron.test.InterruptAfter in project Aeron by real-logic.
the class ReplicateRecordingTest method shouldReplicateLiveRecordingAndMergeWhileFollowingWithTaggedSubscription.
@Test
@InterruptAfter(10)
public void shouldReplicateLiveRecordingAndMergeWhileFollowingWithTaggedSubscription() {
final String messagePrefix = "Message-Prefix-";
final int messageCount = 10;
final long srcRecordingId;
final long channelTagId = dstAeron.nextCorrelationId();
final long subscriptionTagId = dstAeron.nextCorrelationId();
final String taggedChannel = "aeron:udp?control-mode=manual|rejoin=false|tags=" + channelTagId + "," + subscriptionTagId;
final long subscriptionId = srcAeronArchive.startRecording(LIVE_CHANNEL, LIVE_STREAM_ID, LOCAL);
final MutableReference<RecordingSignal> signalRef = new MutableReference<>();
final RecordingSignalAdapter adapter;
try (Publication publication = srcAeron.addPublication(LIVE_CHANNEL, LIVE_STREAM_ID);
Subscription taggedSubscription = dstAeron.addSubscription(taggedChannel, LIVE_STREAM_ID)) {
final CountersReader srcCounters = srcAeron.countersReader();
final int counterId = awaitRecordingCounterId(srcCounters, publication.sessionId());
srcRecordingId = RecordingPos.getRecordingId(srcCounters, counterId);
offer(publication, messageCount, messagePrefix);
awaitPosition(srcCounters, counterId, publication.position());
final MutableLong dstRecordingId = new MutableLong();
adapter = newRecordingSignalAdapter(signalRef, dstRecordingId);
dstAeronArchive.taggedReplicate(srcRecordingId, NULL_VALUE, channelTagId, subscriptionTagId, SRC_CONTROL_STREAM_ID, SRC_CONTROL_REQUEST_CHANNEL, LIVE_CHANNEL);
consume(taggedSubscription, messageCount, messagePrefix);
offer(publication, messageCount, messagePrefix);
consume(taggedSubscription, messageCount, messagePrefix);
assertEquals(RecordingSignal.REPLICATE, awaitSignal(signalRef, adapter));
assertEquals(RecordingSignal.EXTEND, awaitSignal(signalRef, adapter));
assertEquals(RecordingSignal.MERGE, awaitSignal(signalRef, adapter));
final CountersReader dstCounters = dstAeron.countersReader();
final int dstCounterId = RecordingPos.findCounterIdByRecording(dstCounters, dstRecordingId.get());
offer(publication, messageCount, messagePrefix);
consume(taggedSubscription, messageCount, messagePrefix);
awaitPosition(dstCounters, dstCounterId, publication.position());
final Image image = taggedSubscription.imageBySessionId(publication.sessionId());
assertEquals(publication.position(), image.position());
}
srcAeronArchive.stopRecording(subscriptionId);
assertEquals(RecordingSignal.STOP, awaitSignal(signalRef, adapter));
}
use of io.aeron.test.InterruptAfter in project Aeron by real-logic.
the class ClusterBackupTest method shouldBackupClusterNoSnapshotsAndNonEmptyLogWithReQuery.
@Test
@InterruptAfter(30)
public void shouldBackupClusterNoSnapshotsAndNonEmptyLogWithReQuery() {
final TestCluster cluster = aCluster().withStaticNodes(3).start();
systemTestWatcher.cluster(cluster);
final TestNode leader = cluster.awaitLeader();
final int messageCount = 10;
cluster.connectClient();
cluster.sendMessages(messageCount);
cluster.awaitResponseMessageCount(messageCount);
cluster.awaitServicesMessageCount(messageCount);
final long logPosition = leader.service().cluster().logPosition();
final TestBackupNode backupNode = cluster.startClusterBackupNode(true);
cluster.awaitBackupState(ClusterBackup.State.BACKING_UP);
cluster.awaitBackupLiveLogPosition(logPosition);
assertTrue(backupNode.nextBackupQueryDeadlineMs(0));
cluster.sendMessages(5);
cluster.awaitResponseMessageCount(messageCount + 5);
cluster.awaitServiceMessageCount(leader, messageCount + 5);
final long nextLogPosition = leader.service().cluster().logPosition();
cluster.awaitBackupState(ClusterBackup.State.BACKING_UP);
cluster.awaitBackupLiveLogPosition(nextLogPosition);
cluster.stopAllNodes();
final TestNode node = cluster.startStaticNodeFromBackup();
cluster.awaitLeader();
assertEquals(messageCount + 5, node.service().messageCount());
}
use of io.aeron.test.InterruptAfter in project Aeron by real-logic.
the class ClusterBackupTest method shouldBackupClusterWithSnapshot.
@Test
@InterruptAfter(30)
public void shouldBackupClusterWithSnapshot() {
final TestCluster cluster = aCluster().withStaticNodes(3).start();
systemTestWatcher.cluster(cluster);
final TestNode leader = cluster.awaitLeader();
final int messageCount = 10;
cluster.connectClient();
cluster.sendMessages(messageCount);
cluster.awaitResponseMessageCount(messageCount);
cluster.awaitServicesMessageCount(messageCount);
cluster.takeSnapshot(leader);
cluster.awaitSnapshotCount(1);
final long logPosition = leader.service().cluster().logPosition();
cluster.startClusterBackupNode(true);
cluster.awaitBackupState(ClusterBackup.State.BACKING_UP);
cluster.awaitBackupLiveLogPosition(logPosition);
cluster.stopAllNodes();
final TestNode node = cluster.startStaticNodeFromBackup();
cluster.awaitLeader();
assertEquals(messageCount, node.service().messageCount());
assertTrue(node.service().wasSnapshotLoaded());
}
use of io.aeron.test.InterruptAfter in project Aeron by real-logic.
the class ClusterBackupTest method shouldBeAbleToGetTimeOfNextBackupQuery.
@Test
@InterruptAfter(30)
public void shouldBeAbleToGetTimeOfNextBackupQuery() {
final TestCluster cluster = aCluster().withStaticNodes(3).start();
systemTestWatcher.cluster(cluster);
cluster.awaitLeader();
final TestBackupNode backupNode = cluster.startClusterBackupNode(true);
cluster.awaitBackupState(ClusterBackup.State.BACKING_UP);
final long nowMs = backupNode.epochClock().time();
assertThat(backupNode.nextBackupQueryDeadlineMs(), greaterThan(nowMs));
}
use of io.aeron.test.InterruptAfter in project Aeron by real-logic.
the class ClusterBackupTest method shouldBackupClusterNoSnapshotsAndNonEmptyLogWithFailure.
@Test
@InterruptAfter(60)
public void shouldBackupClusterNoSnapshotsAndNonEmptyLogWithFailure() {
final TestCluster cluster = aCluster().withStaticNodes(3).start();
systemTestWatcher.cluster(cluster);
final TestNode leaderOne = cluster.awaitLeader();
final int messageCount = 10;
final AeronCluster aeronCluster = cluster.connectClient();
cluster.sendMessages(messageCount);
cluster.awaitResponseMessageCount(messageCount);
cluster.awaitServicesMessageCount(messageCount);
final long logPosition = leaderOne.service().cluster().logPosition();
cluster.startClusterBackupNode(true);
aeronCluster.sendKeepAlive();
cluster.awaitBackupState(ClusterBackup.State.BACKING_UP);
aeronCluster.sendKeepAlive();
cluster.awaitBackupLiveLogPosition(logPosition);
cluster.stopNode(leaderOne);
final TestNode leaderTwo = cluster.awaitLeader();
cluster.awaitNewLeadershipEvent(1);
cluster.sendMessages(5);
cluster.awaitResponseMessageCount(messageCount + 5);
final long nextLogPosition = leaderTwo.service().cluster().logPosition();
cluster.awaitBackupState(ClusterBackup.State.BACKING_UP);
cluster.awaitBackupLiveLogPosition(nextLogPosition);
cluster.stopAllNodes();
final TestNode node = cluster.startStaticNodeFromBackup();
cluster.awaitLeader();
assertEquals(messageCount + 5, node.service().messageCount());
assertFalse(node.service().wasSnapshotLoaded());
}
Aggregations