You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2017/03/09 11:05:38 UTC

[3/3] ignite git commit: Creating correct path for index create.

Creating correct path for index create.


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

Branch: refs/heads/ignite-4565-ddl
Commit: f6fa2659d88994f7942f1ac5e1fff65e697ac541
Parents: 19f0568
Author: devozerov <vo...@gridgain.com>
Authored: Thu Mar 9 14:05:27 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Thu Mar 9 14:05:27 2017 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheProcessor.java    | 21 +++++++
 .../cache/query/GridCacheQueryManager.java      | 27 +++++++++
 .../processors/query/GridQueryProcessor.java    | 63 ++++++++++++++++++++
 .../query/h2/ddl/DdlStatementsProcessor.java    |  4 +-
 4 files changed, 113 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f6fa2659/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index b1644d1..868cabf 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -48,6 +48,7 @@ import org.apache.ignite.cache.CacheExistsException;
 import org.apache.ignite.cache.CacheMemoryMode;
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.CacheRebalanceMode;
+import org.apache.ignite.cache.QueryIndex;
 import org.apache.ignite.cache.affinity.AffinityFunction;
 import org.apache.ignite.cache.affinity.AffinityFunctionContext;
 import org.apache.ignite.cache.affinity.AffinityNodeAddressHashResolver;
@@ -150,6 +151,7 @@ import static org.apache.ignite.internal.GridComponent.DiscoveryDataExchangeType
 import static org.apache.ignite.internal.IgniteComponentType.JTA;
 import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_CONSISTENCY_CHECK_SKIPPED;
 import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_TX_CONFIG;
+import static org.apache.ignite.internal.processors.cache.GridCacheUtils.cacheId;
 import static org.apache.ignite.internal.processors.cache.GridCacheUtils.isNearEnabled;
 
 /**
@@ -2514,6 +2516,25 @@ public class GridCacheProcessor extends GridProcessorAdapter {
     }
 
     /**
+     * Dynamically create index.
+     *
+     * @param cacheName Cache name.
+     * @param tblName Table name.
+     * @param idx Index.
+     * @param ifNotExists When set to {@code true} operation will fail if index already exists.
+     * @return Future completed when index is created.
+     */
+    public IgniteInternalFuture<?> dynamicIndexCreate(String cacheName, String tblName, QueryIndex idx,
+        boolean ifNotExists) {
+        IgniteInternalCache cache = cache(cacheName);
+
+        if (cache == null)
+            return new GridFinishedFuture<>(new IgniteException("Cache doesn't exist: " + cacheName));
+
+        return cache.context().queries().createIndex(tblName, idx, ifNotExists);
+    }
+
+    /**
      * @param reqs Requests.
      * @param failIfExists Fail if exists flag.
      * @return Collection of futures.

http://git-wip-us.apache.org/repos/asf/ignite/blob/f6fa2659/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
index 8e3f2a9..28a5886 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
@@ -46,6 +46,7 @@ import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteSystemProperties;
+import org.apache.ignite.cache.QueryIndex;
 import org.apache.ignite.cache.query.QueryMetrics;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.configuration.CacheConfiguration;
@@ -92,6 +93,7 @@ import org.apache.ignite.internal.util.GridEmptyIterator;
 import org.apache.ignite.internal.util.GridLeanMap;
 import org.apache.ignite.internal.util.GridSpiCloseableIteratorWrapper;
 import org.apache.ignite.internal.util.GridSpinBusyLock;
+import org.apache.ignite.internal.util.future.GridFinishedFuture;
 import org.apache.ignite.internal.util.future.GridFutureAdapter;
 import org.apache.ignite.internal.util.lang.GridCloseableIterator;
 import org.apache.ignite.internal.util.lang.GridIterator;
@@ -526,6 +528,31 @@ public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapte
     }
 
     /**
+     * Create index dynamically.
+     *
+     * @param tblName Table name.
+     * @param idx Index.
+     * @param ifNotExists When set to {@code true} operation will fail if index already exists.
+     * @return Future completed when index is created.
+     */
+    public IgniteInternalFuture<?> createIndex(String tblName, QueryIndex idx, boolean ifNotExists) {
+        if (!enterBusy())
+            return new GridFinishedFuture<>(new IgniteException("Failed to create index because " +
+                "local node is stopping."));
+
+        try {
+            return qryProc.createIndex(space, tblName, idx, ifNotExists);
+        }
+        catch (Exception e) {
+            return new GridFinishedFuture<>(
+                new IgniteException("Index creation failed due to unexpected exception.", e));
+        }
+        finally {
+            leaveBusy();
+        }
+    }
+
+    /**
      * Undeploys given class loader.
      *
      * @param ldr Class loader to undeploy.

http://git-wip-us.apache.org/repos/asf/ignite/blob/f6fa2659/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.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 42e7c49..ad900ea 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
@@ -247,6 +247,8 @@ public class GridQueryProcessor extends GridProcessorAdapter {
 
                     TypeDescriptor desc = new TypeDescriptor();
 
+                    desc.space(cctx.name());
+
                     // Key and value classes still can be available if they are primitive or JDK part.
                     // We need that to set correct types for _key and _val columns.
                     Class<?> keyCls = U.classForName(qryEntity.getKeyType(), null);
@@ -363,6 +365,8 @@ public class GridQueryProcessor extends GridProcessorAdapter {
 
                     TypeDescriptor desc = new TypeDescriptor();
 
+                    desc.space(cctx.name());
+
                     // Key and value classes still can be available if they are primitive or JDK part.
                     // We need that to set correct types for _key and _val columns.
                     Class<?> keyCls = U.classForName(meta.getKeyType(), null);
@@ -953,6 +957,25 @@ public class GridQueryProcessor extends GridProcessorAdapter {
     }
 
     /**
+     * Create index.
+     *
+     * @param space Space name.
+     * @param tblName Table name.
+     * @param idx Index.
+     * @param ifNotExists When set to {@code true} operation will fail if index already exists.
+     * @return Future completed when index is created.
+     */
+    public IgniteInternalFuture<?> createIndex(String space, String tblName, QueryIndex idx, boolean ifNotExists) {
+        for (TypeDescriptor desc : types.values()) {
+            if (desc.matchSpaceAndTable(space, tblName))
+                return desc.createIndexAsync(idx, ifNotExists);
+        }
+
+        return new GridFinishedFuture<>(new IgniteException("Failed to create index becase table is not found [" +
+            "space=" + space + ", table=" + tblName + ']'));
+    }
+
+    /**
      * @param sqlQry Sql query.
      * @param params Params.
      */
@@ -2278,6 +2301,9 @@ public class GridQueryProcessor extends GridProcessorAdapter {
      * Descriptor of type.
      */
     private static class TypeDescriptor implements GridQueryTypeDescriptor {
+        /** Space. */
+        private String space;
+
         /** */
         private String name;
 
@@ -2324,6 +2350,20 @@ public class GridQueryProcessor extends GridProcessorAdapter {
         private boolean registered;
 
         /**
+         * @return Space.
+         */
+        String space() {
+            return space;
+        }
+
+        /**
+         * @param space Space.
+         */
+        void space(String space) {
+            this.space = space;
+        }
+
+        /**
          * @return {@code True} if type registration in SPI was finished and type was not rejected.
          */
         boolean registered() {
@@ -2568,6 +2608,29 @@ public class GridQueryProcessor extends GridProcessorAdapter {
             this.affKey = affKey;
         }
 
+        /**
+         * Check whether space and table name matches.
+         *
+         * @param space Space.
+         * @param tblName Table name.
+         * @return {@code True} if matches.
+         */
+        public boolean matchSpaceAndTable(String space, String tblName) {
+            return F.eq(space, this.space) && F.eq(tblName, this.tblName);
+        }
+
+        /**
+         * Initiate asynchronous index creation.
+         *
+         * @param idx Index description.
+         * @param ifNotExists When set to {@code true} operation will fail if index already exists.
+         * @return Future completed when index is created.
+         */
+        public IgniteInternalFuture<?> createIndexAsync(QueryIndex idx, boolean ifNotExists) {
+            // TODO
+            return null;
+        }
+
         /** {@inheritDoc} */
         @Override public String toString() {
             return S.toString(TypeDescriptor.class, this);

http://git-wip-us.apache.org/repos/asf/ignite/blob/f6fa2659/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 1c558c5..d13feb2 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
@@ -185,7 +185,7 @@ public class DdlStatementsProcessor {
             res.setOperationId(msg.operation().operationId());
             res.setError(exceptionToBytes(ex));
 
-            ctx.io().send(snd, GridTopic.TOPIC_QUERY, res, GridIoPolicy.IDX_POOL);
+            ctx.io().sendToGridTopic(snd, GridTopic.TOPIC_QUERY, res, GridIoPolicy.IDX_POOL);
         }
         catch (Throwable e) {
             U.error(log, "Failed to notify coordinator about local DLL operation completion [opId=" +
@@ -270,7 +270,7 @@ public class DdlStatementsProcessor {
         res.setOperationId(args.operationId());
 
         try {
-            ctx.io().send(args.clientNodeId(), GridTopic.TOPIC_QUERY, res, GridIoPolicy.IDX_POOL);
+            ctx.io().sendToGridTopic(args.clientNodeId(), GridTopic.TOPIC_QUERY, res, GridIoPolicy.IDX_POOL);
         }
         catch (IgniteCheckedException e) {
             U.error(log, "Failed to notify client node about DDL operation failure " +