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;
     }
 

Reply via email to