You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2015/07/30 19:19:57 UTC

[19/25] incubator-usergrid git commit: Configures thread pool

Configures thread pool


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

Branch: refs/heads/master
Commit: bbd563787b07a9bbc2f4a1647573a8c8ffedbc6e
Parents: 9a92fcc
Author: Todd Nine <tn...@apigee.com>
Authored: Wed Jul 8 14:46:56 2015 -0600
Committer: Todd Nine <tn...@apigee.com>
Committed: Wed Jul 8 14:46:56 2015 -0600

----------------------------------------------------------------------
 .../main/resources/usergrid-default.properties  |  3 +
 .../src/test/resources/usergrid-test.properties |  3 +
 .../cassandra/EntityManagerFactoryImpl.java     |  2 +-
 .../cassandra/EntityManagerImpl.java            |  5 +-
 .../cassandra/QueryExecutorService.java         | 31 +++++++
 .../cassandra/QueryExecutorServiceImpl.java     | 95 ++++++++++++++++++++
 .../persistence/cassandra/QueryProcessor.java   | 31 +------
 .../cassandra/RelationManagerImpl.java          | 14 +--
 .../query/ir/result/GatherIterator.java         |  1 -
 .../main/resources/usergrid-core-context.xml    |  5 ++
 .../cassandra/QueryProcessorTest.java           | 44 ++++-----
 11 files changed, 176 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bbd56378/stack/config/src/main/resources/usergrid-default.properties
----------------------------------------------------------------------
diff --git a/stack/config/src/main/resources/usergrid-default.properties b/stack/config/src/main/resources/usergrid-default.properties
index 1aeb67f..27dbf4b 100644
--- a/stack/config/src/main/resources/usergrid-default.properties
+++ b/stack/config/src/main/resources/usergrid-default.properties
@@ -70,6 +70,9 @@ cassandra.lock.keyspace=Locks
 # false to disable test features
 usergrid.test=false
 
+#Number of threads to allow concurrent querying of Cassandra
+usergrid.query.threadcount=100
+
 #Properties to control the number of buckets in the index.
 usergrid.index.defaultbucketsize=20
 usergrid.counter.skipAggregate=false

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bbd56378/stack/config/src/test/resources/usergrid-test.properties
----------------------------------------------------------------------
diff --git a/stack/config/src/test/resources/usergrid-test.properties b/stack/config/src/test/resources/usergrid-test.properties
index 6b7cfff..c4536bd 100644
--- a/stack/config/src/test/resources/usergrid-test.properties
+++ b/stack/config/src/test/resources/usergrid-test.properties
@@ -44,6 +44,9 @@ cassandra.keyspace.strategy=org.apache.cassandra.locator.SimpleStrategy
 
 cassandra.keyspace.replication=1
 
+#Our embedded cassandra can't handle the load.  Limit the concurrent queries to keep from pushing it over
+usergrid.query.threadcount=5
+
 cassandra.username=
 cassandra.password=
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bbd56378/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImpl.java b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImpl.java
index 53ccf40..421b286 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImpl.java
@@ -144,7 +144,7 @@ public class EntityManagerFactoryImpl implements EntityManagerFactory, Applicati
 
     private EntityManager _getEntityManager( UUID applicationId ) {
         //EntityManagerImpl em = new EntityManagerImpl();
-        EntityManager em = applicationContext.getBean( "entityManager", EntityManager.class );
+        EntityManager  em = applicationContext.getBean( "entityManager", EntityManager.class );
         //em.init(this,cass,counterUtils,applicationId, skipAggregateCounters);
         em.setApplicationId( applicationId );
         return em;

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bbd56378/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerImpl.java b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerImpl.java
index 51383c2..370caa6 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerImpl.java
@@ -193,6 +193,9 @@ public class EntityManagerImpl implements EntityManager {
     @Resource
     private IndexBucketLocator indexBucketLocator;
 
+    @Resource
+    private QueryExecutorService queryExecutorService;
+
     private UUID applicationId;
 
     private Application application;
@@ -270,7 +273,7 @@ public class EntityManagerImpl implements EntityManager {
     public RelationManagerImpl getRelationManager( EntityRef entityRef ) {
         //RelationManagerImpl rmi = applicationContext.getBean(RelationManagerImpl.class);
         RelationManagerImpl rmi = new RelationManagerImpl();
-        rmi.init( this, cass, applicationId, entityRef, indexBucketLocator );
+        rmi.init( this, cass, queryExecutorService,  applicationId, entityRef, indexBucketLocator );
         return rmi;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bbd56378/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/QueryExecutorService.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/QueryExecutorService.java b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/QueryExecutorService.java
new file mode 100644
index 0000000..07105b0
--- /dev/null
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/QueryExecutorService.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.usergrid.persistence.cassandra;
+
+
+import java.util.concurrent.ExecutorService;
+
+
+public interface QueryExecutorService {
+
+    /**
+     * Get the executor service
+     * @return
+     */
+    ExecutorService getExecutor();
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bbd56378/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/QueryExecutorServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/QueryExecutorServiceImpl.java b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/QueryExecutorServiceImpl.java
new file mode 100644
index 0000000..7376641
--- /dev/null
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/QueryExecutorServiceImpl.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.usergrid.persistence.cassandra;
+
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.RejectedExecutionHandler;
+import java.util.concurrent.SynchronousQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ *
+ */
+public class QueryExecutorServiceImpl implements QueryExecutorService {
+
+
+    //we set up a thread pool with 100 execution threads.  We purposefully use a synchronous queue and a caller runs so that we simply reject and immediately execute tasks if all 100 threads are occupied.
+
+
+
+    //we make this static, we only want 1 instance of this service in the JVM.  Otherwise tests fail
+
+    private int threadCount;
+
+    private static ExecutorService executorService;
+
+
+    @Override
+    public ExecutorService getExecutor() {
+        if(executorService == null){
+            return getExecutorService();
+        }
+
+        return executorService;
+    }
+
+
+    public void setThreadCount( final int threadCount ) {
+        this.threadCount = threadCount;
+    }
+
+
+    /**
+     * Internally synchronized creation
+     * @return
+     */
+    private synchronized ExecutorService getExecutorService(){
+       if(executorService != null){
+           return executorService;
+       }
+
+
+        executorService = new ThreadPoolExecutor( threadCount, threadCount, 30, TimeUnit.SECONDS, new SynchronousQueue<Runnable>( ), new CallerRunsExecutionHandler() );
+        return executorService;
+    }
+
+
+    /**
+     * Execution handler that will run threads in the caller
+     */
+    private static class CallerRunsExecutionHandler implements RejectedExecutionHandler {
+
+        private static final Logger logger = LoggerFactory.getLogger( CallerRunsExecutionHandler.class );
+
+        @Override
+        public void rejectedExecution( final Runnable r, final ThreadPoolExecutor executor ) {
+            //when a task is rejected due to back pressure, we just want to run it in the caller.
+
+            logger.warn( "Concurrent shard execution rejected the task in executor {}, running it in the caller thread", executor );
+
+            r.run();
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bbd56378/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/QueryProcessor.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/QueryProcessor.java b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/QueryProcessor.java
index a2e0f60..10f4fa5 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/QueryProcessor.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/QueryProcessor.java
@@ -22,12 +22,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Stack;
 import java.util.UUID;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.RejectedExecutionHandler;
-import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -93,11 +87,7 @@ public class QueryProcessor {
     private final CollectionInfo collectionInfo;
     private final EntityManager em;
     private final ResultsLoaderFactory loaderFactory;
-
-    //we set up a thread pool with 100 execution threads.  We purposefully use a synchronous queue and a caller runs so that we simply reject and immediately execute tasks if all 100 threads are occupied.
-
-    //we make this static, we only want 1 instance of this service in the JVM.  Otherwise tests fail
-    private static final ExecutorService executorService = new ThreadPoolExecutor( 100, 100, 30, TimeUnit.SECONDS, new SynchronousQueue<Runnable>( ), new CallerRunsExecutionHandler() );
+    private final QueryExecutorService executorService;
 
     private Operand rootOperand;
     private List<SortPredicate> sorts;
@@ -110,11 +100,12 @@ public class QueryProcessor {
     private int sliceCount;
 
 
-    public QueryProcessor( Query query, CollectionInfo collectionInfo, EntityManager em,
+    public QueryProcessor(  EntityManager em, QueryExecutorService executorService, Query query, CollectionInfo collectionInfo,
                            ResultsLoaderFactory loaderFactory ) throws PersistenceException {
         setQuery( query );
         this.collectionInfo = collectionInfo;
         this.em = em;
+        this.executorService = executorService;
         this.loaderFactory = loaderFactory;
         process();
     }
@@ -281,7 +272,7 @@ public class QueryProcessor {
         //use the gather iterator to collect all the          '
         final int resultSetSize = Math.min( size, Query.MAX_LIMIT );
 
-        ResultIterator itr = new GatherIterator(resultSetSize, rootNode, searchVisitorFactory.createVisitors(), executorService  );
+        ResultIterator itr = new GatherIterator(resultSetSize, rootNode, searchVisitorFactory.createVisitors(), executorService.getExecutor()  );
 
         List<ScanColumn> entityIds = new ArrayList<ScanColumn>( );
 
@@ -696,19 +687,5 @@ public class QueryProcessor {
     }
 
 
-    private static class CallerRunsExecutionHandler implements RejectedExecutionHandler{
-
-        private static final Logger logger = LoggerFactory.getLogger( CallerRunsExecutionHandler.class );
-
-        @Override
-        public void rejectedExecution( final Runnable r, final ThreadPoolExecutor executor ) {
-            //when a task is rejected due to back pressure, we just want to run it in the caller.
-
-            logger.warn( "Concurrent shard execution rejected the task in executor {}, running it in the caller thread", executor );
-
-            r.run();
-        }
-    }
-
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bbd56378/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/RelationManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/RelationManagerImpl.java b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/RelationManagerImpl.java
index 74d1d60..86e1690 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/RelationManagerImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/RelationManagerImpl.java
@@ -127,13 +127,14 @@ public class RelationManagerImpl implements RelationManager {
     private UUID applicationId;
     private EntityRef headEntity;
     private IndexBucketLocator indexBucketLocator;
+    private QueryExecutorService executorService;
 
 
     public RelationManagerImpl() {
     }
 
 
-    public RelationManagerImpl init( EntityManagerImpl em, CassandraService cass, UUID applicationId,
+    public RelationManagerImpl init( EntityManagerImpl em, CassandraService cass,  QueryExecutorService executorService, UUID applicationId,
                                      EntityRef headEntity, IndexBucketLocator indexBucketLocator ) {
 
         Assert.notNull( em, "Entity manager cannot be null" );
@@ -148,6 +149,7 @@ public class RelationManagerImpl implements RelationManager {
         this.cass = cass;
         this.headEntity = headEntity;
         this.indexBucketLocator = indexBucketLocator;
+        this.executorService = executorService;
 
         return this;
     }
@@ -155,7 +157,7 @@ public class RelationManagerImpl implements RelationManager {
 
     private RelationManagerImpl getRelationManager( EntityRef headEntity ) {
         RelationManagerImpl rmi = new RelationManagerImpl();
-        rmi.init( em, cass, applicationId, headEntity, indexBucketLocator );
+        rmi.init( em,  cass, executorService, applicationId, headEntity, indexBucketLocator );
         return rmi;
     }
 
@@ -1711,7 +1713,7 @@ public class RelationManagerImpl implements RelationManager {
 
         // we have something to search with, visit our tree and evaluate the
         // results
-        QueryProcessor qp = new QueryProcessor( query, collection, em, factory );
+        QueryProcessor qp = new QueryProcessor(  em, executorService, query, collection, factory );
 
         CollectionSearchVisitorFactory collectionSearchVisitorFactory = new CollectionSearchVisitorFactory( cass, indexBucketLocator, qp, applicationId, headEntity, collectionName );
 //        SearchCollectionVisitor visitor = new SearchCollectionVisitor( this, qp );
@@ -1903,7 +1905,7 @@ public class RelationManagerImpl implements RelationManager {
 
         final ConnectionResultsLoaderFactory factory = new ConnectionResultsLoaderFactory( connectionRef );
 
-        QueryProcessor qp = new QueryProcessor( query, null, em, factory );
+        QueryProcessor qp = new QueryProcessor(  em, executorService, query, null,factory );
 
         ConnectionSearchVisitorFactory collectionSearchVisitorFactory = new ConnectionSearchVisitorFactory( cass, indexBucketLocator, qp, applicationId, headEntity, connectionRef, true, "" );
 
@@ -1946,7 +1948,7 @@ public class RelationManagerImpl implements RelationManager {
                 new ConnectionRefImpl( new SimpleEntityRef( connectedEntityType, null ), connectionType, targetEntity );
         final ConnectionResultsLoaderFactory factory = new ConnectionResultsLoaderFactory( connectionRef );
 
-        QueryProcessor qp = new QueryProcessor( query, null, em, factory );
+        QueryProcessor qp = new QueryProcessor(  em, executorService, query, null, factory );
 
 
         ConnectionSearchVisitorFactory collectionSearchVisitorFactory = new ConnectionSearchVisitorFactory( cass, indexBucketLocator, qp, applicationId, headEntity, connectionRef, false, "" );
@@ -1987,7 +1989,7 @@ public class RelationManagerImpl implements RelationManager {
 
         final ConnectionResultsLoaderFactory factory = new ConnectionResultsLoaderFactory( connectionRef );
 
-        QueryProcessor qp = new QueryProcessor( query, null, em, factory );
+        QueryProcessor qp = new QueryProcessor(em, executorService, query, null,  factory );
 
         ConnectionSearchVisitorFactory collectionSearchVisitorFactory = new ConnectionSearchVisitorFactory( cass, indexBucketLocator, qp, applicationId, headEntity, connectionRef, true, "" );
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bbd56378/stack/core/src/main/java/org/apache/usergrid/persistence/query/ir/result/GatherIterator.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/query/ir/result/GatherIterator.java b/stack/core/src/main/java/org/apache/usergrid/persistence/query/ir/result/GatherIterator.java
index 4187ae0..36104f9 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/query/ir/result/GatherIterator.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/query/ir/result/GatherIterator.java
@@ -181,7 +181,6 @@ public class GatherIterator implements ResultIterator {
             }
         }
 
-
         /**
          * Get the set
          */

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bbd56378/stack/core/src/main/resources/usergrid-core-context.xml
----------------------------------------------------------------------
diff --git a/stack/core/src/main/resources/usergrid-core-context.xml b/stack/core/src/main/resources/usergrid-core-context.xml
index 7e69e19..78136ea 100644
--- a/stack/core/src/main/resources/usergrid-core-context.xml
+++ b/stack/core/src/main/resources/usergrid-core-context.xml
@@ -67,6 +67,7 @@
 		<constructor-arg ref="cassandraHostConfigurator" />
 	</bean>
 
+
     <bean id="loadBalancingPolicy" class="me.prettyprint.cassandra.connection.DynamicLoadBalancingPolicy"/>
 
 	<!--  locking for a single node -->	
@@ -196,6 +197,10 @@
 
     <bean id="metricsFactory" class="org.apache.usergrid.metrics.MetricsFactory" scope="singleton"/>
 
+  <bean id="queryExecutorService" class="org.apache.usergrid.persistence.cassandra.QueryExecutorServiceImpl" scope="singleton">
+    <property name="threadCount" value="${usergrid.query.threadcount}"/>
+  </bean>
+
     <!-- scan all job classes -->
     <context:component-scan base-package="org.apache.usergrid.batch.job" />
     <context:annotation-config />

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bbd56378/stack/core/src/test/java/org/apache/usergrid/persistence/cassandra/QueryProcessorTest.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/persistence/cassandra/QueryProcessorTest.java b/stack/core/src/test/java/org/apache/usergrid/persistence/cassandra/QueryProcessorTest.java
index c1fe7ee..4637da8 100644
--- a/stack/core/src/test/java/org/apache/usergrid/persistence/cassandra/QueryProcessorTest.java
+++ b/stack/core/src/test/java/org/apache/usergrid/persistence/cassandra/QueryProcessorTest.java
@@ -62,7 +62,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -88,7 +88,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -114,7 +114,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -140,7 +140,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -166,7 +166,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -192,7 +192,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -221,7 +221,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -250,7 +250,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -279,7 +279,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         WithinNode node = ( WithinNode ) processor.getFirstNode();
 
@@ -310,7 +310,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -361,7 +361,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         OrNode node = ( OrNode ) processor.getFirstNode();
 
@@ -407,7 +407,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         OrNode node = ( OrNode ) processor.getFirstNode();
 
@@ -476,7 +476,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         OrNode rootNode = ( OrNode ) processor.getFirstNode();
 
@@ -553,7 +553,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         AndNode rootNode = ( AndNode ) processor.getFirstNode();
 
@@ -600,7 +600,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         NotNode rootNode = ( NotNode ) processor.getFirstNode();
 
@@ -629,7 +629,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -658,7 +658,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -686,7 +686,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -722,7 +722,7 @@ public class QueryProcessorTest {
 
         Query query = parser.ql().query;
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -757,7 +757,7 @@ public class QueryProcessorTest {
         Query query = parser.ql().query;
         query.setLimit( limit );
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         OrderByNode node = ( OrderByNode ) processor.getFirstNode();
 
@@ -783,7 +783,7 @@ public class QueryProcessorTest {
         Query query = parser.ql().query;
         query.setLimit( limit );
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         SliceNode node = ( SliceNode ) processor.getFirstNode();
 
@@ -811,7 +811,7 @@ public class QueryProcessorTest {
         Query query = parser.ql().query;
         query.setLimit( limit );
 
-        QueryProcessor processor = new QueryProcessor( query, null, null, null );
+        QueryProcessor processor = new QueryProcessor( null, null,  query, null, null );;
 
         QueryNode slice =  processor.getFirstNode();