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);
+ }
}
/**