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

alexpl pushed a commit to branch ignite-2.15
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit d321c5a1eb65acc3d2f999bfee833a742c706a43
Author: Maksim Timonin <[email protected]>
AuthorDate: Thu Apr 13 16:25:51 2023 +0300

    IGNITE-19279 Fix AssertionError on inactive cluster for thin client cache 
request (#10645)
    
    (cherry picked from commit 2b1406e00fdd9c226b60697fde7e3b3fc176b121)
---
 .../client/cache/ClientCachePartitionsRequest.java |  3 +
 .../thin/InactiveClusterCacheRequestTest.java      | 88 ++++++++++++++++++++++
 .../org/apache/ignite/client/ClientTestSuite.java  |  2 +
 3 files changed, 93 insertions(+)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCachePartitionsRequest.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCachePartitionsRequest.java
index 062d0ebf528..35740da13c6 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCachePartitionsRequest.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCachePartitionsRequest.java
@@ -82,6 +82,9 @@ public class ClientCachePartitionsRequest extends 
ClientRequest {
 
     /** {@inheritDoc} */
     @Override public ClientResponse process(ClientConnectionContext ctx) {
+        if (!ctx.kernalContext().state().publicApiActiveState(true))
+            return new ClientResponse(requestId(), "Cannot perform cache 
operation because the cluster is inactive.");
+
         Map<ClientCachePartitionAwarenessGroup, 
ClientCachePartitionAwarenessGroup> grps = new HashMap<>(cacheIds.length);
         ClientAffinityTopologyVersion affinityVer = 
ctx.checkAffinityTopologyVersion();
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/client/thin/InactiveClusterCacheRequestTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/client/thin/InactiveClusterCacheRequestTest.java
new file mode 100644
index 00000000000..b1c87d18b91
--- /dev/null
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/client/thin/InactiveClusterCacheRequestTest.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.client.thin;
+
+import java.util.List;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.client.ClientException;
+import org.apache.ignite.client.IgniteClient;
+import org.apache.ignite.cluster.ClusterState;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.ClientConfiguration;
+import org.apache.ignite.configuration.DataRegionConfiguration;
+import org.apache.ignite.configuration.DataStorageConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.testframework.GridTestUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+/** */
+@RunWith(Parameterized.class)
+public class InactiveClusterCacheRequestTest extends AbstractThinClientTest {
+    /** */
+    @Parameterized.Parameter
+    public boolean partitionAwarenessEnabled;
+
+    /** */
+    @Parameterized.Parameters(name = "partitionAwareness={0}")
+    public static List<Boolean> params() {
+        return F.asList(false, true);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTest() {
+        stopAllGrids();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
+
+        cfg.setDataStorageConfiguration(new DataStorageConfiguration()
+            .setDefaultDataRegionConfiguration(new 
DataRegionConfiguration().setPersistenceEnabled(true)));
+
+        cfg.setCacheConfiguration(new 
CacheConfiguration<>(DEFAULT_CACHE_NAME));
+
+        return cfg;
+    }
+
+    /** */
+    @Test
+    public void testCacheOperationReturnErrorOnInactiveCluster() throws 
Exception {
+        startGrids(2);
+
+        ClientConfiguration ccfg = getClientConfiguration(grid(0), grid(1))
+            .setPartitionAwarenessEnabled(partitionAwarenessEnabled);
+
+        stopAllGrids();
+
+        IgniteEx ign = startGrid(0);
+
+        assertTrue(ign.cluster().state() == ClusterState.INACTIVE);
+
+        try (IgniteClient cln = Ignition.startClient(ccfg)) {
+            GridTestUtils.assertThrows(log,
+                () -> cln.cache(DEFAULT_CACHE_NAME).get(0),
+                ClientException.class,
+                "cluster is inactive");
+        }
+    }
+}
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/client/ClientTestSuite.java 
b/modules/indexing/src/test/java/org/apache/ignite/client/ClientTestSuite.java
index 5c4c610f882..cbb128e44a7 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/client/ClientTestSuite.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/client/ClientTestSuite.java
@@ -26,6 +26,7 @@ import org.apache.ignite.internal.client.thin.ComputeTaskTest;
 import org.apache.ignite.internal.client.thin.DataReplicationOperationsTest;
 import org.apache.ignite.internal.client.thin.FunctionalTest;
 import org.apache.ignite.internal.client.thin.IgniteSetTest;
+import org.apache.ignite.internal.client.thin.InactiveClusterCacheRequestTest;
 import org.apache.ignite.internal.client.thin.MetadataRegistrationTest;
 import 
org.apache.ignite.internal.client.thin.OptimizedMarshallerClassesCachedTest;
 import org.apache.ignite.internal.client.thin.ReliableChannelTest;
@@ -84,6 +85,7 @@ import org.junit.runners.Suite;
     IgniteClientConnectionEventListenerTest.class,
     IgniteClientRequestEventListenerTest.class,
     ThinClientEnpointsDiscoveryTest.class,
+    InactiveClusterCacheRequestTest.class,
 })
 public class ClientTestSuite {
     // No-op.

Reply via email to