This is an automated email from the ASF dual-hosted git repository.
av pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 0316ff496a6 IGNITE-17925 Use configured FailureHandler for
segmentation handling … (#10362)
0316ff496a6 is described below
commit 0316ff496a657bd8f986e8f477519113386bc007
Author: Ilya Shishkov <[email protected]>
AuthorDate: Wed Nov 30 13:20:44 2022 +0300
IGNITE-17925 Use configured FailureHandler for segmentation handling …
(#10362)
---
.../ignite/configuration/IgniteConfiguration.java | 4 +-
.../managers/discovery/GridDiscoveryManager.java | 5 ++
.../plugin/segmentation/SegmentationPolicy.java | 5 +-
.../IgniteSlowClientDetectionSelfTest.java | 4 ++
.../processors/rest/RestProtocolStartTest.java | 2 +
.../IgniteClientReconnectMassiveShutdownTest.java | 4 ++
.../tcp/TcpClientDiscoverySpiSelfTest.java | 4 ++
.../tcp/TcpDiscoverySegmentationPolicyTest.java | 73 +++++++++++++++++-----
.../spi/discovery/tcp/TcpDiscoverySelfTest.java | 3 +-
.../zk/internal/ZookeeperDiscoverySpiTestBase.java | 4 ++
10 files changed, 88 insertions(+), 20 deletions(-)
diff --git
a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
index 07b3c00dfb9..37c4f339297 100644
---
a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
+++
b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
@@ -92,7 +92,7 @@ import org.jetbrains.annotations.Nullable;
import static java.lang.Math.max;
import static java.lang.Math.min;
-import static org.apache.ignite.plugin.segmentation.SegmentationPolicy.STOP;
+import static
org.apache.ignite.plugin.segmentation.SegmentationPolicy.USE_FAILURE_HANDLER;
/**
* This class defines grid runtime configuration. This configuration is passed
to
@@ -199,7 +199,7 @@ public class IgniteConfiguration {
public static final int DFLT_MGMT_THREAD_CNT = 4;
/** Default segmentation policy. */
- public static final SegmentationPolicy DFLT_SEG_PLC = STOP;
+ public static final SegmentationPolicy DFLT_SEG_PLC = USE_FAILURE_HANDLER;
/** Default value for wait for segment on startup flag. */
public static final boolean DFLT_WAIT_FOR_SEG_ON_START = true;
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
index f87beacf739..4894d056568 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
@@ -3302,6 +3302,11 @@ public class GridDiscoveryManager extends
GridManagerAdapter<DiscoverySpi> {
break;
+ case USE_FAILURE_HANDLER:
+ ctx.failure().process(new
FailureContext(FailureType.SEGMENTATION, null));
+
+ break;
+
default:
assert segPlc == NOOP : "Unsupported segmentation policy
value: " + segPlc;
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/plugin/segmentation/SegmentationPolicy.java
b/modules/core/src/main/java/org/apache/ignite/plugin/segmentation/SegmentationPolicy.java
index 3c0f69e18ad..ef42d0da04b 100644
---
a/modules/core/src/main/java/org/apache/ignite/plugin/segmentation/SegmentationPolicy.java
+++
b/modules/core/src/main/java/org/apache/ignite/plugin/segmentation/SegmentationPolicy.java
@@ -46,7 +46,10 @@ public enum SegmentationPolicy {
* {@link org.apache.ignite.events.EventType#EVT_NODE_SEGMENTED} event and
it is up to user to
* implement logic to handle this event.
*/
- NOOP;
+ NOOP,
+
+ /** Use configured failure handler. It is default segmentation policy. */
+ USE_FAILURE_HANDLER;
/** Enumerated values. */
private static final SegmentationPolicy[] VALS = values();
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/IgniteSlowClientDetectionSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/IgniteSlowClientDetectionSelfTest.java
index 2056a1e12cf..bd43933e127 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/IgniteSlowClientDetectionSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/IgniteSlowClientDetectionSelfTest.java
@@ -35,6 +35,7 @@ import org.apache.ignite.internal.util.lang.GridAbsPredicate;
import org.apache.ignite.internal.util.nio.GridNioServer;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.plugin.segmentation.SegmentationPolicy;
import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
import org.apache.ignite.spi.communication.tcp.internal.GridNioServerWrapper;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
@@ -78,6 +79,9 @@ public class IgniteSlowClientDetectionSelfTest extends
GridCommonAbstractTest {
cfg.setDataStorageConfiguration(dbCfg);
+ // Will be used to handle segmentation instead of NoOpFailureHandler.
+ cfg.setSegmentationPolicy(SegmentationPolicy.STOP);
+
return cfg;
}
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/processors/rest/RestProtocolStartTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/processors/rest/RestProtocolStartTest.java
index 0ab2e1a8800..a06c7ce81e7 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/processors/rest/RestProtocolStartTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/processors/rest/RestProtocolStartTest.java
@@ -33,6 +33,7 @@ import
org.apache.ignite.internal.client.GridClientConfiguration;
import org.apache.ignite.internal.client.GridClientException;
import org.apache.ignite.internal.client.GridClientFactory;
import
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionSupplyMessage;
+import org.apache.ignite.plugin.segmentation.SegmentationPolicy;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
@@ -60,6 +61,7 @@ public class RestProtocolStartTest extends
GridCommonAbstractTest {
.setConsistentId(igniteInstanceName)
.setSystemWorkerBlockedTimeout(10_000)
.setFailureDetectionTimeout(FAILURE_DETECTION_TIMEOUT)
+ .setSegmentationPolicy(SegmentationPolicy.STOP) // Handle
segmentation instead of NoOpFailureHandler.
.setCacheConfiguration(new CacheConfiguration(DEFAULT_CACHE_NAME)
.setAffinity(new RendezvousAffinityFunction(false, 8)))
.setCommunicationSpi(igniteInstanceName.equals(getTestIgniteInstanceName(0))
diff --git
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/IgniteClientReconnectMassiveShutdownTest.java
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/IgniteClientReconnectMassiveShutdownTest.java
index 918af7ededd..f6c792a0e23 100644
---
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/IgniteClientReconnectMassiveShutdownTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/IgniteClientReconnectMassiveShutdownTest.java
@@ -44,6 +44,7 @@ import org.apache.ignite.internal.util.typedef.X;
import org.apache.ignite.internal.util.typedef.internal.SB;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteFuture;
+import org.apache.ignite.plugin.segmentation.SegmentationPolicy;
import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.apache.ignite.transactions.Transaction;
@@ -71,6 +72,9 @@ public class IgniteClientReconnectMassiveShutdownTest extends
GridCommonAbstract
cfg.setFailureDetectionTimeout(5_000);
+ // Will be used to handle segmentation instead of NoOpFailureHandler.
+ cfg.setSegmentationPolicy(SegmentationPolicy.STOP);
+
return cfg;
}
diff --git
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java
index cb2ef6e2f8c..baded49d07c 100644
---
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java
@@ -59,6 +59,7 @@ import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgniteBiPredicate;
import org.apache.ignite.lang.IgniteInClosure;
import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.plugin.segmentation.SegmentationPolicy;
import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.spi.IgniteSpiException;
import org.apache.ignite.spi.IgniteSpiOperationTimeoutException;
@@ -236,6 +237,9 @@ public class TcpClientDiscoverySpiSelfTest extends
GridCommonAbstractTest {
if (nodeId != null)
cfg.setNodeId(nodeId);
+ // Will be used to handle segmentation instead of NoOpFailureHandler.
+ cfg.setSegmentationPolicy(SegmentationPolicy.STOP);
+
return cfg;
}
diff --git
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySegmentationPolicyTest.java
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySegmentationPolicyTest.java
index d168ab46c7a..691d0288c7e 100644
---
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySegmentationPolicyTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySegmentationPolicyTest.java
@@ -17,18 +17,23 @@
package org.apache.ignite.spi.discovery.tcp;
-import java.util.Arrays;
-import java.util.Collection;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.ignite.Ignite;
-import org.apache.ignite.cluster.ClusterNode;
+import org.apache.ignite.IgniteState;
+import org.apache.ignite.IgnitionListener;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.failure.AbstractFailureHandler;
import org.apache.ignite.failure.FailureContext;
+import org.apache.ignite.failure.StopNodeFailureHandler;
import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.IgniteKernal;
+import org.apache.ignite.internal.util.typedef.G;
+import org.apache.ignite.plugin.segmentation.SegmentationPolicy;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.jetbrains.annotations.Nullable;
import org.junit.Test;
+import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
+
/**
* Tests for segmentation policy and failure handling in {@link
TcpDiscoverySpi}.
*/
@@ -39,12 +44,17 @@ public class TcpDiscoverySegmentationPolicyTest extends
GridCommonAbstractTest {
/** Default failure handler invoked. */
private static volatile boolean dfltFailureHndInvoked;
+ /** Segmentation policy. */
+ private static SegmentationPolicy segPlc;
+
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
- if (igniteInstanceName.endsWith("2"))
- cfg.setFailureHandler(new TestFailureHandler());
+ if (segPlc != null)
+ cfg.setSegmentationPolicy(segPlc);
+
+ cfg.setFailureHandler(new TestFailureHandler());
// Disable recovery
((TcpDiscoverySpi)cfg.getDiscoverySpi()).setConnectionRecoveryTimeout(0);
@@ -52,34 +62,65 @@ public class TcpDiscoverySegmentationPolicyTest extends
GridCommonAbstractTest {
return cfg;
}
+ /** {@inheritDoc} */
+ @Override protected void beforeTest() throws Exception {
+ super.beforeTest();
+
+ dfltFailureHndInvoked = false;
+ segPlc = null;
+ }
+
/** {@inheritDoc} */
@Override protected void afterTest() throws Exception {
stopAllGrids();
}
/**
- * @throws Exception If failed.
+ * Test STOP segmentation policy.
*/
@Test
public void testStopOnSegmentation() throws Exception {
+ segPlc = SegmentationPolicy.STOP;
+
+ checkNodeStop(false);
+ }
+
+ /**
+ * Test that default segmentation policy invokes configured failure
handler.
+ */
+ @Test
+ public void testDefaultPolicy() throws Exception {
+ checkNodeStop(true);
+ }
+
+ /**
+ * @param byFailureHnd By failure handler flag.
+ */
+ private void checkNodeStop(boolean byFailureHnd) throws Exception {
+ AtomicBoolean segmented = new AtomicBoolean();
+
+ G.addListener(new IgnitionListener() {
+ @Override public void onStateChange(@Nullable String name,
IgniteState state) {
+ if (state == IgniteState.STOPPED_ON_SEGMENTATION)
+ segmented.set(true);
+ }
+ });
+
startGrids(NODES_CNT);
IgniteEx ignite1 = grid(1);
IgniteEx ignite2 = grid(2);
+ assertFalse("Unexpected segmentation.", segmented.get());
+
((TcpDiscoverySpi)ignite1.configuration().getDiscoverySpi()).brakeConnection();
((TcpDiscoverySpi)ignite2.configuration().getDiscoverySpi()).brakeConnection();
- waitForTopology(2);
-
- assertFalse(dfltFailureHndInvoked);
+ waitForCondition(() -> G.allGrids().size() < NODES_CNT,
getTestTimeout());
- Collection<ClusterNode> nodes = ignite1.cluster().forServers().nodes();
+ assertTrue("Segmentation was not happened.", segmented.get());
- assertEquals(2, nodes.size());
-
assertTrue(nodes.containsAll(Arrays.asList(((IgniteKernal)ignite(0)).localNode(),
((IgniteKernal)ignite(1)).localNode())));
-
- System.out.println();
+ assertTrue(byFailureHnd == dfltFailureHndInvoked);
}
/**
@@ -90,6 +131,8 @@ public class TcpDiscoverySegmentationPolicyTest extends
GridCommonAbstractTest {
@Override protected boolean handle(Ignite ignite, FailureContext
failureCtx) {
dfltFailureHndInvoked = true;
+ ((IgniteEx)ignite).context().failure().process(failureCtx, new
StopNodeFailureHandler());
+
return true;
}
}
diff --git
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java
index 3ac49d6ce2d..6b06b459f27 100644
---
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java
@@ -177,8 +177,7 @@ public class TcpDiscoverySelfTest extends
GridCommonAbstractTest {
else
cfg.setCacheConfiguration();
- if (segPlc != null)
- cfg.setSegmentationPolicy(segPlc);
+ cfg.setSegmentationPolicy(segPlc != null ? segPlc :
SegmentationPolicy.STOP);
cfg.setIncludeEventTypes(EVT_TASK_FAILED, EVT_TASK_FINISHED,
EVT_JOB_MAPPED);
diff --git
a/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoverySpiTestBase.java
b/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoverySpiTestBase.java
index bed11bd6968..8c9dbc2502b 100644
---
a/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoverySpiTestBase.java
+++
b/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoverySpiTestBase.java
@@ -71,6 +71,7 @@ import org.apache.ignite.lang.IgniteOutClosure;
import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.plugin.extensions.communication.Message;
import org.apache.ignite.plugin.security.SecurityCredentials;
+import org.apache.ignite.plugin.segmentation.SegmentationPolicy;
import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
import org.apache.ignite.spi.discovery.DiscoverySpi;
@@ -530,6 +531,9 @@ class ZookeeperDiscoverySpiTestBase extends
GridCommonAbstractTest {
cfg.setIncludeEventTypes(EventType.EVTS_ALL);
+ // Will be used to handle segmentation.
+ cfg.setSegmentationPolicy(SegmentationPolicy.STOP);
+
return cfg;
}