Skip to content

Commit

Permalink
[Java] AeronCluster client does not close itself after whole cluster …
Browse files Browse the repository at this point in the history
…shutdown
  • Loading branch information
the-thing committed Nov 21, 2024
1 parent 235499b commit a3fb977
Showing 1 changed file with 68 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package io.aeron.cluster;

import io.aeron.cluster.client.AeronCluster;
import io.aeron.test.EventLogExtension;
import io.aeron.test.InterruptAfter;
import io.aeron.test.InterruptingTestCallback;
import io.aeron.test.SlowTest;
import io.aeron.test.SystemTestWatcher;
import io.aeron.test.Tests;
import io.aeron.test.cluster.TestCluster;
import io.aeron.test.cluster.TestNode;
import org.agrona.concurrent.IdleStrategy;
import org.agrona.concurrent.SleepingIdleStrategy;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.RegisterExtension;

import static io.aeron.test.cluster.TestCluster.aCluster;
import static io.aeron.test.cluster.TestCluster.awaitElectionClosed;
import static org.junit.jupiter.api.Assertions.assertEquals;

@SlowTest
@ExtendWith({EventLogExtension.class, InterruptingTestCallback.class })
class ClusterClientRecoveryTest
{
@RegisterExtension
final SystemTestWatcher systemTestWatcher = new SystemTestWatcher();

@Test
@InterruptAfter(30)
void shouldCloseClusterClientAfterClusterShutdown()
{
final TestCluster cluster = aCluster().withStaticNodes(3).start();
systemTestWatcher.cluster(cluster);

final TestNode follower = cluster.followers().get(0);
awaitElectionClosed(follower);

final AeronCluster client = cluster.connectClient();

assertEquals(false, client.isClosed());
assertEquals(false, client.ingressPublication().isClosed());
assertEquals(true, client.sendKeepAlive());

cluster.node(0).close();
cluster.node(1).close();
cluster.node(2).close();

final IdleStrategy idleStrategy = new SleepingIdleStrategy();
idleStrategy.reset();

while (true)
{
client.sendKeepAlive();
client.pollEgress();

boolean clientClosed = client.isClosed();
boolean ingressPublicationClosed = client.ingressPublication().isClosed();

if (clientClosed && ingressPublicationClosed)
{
break;
}

Tests.idle(idleStrategy, "AeronCluster#isClosed = %s, AeronCluster#ingressPublication#isClosed = %s", clientClosed, ingressPublicationClosed);
}
}
}

0 comments on commit a3fb977

Please sign in to comment.