Finished refactoring.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/a4d01a63 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a4d01a63 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a4d01a63 Branch: refs/heads/ignite-4565-ddl Commit: a4d01a632506b82a1cedb9538a843229feb543be Parents: 20bd9ed Author: devozerov <[email protected]> Authored: Thu Mar 9 17:03:38 2017 +0300 Committer: devozerov <[email protected]> Committed: Thu Mar 9 17:03:38 2017 +0300 ---------------------------------------------------------------------- .../processors/query/GridQueryProcessor.java | 2 +- .../processors/query/QueryIndexHandler.java | 6 +- .../query/QueryTypeDescriptorImpl.java | 69 +++++++++++++++++--- 3 files changed, 65 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/a4d01a63/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 65d26dd..f2def38 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 @@ -959,7 +959,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { * @return Future completed when index is created. */ public IgniteInternalFuture<?> createIndex(String space, String tblName, QueryIndex idx, boolean ifNotExists) { - for (TypeDescriptor desc : types.values()) { + for (QueryTypeDescriptorImpl desc : types.values()) { if (desc.matchSpaceAndTable(space, tblName)) return desc.dynamicIndexCreate(idx, ifNotExists); } http://git-wip-us.apache.org/repos/asf/ignite/blob/a4d01a63/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryIndexHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryIndexHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryIndexHandler.java index 4edb07d..7585dbb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryIndexHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryIndexHandler.java @@ -18,7 +18,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; */ public class QueryIndexHandler { /** Indexes. */ - private final Map<String, GridQueryProcessor.IndexDescriptor> idxs = new ConcurrentHashMap<>(); + private final Map<String, QueryIndexDescriptorImpl> idxs = new ConcurrentHashMap<>(); /** Client futures. */ private final Map<UUID, GridFutureAdapter> cliFuts = new ConcurrentHashMap<>(); @@ -31,7 +31,7 @@ public class QueryIndexHandler { * * @param idxs Indexes. */ - public void onInitialStateReady(Map<String, GridQueryProcessor.IndexDescriptor> idxs) { + public void onInitialStateReady(Map<String, QueryIndexDescriptorImpl> idxs) { this.idxs.putAll(idxs); } @@ -48,7 +48,7 @@ public class QueryIndexHandler { try { String idxName = idx.getName() != null ? idx.getName() : QueryEntity.defaultIndexName(idx); - GridQueryProcessor.IndexDescriptor oldIdx = idxs.get(idxName); + QueryIndexDescriptorImpl oldIdx = idxs.get(idxName); if (oldIdx != null) { if (ifNotExists) http://git-wip-us.apache.org/repos/asf/ignite/blob/a4d01a63/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 f22cc11..5b8efcc 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 @@ -18,9 +18,12 @@ package org.apache.ignite.internal.processors.query; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.cache.QueryIndex; import org.apache.ignite.cache.QueryIndexType; +import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.tostring.GridToStringInclude; +import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.S; @@ -33,6 +36,9 @@ import java.util.Map; * Descriptor of type. */ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor { + /** Space. */ + private String space; + /** */ private String name; @@ -54,6 +60,9 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor { @GridToStringInclude private final Map<String, QueryIndexDescriptorImpl> indexes = new HashMap<>(); + /** Index state manager. */ + private final QueryIndexHandler idxState = new QueryIndexHandler(); + /** */ private QueryIndexDescriptorImpl fullTextIdx; @@ -79,6 +88,20 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor { private boolean registered; /** + * @return Space. + */ + public String space() { + return space; + } + + /** + * @param space Space. + */ + public void space(String space) { + this.space = space; + } + + /** * @return {@code True} if type registration in SPI was finished and type was not rejected. */ public boolean registered() { @@ -177,6 +200,11 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor { return Collections.<String, GridQueryIndexDescriptor>unmodifiableMap(indexes); } + /** {@inheritDoc} */ + @Override public GridQueryIndexDescriptor textIndex() { + return fullTextIdx; + } + /** * Adds index. * @@ -203,12 +231,11 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor { * @param descending Sorting order. * @throws IgniteCheckedException If failed. */ - public void addFieldToIndex(String idxName, String field, int orderNum, - boolean descending) throws IgniteCheckedException { + public void addFieldToIndex(String idxName, String field, int orderNum, boolean descending) + throws IgniteCheckedException { QueryIndexDescriptorImpl desc = indexes.get(idxName); - if (desc == null) - desc = addIndex(idxName, QueryIndexType.SORTED); + assert desc != null; desc.addField(field, orderNum, descending); } @@ -219,12 +246,9 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor { * @param field Field name. */ public void addFieldToTextIndex(String field) { - if (fullTextIdx == null) { + if (fullTextIdx == null) fullTextIdx = new QueryIndexDescriptorImpl(QueryIndexType.FULLTEXT); - indexes.put(null, fullTextIdx); - } - fullTextIdx.addField(field, 0, false); } @@ -330,6 +354,35 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor { 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); + } + + /** + * Callback invoked when initial type state is ready. + */ + public void onInitialStateReady() { + idxState.onInitialStateReady(indexes); + } + + /** + * 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<?> dynamicIndexCreate(QueryIndex idx, boolean ifNotExists) { + return idxState.onCreateIndex(idx, ifNotExists); + } + /** {@inheritDoc} */ @Override public String toString() { return S.toString(QueryTypeDescriptorImpl.class, this);
