This is an automated email from the ASF dual-hosted git repository.
sanpwc pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 5cfbc6537c IGNITE-23453 Enforce proper raft and rocks stop order in
ItNodeTest. (#4571)
5cfbc6537c is described below
commit 5cfbc6537cc6ceb359c97c25d06b9df24d98d623
Author: Alexander Lapin <[email protected]>
AuthorDate: Wed Oct 16 11:03:13 2024 +0300
IGNITE-23453 Enforce proper raft and rocks stop order in ItNodeTest. (#4571)
---
.../apache/ignite/raft/jraft/core/ItNodeTest.java | 106 ++++++++++-----------
1 file changed, 52 insertions(+), 54 deletions(-)
diff --git
a/modules/raft/src/integrationTest/java/org/apache/ignite/raft/jraft/core/ItNodeTest.java
b/modules/raft/src/integrationTest/java/org/apache/ignite/raft/jraft/core/ItNodeTest.java
index cadd2ff7d3..892e79603d 100644
---
a/modules/raft/src/integrationTest/java/org/apache/ignite/raft/jraft/core/ItNodeTest.java
+++
b/modules/raft/src/integrationTest/java/org/apache/ignite/raft/jraft/core/ItNodeTest.java
@@ -138,6 +138,7 @@ import
org.apache.ignite.raft.jraft.util.ExecutorServiceHelper;
import org.apache.ignite.raft.jraft.util.ExponentialBackoffTimeoutStrategy;
import org.apache.ignite.raft.jraft.util.Utils;
import org.apache.ignite.raft.jraft.util.concurrent.FixedThreadsExecutorGroup;
+import org.jetbrains.annotations.Nullable;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
@@ -195,6 +196,7 @@ public class ItNodeTest extends BaseIgniteAbstractTest {
private final List<FixedThreadsExecutorGroup> appendEntriesExecutors = new
ArrayList<>();
+ private @Nullable DefaultLogStorageFactory persistentLogStorageFactory;
/** Test info. */
private TestInfo testInfo;
@@ -247,6 +249,10 @@ public class ItNodeTest extends BaseIgniteAbstractTest {
TestUtils.assertAllJraftThreadsStopped();
+ if (persistentLogStorageFactory != null) {
+ assertThat(persistentLogStorageFactory.stopAsync(),
willCompleteSuccessfully());
+ }
+
log.info(">>>>>>>>>>>>>>> End test method: " +
testInfo.getDisplayName() + ", cost:"
+ (Utils.monotonicMs() - testStartMs) + " ms.");
}
@@ -3902,39 +3908,35 @@ public class ItNodeTest extends BaseIgniteAbstractTest {
testInfo
);
- DefaultLogStorageFactory persistentLogStorageFactory =
startPersistentLogStorageFactory();
+ persistentLogStorageFactory = startPersistentLogStorageFactory();
- try {
- cluster.setRaftServiceFactory(new
IgniteJraftServiceFactory(persistentLogStorageFactory));
+ cluster.setRaftServiceFactory(new
IgniteJraftServiceFactory(persistentLogStorageFactory));
- for (TestPeer peer : peers) {
- assertTrue(cluster.start(peer));
- }
+ for (TestPeer peer : peers) {
+ assertTrue(cluster.start(peer));
+ }
- waitTillFirstConfigLogEntryIsReplicated(forcedLeaderPeer);
+ waitTillFirstConfigLogEntryIsReplicated(forcedLeaderPeer);
- // This makes majority go.
- cluster.stop(originalLeaderPeer.getPeerId());
+ // This makes majority go.
+ cluster.stop(originalLeaderPeer.getPeerId());
- cluster.getNode(forcedLeaderPeer.getPeerId()).resetPeers(new
Configuration(Set.of(forcedLeaderPeer.getPeerId())));
- assertThat(cluster.waitAndGetLeader().getLeaderId(),
is(forcedLeaderPeer.getPeerId()));
+ cluster.getNode(forcedLeaderPeer.getPeerId()).resetPeers(new
Configuration(Set.of(forcedLeaderPeer.getPeerId())));
+ assertThat(cluster.waitAndGetLeader().getLeaderId(),
is(forcedLeaderPeer.getPeerId()));
- assertThat(lastLogIndexAt(forcedLeaderPeer),
is(configFromResetIndex));
+ assertThat(lastLogIndexAt(forcedLeaderPeer), is(configFromResetIndex));
- Consumer<NodeOptions> installExternalIndex = nodeOptions ->
nodeOptions.setExternallyEnforcedConfigIndex(configFromResetIndex);
- cluster.setNodeOptionsCustomizer(installExternalIndex);
+ Consumer<NodeOptions> installExternalIndex = nodeOptions ->
nodeOptions.setExternallyEnforcedConfigIndex(configFromResetIndex);
+ cluster.setNodeOptionsCustomizer(installExternalIndex);
- assertTrue(cluster.start(originalLeaderPeer));
+ assertTrue(cluster.start(originalLeaderPeer));
- assertFalse(
- waitForCondition(() ->
cluster.getNode(originalLeaderPeer.getPeerId()).isLeader(),
TimeUnit.SECONDS.toMillis(5)),
- "Ex-leader has become a leader again"
- );
+ assertFalse(
+ waitForCondition(() ->
cluster.getNode(originalLeaderPeer.getPeerId()).isLeader(),
TimeUnit.SECONDS.toMillis(5)),
+ "Ex-leader has become a leader again"
+ );
-
assertTrue(cluster.getNode(forcedLeaderPeer.getPeerId()).isLeader(), "Forced
leader must remain a leader");
- } finally {
- persistentLogStorageFactory.stopAsync();
- }
+ assertTrue(cluster.getNode(forcedLeaderPeer.getPeerId()).isLeader(),
"Forced leader must remain a leader");
}
private DefaultLogStorageFactory startPersistentLogStorageFactory() {
@@ -3971,47 +3973,43 @@ public class ItNodeTest extends BaseIgniteAbstractTest {
testInfo
);
- DefaultLogStorageFactory persistentLogStorageFactory =
startPersistentLogStorageFactory();
+ persistentLogStorageFactory = startPersistentLogStorageFactory();
- try {
- cluster.setRaftServiceFactory(new
IgniteJraftServiceFactory(persistentLogStorageFactory));
+ cluster.setRaftServiceFactory(new
IgniteJraftServiceFactory(persistentLogStorageFactory));
- for (TestPeer peer : peers) {
- assertTrue(cluster.start(peer));
- }
+ for (TestPeer peer : peers) {
+ assertTrue(cluster.start(peer));
+ }
- waitTillFirstConfigLogEntryIsReplicated(forcedLeaderPeer);
+ waitTillFirstConfigLogEntryIsReplicated(forcedLeaderPeer);
- // This makes majority go.
- cluster.stop(originalLeaderPeer.getPeerId());
+ // This makes majority go.
+ cluster.stop(originalLeaderPeer.getPeerId());
- Node forcedLeaderNode =
cluster.getNode(forcedLeaderPeer.getPeerId());
- forcedLeaderNode.resetPeers(new
Configuration(Set.of(forcedLeaderPeer.getPeerId())));
- Node node = cluster.waitAndGetLeader();
- assertThat(node.getLeaderId(), is(forcedLeaderPeer.getPeerId()));
+ Node forcedLeaderNode = cluster.getNode(forcedLeaderPeer.getPeerId());
+ forcedLeaderNode.resetPeers(new
Configuration(Set.of(forcedLeaderPeer.getPeerId())));
+ Node node = cluster.waitAndGetLeader();
+ assertThat(node.getLeaderId(), is(forcedLeaderPeer.getPeerId()));
- Consumer<NodeOptions> installExternalIndex = nodeOptions ->
nodeOptions.setExternallyEnforcedConfigIndex(configFromResetIndex);
- cluster.setNodeOptionsCustomizer(installExternalIndex);
+ Consumer<NodeOptions> installExternalIndex = nodeOptions ->
nodeOptions.setExternallyEnforcedConfigIndex(configFromResetIndex);
+ cluster.setNodeOptionsCustomizer(installExternalIndex);
- assertTrue(cluster.start(originalLeaderPeer));
+ assertTrue(cluster.start(originalLeaderPeer));
- CompletableFuture<Void> configChanged = new CompletableFuture<>();
- forcedLeaderNode.changePeersAndLearners(
- new Configuration(Set.of(forcedLeaderPeer.getPeerId(),
originalLeaderPeer.getPeerId())),
- node.getCurrentTerm(),
- completeFutureClosure(configChanged)
- );
- assertThat(configChanged, willCompleteSuccessfully());
+ CompletableFuture<Void> configChanged = new CompletableFuture<>();
+ forcedLeaderNode.changePeersAndLearners(
+ new Configuration(Set.of(forcedLeaderPeer.getPeerId(),
originalLeaderPeer.getPeerId())),
+ node.getCurrentTerm(),
+ completeFutureClosure(configChanged)
+ );
+ assertThat(configChanged, willCompleteSuccessfully());
-
forcedLeaderNode.transferLeadershipTo(originalLeaderPeer.getPeerId());
+ forcedLeaderNode.transferLeadershipTo(originalLeaderPeer.getPeerId());
- assertTrue(
- waitForCondition(() ->
cluster.getNode(originalLeaderPeer.getPeerId()).isLeader(),
TimeUnit.SECONDS.toMillis(10)),
- "Original leader was not able to become a leader after
reset"
- );
- } finally {
- persistentLogStorageFactory.stopAsync();
- }
+ assertTrue(
+ waitForCondition(() ->
cluster.getNode(originalLeaderPeer.getPeerId()).isLeader(),
TimeUnit.SECONDS.toMillis(10)),
+ "Original leader was not able to become a leader after reset"
+ );
}
private NodeOptions createNodeOptions(int nodeIdx) {