From 0601c1ba628556c4f5be82063dae111658f57a46 Mon Sep 17 00:00:00 2001 From: tledkov-gridgain Date: Thu, 16 Nov 2017 17:18:03 +0300 Subject: [PATCH 1/2] IGNITE-6932 GridQueryProcessor.querySqlFieldsNoCache should check for cluster active/inactive state --- .../processors/query/GridQueryProcessor.java | 8 ++ ...eckClusterStateBeforeExecuteQueryTest.java | 89 +++++++++++++++++++ .../IgnitePdsWithIndexingTestSuite.java | 2 + 3 files changed, 99 insertions(+) create mode 100644 modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/IgniteCheckClusterStateBeforeExecuteQueryTest.java diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java index 7ad95a603e559..ed5fdd96aa475 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java @@ -1944,6 +1944,8 @@ public FieldsQueryCursor> querySqlFieldsNoCache(final SqlFieldsQuery qry * * @param qry Query. * @param keepBinary Keep binary flag. + * @param failOnMultipleStmts If {@code true} the method must throws exception when query contains + * more then one SQL statement. * @return Cursor. */ public List>> querySqlFieldsNoCache(final SqlFieldsQuery qry, @@ -1955,6 +1957,12 @@ public List>> querySqlFieldsNoCache(final SqlFieldsQue if (qry.isLocal()) throw new IgniteException("Local query is not supported without specific cache."); + if (!ctx.state().publicApiActiveState()) { + throw new IgniteException("Can not perform the operation because the cluster is inactive. Note, that " + + "the cluster is considered inactive by default if Ignite Persistent Store is used to let all the nodes " + + "join the cluster. To activate the cluster call Ignite.active(true)."); + } + if (qry.getSchema() == null) qry.setSchema(QueryUtils.DFLT_SCHEMA); diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/IgniteCheckClusterStateBeforeExecuteQueryTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/IgniteCheckClusterStateBeforeExecuteQueryTest.java new file mode 100644 index 0000000000000..f6221a5c02a6e --- /dev/null +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/IgniteCheckClusterStateBeforeExecuteQueryTest.java @@ -0,0 +1,89 @@ +/* + * 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.processors.database; + +import java.util.concurrent.Callable; +import org.apache.ignite.IgniteException; +import org.apache.ignite.cache.query.SqlFieldsQuery; +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.internal.U; +import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; +import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder; +import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; + +import static org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.DFLT_STORE_DIR; +import static org.apache.ignite.testframework.GridTestUtils.assertThrows; + +/** + * + */ +public class IgniteCheckClusterStateBeforeExecuteQueryTest extends GridCommonAbstractTest { + /** */ + private static final TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true); + + + /** {@inheritDoc} */ + @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { + IgniteConfiguration cfg = super.getConfiguration(gridName); + + ((TcpDiscoverySpi)cfg.getDiscoverySpi()).setIpFinder(ipFinder); + + DataStorageConfiguration pCfg = new DataStorageConfiguration(); + + pCfg.setDefaultDataRegionConfiguration(new DataRegionConfiguration() + .setPersistenceEnabled(true) + .setMaxSize(100 * 1024 * 1024)); + + cfg.setDataStorageConfiguration(pCfg); + + return cfg; + } + + /** {@inheritDoc} */ + @Override protected void beforeTest() throws Exception { + stopAllGrids(); + + deleteRecursively(U.resolveWorkDirectory(U.defaultWorkDirectory(), DFLT_STORE_DIR, false)); + } + + /** {@inheritDoc} */ + @Override protected void afterTest() throws Exception { + stopAllGrids(); + + deleteRecursively(U.resolveWorkDirectory(U.defaultWorkDirectory(), DFLT_STORE_DIR, false)); + } + + /** + * @throws Exception On failed. + */ + public void testDynamicSchemaChangesPersistence() throws Exception { + final IgniteEx ig = startGrid(0); + + assertThrows(log, new Callable() { + @Override public Void call() throws Exception { + ig.context().query().querySqlFieldsNoCache(new SqlFieldsQuery("SELECT 1"), false); + + return null; + } + }, IgniteException.class, "Can not perform the operation because the cluster is inactive."); + } +} diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingTestSuite.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingTestSuite.java index 033e5a9751308..d7ab71400d8aa 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingTestSuite.java +++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingTestSuite.java @@ -20,6 +20,7 @@ import junit.framework.TestSuite; import org.apache.ignite.internal.processors.cache.IgnitePdsSingleNodeWithIndexingAndGroupPutGetPersistenceSelfTest; import org.apache.ignite.internal.processors.cache.IgnitePdsSingleNodeWithIndexingPutGetPersistenceTest; +import org.apache.ignite.internal.processors.database.IgniteCheckClusterStateBeforeExecuteQueryTest; import org.apache.ignite.internal.processors.database.IgniteDbMultiNodeWithIndexingPutGetTest; import org.apache.ignite.internal.processors.database.IgniteDbSingleNodeWithIndexingPutGetTest; import org.apache.ignite.internal.processors.database.IgniteDbSingleNodeWithIndexingWalRestoreTest; @@ -44,6 +45,7 @@ public static TestSuite suite() throws Exception { suite.addTestSuite(IgnitePdsSingleNodeWithIndexingAndGroupPutGetPersistenceSelfTest.class); suite.addTestSuite(IgnitePersistentStoreSchemaLoadTest.class); suite.addTestSuite(IgnitePersistentStoreQueryWithMultipleClassesPerCacheTest.class); + suite.addTestSuite(IgniteCheckClusterStateBeforeExecuteQueryTest.class); return suite; } From 03af9b7954eee1915c8544a5d6a8437dc403edd9 Mon Sep 17 00:00:00 2001 From: tledkov-gridgain Date: Thu, 16 Nov 2017 18:53:56 +0300 Subject: [PATCH 2/2] IGNITE-6932 move test to another suite --- .../IgniteCheckClusterStateBeforeExecuteQueryTest.java | 2 +- .../ignite/testsuites/IgniteCacheQuerySelfTestSuite.java | 3 +++ .../ignite/testsuites/IgnitePdsWithIndexingTestSuite.java | 2 -- 3 files changed, 4 insertions(+), 3 deletions(-) rename modules/indexing/src/test/java/org/apache/ignite/internal/processors/{database => cache}/IgniteCheckClusterStateBeforeExecuteQueryTest.java (98%) diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/IgniteCheckClusterStateBeforeExecuteQueryTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCheckClusterStateBeforeExecuteQueryTest.java similarity index 98% rename from modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/IgniteCheckClusterStateBeforeExecuteQueryTest.java rename to modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCheckClusterStateBeforeExecuteQueryTest.java index f6221a5c02a6e..aae6a0ca8a2f0 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/IgniteCheckClusterStateBeforeExecuteQueryTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCheckClusterStateBeforeExecuteQueryTest.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.ignite.internal.processors.database; +package org.apache.ignite.internal.processors.cache; import java.util.concurrent.Callable; import org.apache.ignite.IgniteException; diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java index 16fd5e0b84dd2..7b3b271a33c52 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java +++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java @@ -70,6 +70,7 @@ import org.apache.ignite.internal.processors.cache.IgniteCacheQueryIndexSelfTest; import org.apache.ignite.internal.processors.cache.IgniteCacheQueryLoadSelfTest; import org.apache.ignite.internal.processors.cache.IgniteCacheUpdateSqlQuerySelfTest; +import org.apache.ignite.internal.processors.cache.IgniteCheckClusterStateBeforeExecuteQueryTest; import org.apache.ignite.internal.processors.cache.IgniteCrossCachesJoinsQueryTest; import org.apache.ignite.internal.processors.cache.IncorrectQueryEntityTest; import org.apache.ignite.internal.processors.cache.QueryEntityCaseMismatchTest; @@ -366,6 +367,8 @@ public static TestSuite suite() throws Exception { suite.addTestSuite(GridCacheQuerySqlFieldInlineSizeSelfTest.class); suite.addTestSuite(IgniteSqlParameterizedQueryTest.class); + suite.addTestSuite(IgniteCheckClusterStateBeforeExecuteQueryTest.class); + return suite; } } diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingTestSuite.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingTestSuite.java index d7ab71400d8aa..033e5a9751308 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingTestSuite.java +++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgnitePdsWithIndexingTestSuite.java @@ -20,7 +20,6 @@ import junit.framework.TestSuite; import org.apache.ignite.internal.processors.cache.IgnitePdsSingleNodeWithIndexingAndGroupPutGetPersistenceSelfTest; import org.apache.ignite.internal.processors.cache.IgnitePdsSingleNodeWithIndexingPutGetPersistenceTest; -import org.apache.ignite.internal.processors.database.IgniteCheckClusterStateBeforeExecuteQueryTest; import org.apache.ignite.internal.processors.database.IgniteDbMultiNodeWithIndexingPutGetTest; import org.apache.ignite.internal.processors.database.IgniteDbSingleNodeWithIndexingPutGetTest; import org.apache.ignite.internal.processors.database.IgniteDbSingleNodeWithIndexingWalRestoreTest; @@ -45,7 +44,6 @@ public static TestSuite suite() throws Exception { suite.addTestSuite(IgnitePdsSingleNodeWithIndexingAndGroupPutGetPersistenceSelfTest.class); suite.addTestSuite(IgnitePersistentStoreSchemaLoadTest.class); suite.addTestSuite(IgnitePersistentStoreQueryWithMultipleClassesPerCacheTest.class); - suite.addTestSuite(IgniteCheckClusterStateBeforeExecuteQueryTest.class); return suite; }