IGNITE-3421: Add ability to configure maxIterCnt property in GridCacheQueryManager. - Fixes #1055.
Signed-off-by: shtykh_roman <rsht...@yahoo.com> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/2474e2b3 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/2474e2b3 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/2474e2b3 Branch: refs/heads/ignite-3909 Commit: 2474e2b331da34e16acc7a69c4703335e67b142e Parents: 0dc9713 Author: shtykh_roman <rsht...@yahoo.com> Authored: Thu Sep 15 10:40:38 2016 +0900 Committer: agura <ag...@apache.org> Committed: Thu Sep 15 14:12:26 2016 +0300 ---------------------------------------------------------------------- .../configuration/CacheConfiguration.java | 35 ++++++++++++++++++-- .../cache/query/GridCacheQueryManager.java | 13 +++----- ...gniteCacheReplicatedFieldsQuerySelfTest.java | 6 ++-- .../IgniteCacheReplicatedQuerySelfTest.java | 4 +-- 4 files changed, 42 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/2474e2b3/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java index 64b7e1f..e28aad5 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java @@ -191,6 +191,9 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> { /** Default batch size for write-behind cache store. */ public static final int DFLT_WRITE_BEHIND_BATCH_SIZE = 512; + /** Default maximum number of query iterators that can be stored. */ + public static final int DFLT_MAX_QUERY_ITERATOR_CNT = 1024; + /** Default value for load previous value flag. */ public static final boolean DFLT_LOAD_PREV_VAL = false; @@ -209,7 +212,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> { /** Default size for onheap SQL row cache size. */ public static final int DFLT_SQL_ONHEAP_ROW_CACHE_SIZE = 10 * 1024; - /** Default value for keep binary in store behavior .*/ + /** Default value for keep binary in store behavior . */ @SuppressWarnings({"UnnecessaryBoxing", "BooleanConstructorCall"}) public static final Boolean DFLT_STORE_KEEP_BINARY = new Boolean(false); @@ -334,6 +337,9 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> { /** Maximum batch size for write-behind cache store. */ private int writeBehindBatchSize = DFLT_WRITE_BEHIND_BATCH_SIZE; + /** Maximum number of query iterators that can be stored. */ + private int maxQryIterCnt = DFLT_MAX_QUERY_ITERATOR_CNT; + /** Memory mode. */ private CacheMemoryMode memMode = DFLT_MEMORY_MODE; @@ -886,7 +892,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> { /** * Sets factory for persistent storage for cache data. - + * * @param storeFactory Cache store factory. * @return {@code this} for chaining. */ @@ -1632,6 +1638,31 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> { } /** + * Gets maximum number of query iterators that can be stored. Iterators are stored to + * support query pagination when each page of data is sent to user's node only on demand. + * Increase this property if you are running and processing lots of queries in parallel. + * <p> + * Default value is {@link #DFLT_MAX_QUERY_ITERATOR_CNT}. + * + * @return Maximum number of query iterators that can be stored. + */ + public int getMaxQueryIteratorsCount() { + return maxQryIterCnt; + } + + /** + * Sets maximum number of query iterators that can be stored. + * + * @param maxQryIterCnt Maximum number of query iterators that can be stored. + * @return {@code this} for chaining. + */ + public CacheConfiguration<K, V> setMaxQueryIteratorsCount(int maxQryIterCnt) { + this.maxQryIterCnt = maxQryIterCnt; + + return this; + } + + /** * Gets memory mode for cache. Memory mode helps control whether value is stored in on-heap memory, * off-heap memory, or swap space. Refer to {@link CacheMemoryMode} for more info. * <p> http://git-wip-us.apache.org/repos/asf/ignite/blob/2474e2b3/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 454ce04..9699f09 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 @@ -135,9 +135,6 @@ import static org.apache.ignite.internal.processors.cache.query.GridCacheQueryTy @SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized") public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapter<K, V> { /** */ - public static int MAX_ITERATORS = 1000; - - /** */ protected GridQueryProcessor qryProc; /** */ @@ -176,7 +173,7 @@ public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapte @Override public void start0() throws IgniteCheckedException { qryProc = cctx.kernalContext().query(); space = cctx.name(); - maxIterCnt = MAX_ITERATORS; + maxIterCnt = cctx.config().getMaxQueryIteratorsCount(); lsnr = new GridLocalEventListener() { @Override public void onEvent(Event evt) { @@ -557,7 +554,7 @@ public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapte throw new IgniteCheckedException("Received next page request after iterator was removed. " + "Consider increasing maximum number of stored iterators (see " + - "GridCacheConfiguration.getMaximumQueryIteratorCount() configuration property)."); + "CacheConfiguration.getMaxQueryIteratorsCount() configuration property)."); } QueryResult<K, V> res; @@ -698,7 +695,7 @@ public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapte throw new IgniteCheckedException("Received next page request after iterator was removed. " + "Consider increasing maximum number of stored iterators (see " + - "GridCacheConfiguration.getMaximumQueryIteratorCount() configuration property)."); + "CacheConfiguration.getMaxQueryIteratorsCount() configuration property)."); } if (qry.type() == SQL_FIELDS) { @@ -1654,7 +1651,6 @@ public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapte else data.add(!loc ? new GridCacheQueryResponseEntry<>(key, val) : F.t(key, val)); - if (!loc) { if (++cnt == pageSize || !iter.hasNext()) { boolean finished = !iter.hasNext(); @@ -1815,10 +1811,9 @@ public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapte if (qry.keepBinary()) entry = cctx.cache().keepBinary().getEntry(next.getKey()); - else + else entry = cctx.cache().getEntry(next.getKey()); - return transform.apply(entry); } http://git-wip-us.apache.org/repos/asf/ignite/blob/2474e2b3/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedFieldsQuerySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedFieldsQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedFieldsQuerySelfTest.java index a01a3ff..4ec840c 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedFieldsQuerySelfTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedFieldsQuerySelfTest.java @@ -24,8 +24,8 @@ import org.apache.ignite.IgniteException; import org.apache.ignite.cache.CacheMode; import org.apache.ignite.cache.query.QueryCursor; import org.apache.ignite.cache.query.SqlFieldsQuery; +import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.internal.processors.cache.IgniteCacheAbstractFieldsQuerySelfTest; -import org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager; import org.apache.ignite.testframework.GridTestUtils; import static org.apache.ignite.cache.CacheMode.REPLICATED; @@ -52,11 +52,11 @@ public class IgniteCacheReplicatedFieldsQuerySelfTest extends IgniteCacheAbstrac QueryCursor<List<?>> qry = null; - int maximumQueryIteratorCount = GridCacheQueryManager.MAX_ITERATORS; + int maximumQueryIteratorCount = cache.getConfiguration(CacheConfiguration.class).getMaxQueryIteratorsCount(); for (int i = 0; i < maximumQueryIteratorCount + 1; i++) { QueryCursor<List<?>> q = cache - .query(new SqlFieldsQuery("select _key from Integer where _key >= 0 order by _key")); + .query(new SqlFieldsQuery("select _key from Integer where _key >= 0 order by _key")); assertEquals(0, q.iterator().next().get(0)); http://git-wip-us.apache.org/repos/asf/ignite/blob/2474e2b3/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedQuerySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedQuerySelfTest.java index e462cce..06adb68 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedQuerySelfTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedQuerySelfTest.java @@ -37,13 +37,13 @@ import org.apache.ignite.cache.CacheMode; import org.apache.ignite.cache.query.QueryCursor; import org.apache.ignite.cache.query.SqlQuery; import org.apache.ignite.cache.query.annotations.QuerySqlField; +import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.events.DiscoveryEvent; import org.apache.ignite.events.Event; import org.apache.ignite.events.EventType; import org.apache.ignite.internal.IgniteKernal; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.IgniteCacheAbstractQuerySelfTest; -import org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager; import org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing; import org.apache.ignite.internal.util.future.GridFutureAdapter; import org.apache.ignite.internal.util.lang.GridCloseableIterator; @@ -325,7 +325,7 @@ public class IgniteCacheReplicatedQuerySelfTest extends IgniteCacheAbstractQuery QueryCursor<Cache.Entry<Integer, Integer>> fut = null; - for (int i = 0; i < GridCacheQueryManager.MAX_ITERATORS + 1; i++) { + for (int i = 0; i < cache.getConfiguration(CacheConfiguration.class).getMaxQueryIteratorsCount() + 1; i++) { QueryCursor<Cache.Entry<Integer, Integer>> q = cache.query(new SqlQuery<Integer, Integer>(Integer.class, "_key >= 0 order by _key"));