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