This is an automated email from the ASF dual-hosted git repository.

namelchev 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 f9a2921346a IGNITE-17383 Fixed Idle Verify hanging when invoked on an 
inactive cluster. (#11377)
f9a2921346a is described below

commit f9a2921346a8d8fa79bdb2286bd97cc7f9baacd9
Author: Julia Bakulina <[email protected]>
AuthorDate: Thu Jun 20 19:35:37 2024 +0300

    IGNITE-17383 Fixed Idle Verify hanging when invoked on an inactive cluster. 
(#11377)
---
 .../apache/ignite/util/GridCommandHandlerTest.java | 27 ++++++++++++++++++++++
 .../management/cache/IdleVerifyTaskV2.java         |  4 ++++
 .../cache/VerifyBackupPartitionsTaskV2.java        |  7 ++++++
 3 files changed, 38 insertions(+)

diff --git 
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
 
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
index 42b8005f378..51dd7ff9629 100644
--- 
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
+++ 
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
@@ -84,6 +84,7 @@ import org.apache.ignite.internal.client.impl.GridClientImpl;
 import org.apache.ignite.internal.client.util.GridConcurrentHashSet;
 import 
org.apache.ignite.internal.management.cache.FindAndDeleteGarbageInPersistenceTaskResult;
 import org.apache.ignite.internal.management.cache.IdleVerifyDumpTask;
+import 
org.apache.ignite.internal.management.cache.VerifyBackupPartitionsTaskV2;
 import org.apache.ignite.internal.management.tx.TxInfo;
 import org.apache.ignite.internal.management.tx.TxTaskResult;
 import org.apache.ignite.internal.managers.communication.GridIoMessage;
@@ -725,6 +726,32 @@ public class GridCommandHandlerTest extends 
GridCommandHandlerClusterPerMethodAb
         assertTrue("Tag has not been updated in 10 seconds", tagUpdated);
     }
 
+    /**
+     * Tests idle_verify working on an inactive cluster with persistence. 
Works via control.sh.
+     *
+     * @throws IgniteException if succeeded.
+     */
+    @Test
+    public void testIdleVerifyOnInactiveClusterWithPersistence() throws 
Exception {
+        IgniteEx srv = startGrids(2);
+
+        assertTrue(CU.isPersistenceEnabled(getConfiguration()));
+        assertFalse(srv.cluster().state().active());
+
+        injectTestSystemOut();
+
+        assertEquals(EXIT_CODE_UNEXPECTED_ERROR, execute("--cache", 
"idle_verify"));
+
+        assertContains(log, testOut.toString(), 
VerifyBackupPartitionsTaskV2.IDLE_VERIFY_ON_INACTIVE_CLUSTER_ERROR_MESSAGE);
+        assertContains(log, testOut.toString(), "Failed to perform operation");
+
+        srv.cluster().state(ACTIVE);
+        srv.createCache(DEFAULT_CACHE_NAME);
+
+        assertEquals(EXIT_CODE_OK, execute("--cache", "idle_verify"));
+        assertContains(log, testOut.toString(), "The check procedure has 
finished, no conflicts have been found.");
+    }
+
     /**
      * Test deactivation works via control.sh
      *
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/IdleVerifyTaskV2.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/IdleVerifyTaskV2.java
index 36b3654198c..1e03a864e0e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/IdleVerifyTaskV2.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/IdleVerifyTaskV2.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.management.cache;
 
+import org.apache.ignite.IgniteException;
 import org.apache.ignite.internal.processors.task.GridInternal;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -31,6 +32,9 @@ public class IdleVerifyTaskV2 extends 
VisorOneNodeTask<CacheIdleVerifyCommandArg
 
     /** {@inheritDoc} */
     @Override protected VisorJob<CacheIdleVerifyCommandArg, 
IdleVerifyResultV2> job(CacheIdleVerifyCommandArg arg) {
+        if (!ignite.context().state().publicApiActiveState(true))
+            throw new 
IgniteException(VerifyBackupPartitionsTaskV2.IDLE_VERIFY_ON_INACTIVE_CLUSTER_ERROR_MESSAGE);
+
         return new IdleVerifyJob<>(arg, debug, 
VerifyBackupPartitionsTaskV2.class);
     }
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/VerifyBackupPartitionsTaskV2.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/VerifyBackupPartitionsTaskV2.java
index 8fc339f5786..5d2dabdb9e0 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/VerifyBackupPartitionsTaskV2.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/VerifyBackupPartitionsTaskV2.java
@@ -84,6 +84,10 @@ public class VerifyBackupPartitionsTaskV2 extends 
ComputeTaskAdapter<CacheIdleVe
     /** First version of Ignite that is capable of executing Idle Verify V2. */
     public static final IgniteProductVersion V2_SINCE_VER = 
IgniteProductVersion.fromString("2.5.3");
 
+    /** Error thrown when idle_verify is called on an inactive cluster with 
persistence. */
+    public static final String IDLE_VERIFY_ON_INACTIVE_CLUSTER_ERROR_MESSAGE = 
"Cannot perform the operation because " +
+        "the cluster is inactive.";
+
     /** Injected logger. */
     @LoggerResource
     private IgniteLogger log;
@@ -194,6 +198,9 @@ public class VerifyBackupPartitionsTaskV2 extends 
ComputeTaskAdapter<CacheIdleVe
 
         /** {@inheritDoc} */
         @Override public Map<PartitionKeyV2, PartitionHashRecordV2> execute() 
throws IgniteException {
+            if (!ignite.context().state().publicApiActiveState(true))
+                throw new 
IgniteException(IDLE_VERIFY_ON_INACTIVE_CLUSTER_ERROR_MESSAGE);
+
             try {
                 
ignite.context().cache().context().database().waitForCheckpoint("VerifyBackupPartitions");
             }

Reply via email to