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/master
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"));
 

Reply via email to