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/14 15:31:41 UTC

[2/2] ignite git commit: Designing concurrency for QueryTypeDescriptorImpl.

Designing concurrency for QueryTypeDescriptorImpl.


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

Branch: refs/heads/ignite-4565-ddl
Commit: 86817195b556feb49a9ab8155d9725f29cc9482d
Parents: 65ff0bf
Author: devozerov <vo...@gridgain.com>
Authored: Tue Mar 14 18:31:32 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Tue Mar 14 18:31:32 2017 +0300

----------------------------------------------------------------------
 .../processors/query/GridQueryProcessor.java    |  2 +-
 .../query/QueryTypeDescriptorImpl.java          | 32 ++++++++++++++------
 2 files changed, 23 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/86817195/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 5a13d95..3bdfbdb 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
@@ -1122,7 +1122,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
      * @return Type descriptor.
      * @throws IgniteCheckedException If failed.
      */
-    public QueryTypeDescriptorImpl type(@Nullable String space, String typeName) throws IgniteCheckedException {
+    private QueryTypeDescriptorImpl type(@Nullable String space, String typeName) throws IgniteCheckedException {
         QueryTypeDescriptorImpl type = typesByName.get(new QueryTypeNameKey(space, typeName));
 
         if (type == null || !type.registered())

http://git-wip-us.apache.org/repos/asf/ignite/blob/86817195/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
index 0949b1b..206c37c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
@@ -24,6 +24,7 @@ import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.internal.A;
 import org.apache.ignite.internal.util.typedef.internal.S;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -54,9 +55,12 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor {
     /** Map with upper cased property names to help find properties based on SQL INSERT and MERGE queries. */
     private final Map<String, GridQueryProperty> uppercaseProps = new HashMap<>();
 
+    /** Mutex for operations on indexes. */
+    private final Object idxMux = new Object();
+
     /** */
     @GridToStringInclude
-    private final Map<String, QueryIndexDescriptorImpl> indexes = new HashMap<>();
+    private final Map<String, QueryIndexDescriptorImpl> idxs = new HashMap<>();
 
     /** */
     private QueryIndexDescriptorImpl fullTextIdx;
@@ -194,14 +198,18 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor {
 
     /** {@inheritDoc} */
     @Override public Map<String, GridQueryIndexDescriptor> indexes() {
-        return Collections.<String, GridQueryIndexDescriptor>unmodifiableMap(indexes);
+        synchronized (idxMux) {
+            return Collections.<String, GridQueryIndexDescriptor>unmodifiableMap(idxs);
+        }
     }
 
     /**
      * @return Raw index descriptors.
      */
     public Collection<QueryIndexDescriptorImpl> indexes0() {
-        return indexes.values();
+        synchronized (idxMux) {
+            return new ArrayList<>(idxs.values());
+        }
     }
 
     /** {@inheritDoc} */
@@ -218,12 +226,14 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor {
      * @throws IgniteCheckedException In case of error.
      */
     public QueryIndexDescriptorImpl addIndex(String idxName, QueryIndexType type) throws IgniteCheckedException {
-        QueryIndexDescriptorImpl idx = new QueryIndexDescriptorImpl(this, idxName, type);
+        synchronized (idxMux) {
+            QueryIndexDescriptorImpl idx = new QueryIndexDescriptorImpl(this, idxName, type);
 
-        if (indexes.put(idxName, idx) != null)
-            throw new IgniteCheckedException("Index with name '" + idxName + "' already exists.");
+            if (idxs.put(idxName, idx) != null)
+                throw new IgniteCheckedException("Index with name '" + idxName + "' already exists.");
 
-        return idx;
+            return idx;
+        }
     }
 
     /**
@@ -237,11 +247,13 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor {
      */
     public void addFieldToIndex(String idxName, String field, int orderNum, boolean descending)
         throws IgniteCheckedException {
-        QueryIndexDescriptorImpl desc = indexes.get(idxName);
+        synchronized (idxMux) {
+            QueryIndexDescriptorImpl desc = idxs.get(idxName);
 
-        assert desc != null;
+            assert desc != null;
 
-        desc.addField(field, orderNum, descending);
+            desc.addField(field, orderNum, descending);
+        }
     }
 
     /**