Repository: ignite
Updated Branches:
  refs/heads/master d9be16f23 -> 2c13a0156


IGNITE-10534: SQL: fixed local cache check for DDL operations. This closes 
#5574.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/2c13a015
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/2c13a015
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/2c13a015

Branch: refs/heads/master
Commit: 2c13a01561d49702a70c364497b97f3ccf8944e6
Parents: d9be16f
Author: Yuriy Gerzhedovich <[email protected]>
Authored: Mon Dec 10 11:51:49 2018 +0300
Committer: devozerov <[email protected]>
Committed: Mon Dec 10 11:51:49 2018 +0300

----------------------------------------------------------------------
 .../query/h2/ddl/DdlStatementsProcessor.java    | 19 +++----
 .../cache/GridCacheDynamicLoadOnClientTest.java | 56 ++++++++++++++------
 2 files changed, 48 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/2c13a015/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/ddl/DdlStatementsProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/ddl/DdlStatementsProcessor.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/ddl/DdlStatementsProcessor.java
index 6308eab..ca46828 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/ddl/DdlStatementsProcessor.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/ddl/DdlStatementsProcessor.java
@@ -29,6 +29,7 @@ import java.util.UUID;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteCluster;
 import org.apache.ignite.IgniteSystemProperties;
+import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.QueryEntity;
 import org.apache.ignite.cache.QueryIndex;
 import org.apache.ignite.cache.QueryIndexType;
@@ -36,7 +37,6 @@ import org.apache.ignite.cache.query.FieldsQueryCursor;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import org.apache.ignite.internal.processors.cache.QueryCursorImpl;
 import 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal;
 import org.apache.ignite.internal.processors.cache.mvcc.MvccUtils;
@@ -136,7 +136,7 @@ public class DdlStatementsProcessor {
 
                 assert tbl.rowDescriptor() != null;
 
-                isDdlSupported(tbl);
+                ensureDdlSupported(tbl);
 
                 QueryIndex newIdx = new QueryIndex();
 
@@ -170,7 +170,7 @@ public class DdlStatementsProcessor {
                 GridH2Table tbl = idx.dataTableForIndex(cmd0.schemaName(), 
cmd0.indexName());
 
                 if (tbl != null) {
-                    isDdlSupported(tbl);
+                    ensureDdlSupported(tbl);
 
                     fut = ctx.query().dynamicIndexDrop(tbl.cacheName(), 
cmd0.schemaName(), cmd0.indexName(),
                         cmd0.ifExists());
@@ -277,7 +277,7 @@ public class DdlStatementsProcessor {
 
                 assert tbl.rowDescriptor() != null;
 
-                isDdlSupported(tbl);
+                ensureDdlSupported(tbl);
 
                 QueryIndex newIdx = new QueryIndex();
 
@@ -312,7 +312,7 @@ public class DdlStatementsProcessor {
                 GridH2Table tbl = idx.dataTableForIndex(cmd.schemaName(), 
cmd.indexName());
 
                 if (tbl != null) {
-                    isDdlSupported(tbl);
+                    ensureDdlSupported(tbl);
 
                     fut = ctx.query().dynamicIndexDrop(tbl.cacheName(), 
cmd.schemaName(), cmd.indexName(),
                         cmd.ifExists());
@@ -525,13 +525,10 @@ public class DdlStatementsProcessor {
      * Check if table supports DDL statement.
      *
      * @param tbl Table.
+     * @throws IgniteSQLException If failed.
      */
-    private static void isDdlSupported(GridH2Table tbl) {
-        GridCacheContext cctx = tbl.cacheContext();
-
-        assert cctx != null;
-
-        if (cctx.isLocal())
+    private static void ensureDdlSupported(GridH2Table tbl) throws 
IgniteSQLException {
+        if (tbl.cacheInfo().config().getCacheMode() == CacheMode.LOCAL)
             throw new IgniteSQLException("DDL statements are not supported on 
LOCAL caches",
                 IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2c13a015/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDynamicLoadOnClientTest.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDynamicLoadOnClientTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDynamicLoadOnClientTest.java
index 5cc559e..4fbb139 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDynamicLoadOnClientTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDynamicLoadOnClientTest.java
@@ -24,6 +24,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Collection;
+import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.QueryEntity;
 import org.apache.ignite.cache.QueryIndex;
@@ -55,15 +56,15 @@ public class GridCacheDynamicLoadOnClientTest extends 
GridCommonAbstractTest {
     /** Full table name. */
     private static final String FULL_TABLE_NAME = PERSON_SCHEMA + "." + 
PERSON_CACHE;
 
-    /** Number of nodes. */
-    private static final int NODES = 2;
-
     /** Client or server mode for configuration. */
     protected boolean client;
 
     /** Instance of client node. */
     private static IgniteEx clientNode;
 
+    /** Instance of client node. */
+    private static IgniteEx srvNode;
+
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
         return 
super.getConfiguration(igniteInstanceName).setClientMode(client);
@@ -75,11 +76,11 @@ public class GridCacheDynamicLoadOnClientTest extends 
GridCommonAbstractTest {
 
         client = false;
 
-        startGridsMultiThreaded(NODES - 1);
+        srvNode = (IgniteEx)startGridsMultiThreaded(1);
 
         client = true;
 
-        clientNode = startGrid(NODES - 1);
+        clientNode = startGrid(1);
     }
 
     /** {@inheritDoc} */
@@ -137,7 +138,7 @@ public class GridCacheDynamicLoadOnClientTest extends 
GridCommonAbstractTest {
 
         SqlFieldsQuery qry = new SqlFieldsQuery("SELECT * FROM " + 
FULL_TABLE_NAME);
 
-        Assert.assertEquals(CACHE_ELEMENT_COUNT - 1, 
clientNode.cache(PERSON_CACHE).query(qry).getAll().size());
+        Assert.assertEquals(CACHE_ELEMENT_COUNT - 1, 
getDefaultCacheOnClient().query(qry).getAll().size());
     }
 
     /**
@@ -156,7 +157,7 @@ public class GridCacheDynamicLoadOnClientTest extends 
GridCommonAbstractTest {
 
         SqlFieldsQuery qry = new SqlFieldsQuery("SELECT * FROM " + 
FULL_TABLE_NAME);
 
-        Assert.assertEquals(CACHE_ELEMENT_COUNT + 1, 
clientNode.cache(PERSON_CACHE).query(qry).getAll().size());
+        Assert.assertEquals(CACHE_ELEMENT_COUNT + 1, 
getDefaultCacheOnClient().query(qry).getAll().size());
     }
 
     /**
@@ -174,7 +175,7 @@ public class GridCacheDynamicLoadOnClientTest extends 
GridCommonAbstractTest {
 
         SqlFieldsQuery qry = new SqlFieldsQuery("SELECT * FROM " + 
FULL_TABLE_NAME + " WHERE name = 'new_name'");
 
-        Assert.assertEquals(CACHE_ELEMENT_COUNT, 
clientNode.cache(PERSON_CACHE).query(qry).getAll().size());
+        Assert.assertEquals(CACHE_ELEMENT_COUNT, 
getDefaultCacheOnClient().query(qry).getAll().size());
     }
 
     /**
@@ -203,12 +204,32 @@ public class GridCacheDynamicLoadOnClientTest extends 
GridCommonAbstractTest {
     }
 
     /**
+     * Test DDL operation for not started cache on client node.
+     */
+    public void testCreateIdxOnClient() {
+        getDefaultCacheOnClient().query(new SqlFieldsQuery("CREATE INDEX 
IDX_11 ON " + FULL_TABLE_NAME + " (name asc)")).getAll();
+    }
+
+    /**
+     * Test DDL operation for not started cache on client node.
+     */
+    public void testDropIdxOnClient() {
+        srvNode.getOrCreateCache(DEFAULT_CACHE_NAME).query(new 
SqlFieldsQuery("CREATE INDEX IDX_TST ON " + FULL_TABLE_NAME + " (name 
desc)")).getAll();
+
+        //Due to client receive created index asynchronously we need add the 
ugly sleep.
+        doSleep(2000);
+
+        getDefaultCacheOnClient().query(new SqlFieldsQuery("DROP INDEX " + 
PERSON_SCHEMA + ".IDX_TST")).getAll();
+    }
+
+
+    /**
      * Test from client node to get cache elements through cache API.
      */
     public void testClientSqlFieldsQuery() {
         SqlFieldsQuery qry = new SqlFieldsQuery("SELECT * FROM " + 
FULL_TABLE_NAME);
 
-        Assert.assertEquals(CACHE_ELEMENT_COUNT, 
clientNode.cache(PERSON_CACHE).query(qry).getAll().size());
+        Assert.assertEquals(CACHE_ELEMENT_COUNT, 
getDefaultCacheOnClient().query(qry).getAll().size());
     }
 
     /**
@@ -217,16 +238,20 @@ public class GridCacheDynamicLoadOnClientTest extends 
GridCommonAbstractTest {
     public void testClientSqlQuery() {
         SqlQuery<Integer, Person> qry = new SqlQuery<>(PERSON_CACHE, "FROM " + 
PERSON_CACHE);
 
-        Assert.assertEquals(CACHE_ELEMENT_COUNT,
-            clientNode.cache(PERSON_CACHE).query(qry).getAll().size());
+        Assert.assertEquals(CACHE_ELEMENT_COUNT, 
clientNode.getOrCreateCache(PERSON_CACHE).query(qry).getAll().size());
+    }
+
+    /**
+     * @return Default cache on client node.
+     */
+    private IgniteCache getDefaultCacheOnClient() {
+        return clientNode.getOrCreateCache(DEFAULT_CACHE_NAME);
     }
 
     /**
      * Create cache at server node and put some values into the cache.
      */
     private void createAndFillServerCache() {
-        IgniteEx srvNode = grid(0);
-
         srvNode.createCache(cacheConfiguration());
 
         for (int i = 0; i < CACHE_ELEMENT_COUNT; i++)
@@ -246,9 +271,8 @@ public class GridCacheDynamicLoadOnClientTest extends 
GridCommonAbstractTest {
         person.setKeyType(Integer.class.getName());
         person.setValueType(Person.class.getName());
         person.addQueryField("orgId", Integer.class.getName(), null);
-        person.addQueryField("id", Integer.class.getName(), null);
         person.addQueryField("name", String.class.getName(), null);
-        person.setIndexes(F.asList(new QueryIndex("orgId"), new 
QueryIndex("id"), new QueryIndex("name")));
+        person.setIndexes(F.asList(new QueryIndex("orgId"), new 
QueryIndex("name")));
 
         ccfg.setQueryEntities(F.asList(person));
 
@@ -296,7 +320,7 @@ public class GridCacheDynamicLoadOnClientTest extends 
GridCommonAbstractTest {
          * @param orgId Organization ID.
          * @param name Name.
          */
-        public Person(int orgId, String name) {
+        Person(int orgId, String name) {
             this.orgId = orgId;
             this.name = name;
         }

Reply via email to