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.
