You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by am...@apache.org on 2015/10/15 02:21:32 UTC

lens git commit: LENS-807 : Set priority in query context after driver decides priority

Repository: lens
Updated Branches:
  refs/heads/master a079ad3f3 -> 5741aee71


LENS-807 : Set priority in query context after driver decides priority


Project: http://git-wip-us.apache.org/repos/asf/lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/5741aee7
Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/5741aee7
Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/5741aee7

Branch: refs/heads/master
Commit: 5741aee71c8aeff595db3cf7116ef51ea30c9a6e
Parents: a079ad3
Author: Rajat Khandelwal <pr...@apache.org>
Authored: Thu Oct 15 05:51:18 2015 +0530
Committer: Amareshwari Sriramadasu <am...@apache.org>
Committed: Thu Oct 15 05:51:18 2015 +0530

----------------------------------------------------------------------
 .../org/apache/lens/driver/hive/HiveDriver.java |  6 +-
 .../apache/lens/driver/hive/TestHiveDriver.java |  9 ++-
 .../lens/server/api/query/QueryContext.java     | 33 ++++++--
 .../lens/server/api/query/MockQueryContext.java | 25 +++++-
 .../api/query/TestAbstractQueryContext.java     | 82 ++++++++------------
 .../api/query/cost/MockQueryCostCalculator.java | 31 ++++++++
 .../priority/MockQueryPriorityDecider.java      | 30 +++++++
 .../lens/server/api/util/TestLensUtil.java      | 24 ++++++
 .../lens/server/common/RestAPITestUtil.java     |  9 ---
 .../server/query/TestQueryEndEmailNotifier.java |  1 +
 .../lens/server/query/TestQueryService.java     |  1 +
 11 files changed, 175 insertions(+), 76 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/5741aee7/lens-driver-hive/src/main/java/org/apache/lens/driver/hive/HiveDriver.java
----------------------------------------------------------------------
diff --git a/lens-driver-hive/src/main/java/org/apache/lens/driver/hive/HiveDriver.java b/lens-driver-hive/src/main/java/org/apache/lens/driver/hive/HiveDriver.java
index 4561ccf..c96ef20 100644
--- a/lens-driver-hive/src/main/java/org/apache/lens/driver/hive/HiveDriver.java
+++ b/lens-driver-hive/src/main/java/org/apache/lens/driver/hive/HiveDriver.java
@@ -533,10 +533,8 @@ public class HiveDriver implements LensDriver {
       if (whetherCalculatePriority) {
         try {
           // Inside try since non-data fetching queries can also be executed by async method.
-          if (ctx.getDriverQueryCost(this) == null) {
-            ctx.setDriverCost(this, queryCostCalculator.calculateCost(ctx, this));
-          }
-          String priority = queryPriorityDecider.decidePriority(ctx.getDriverQueryCost(this)).toString();
+          String priority = ctx.calculateCostAndDecidePriority(this, queryCostCalculator, queryPriorityDecider)
+            .toString();
           qdconf.set("mapred.job.priority", priority);
           log.info("set priority to {}", priority);
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/lens/blob/5741aee7/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestHiveDriver.java
----------------------------------------------------------------------
diff --git a/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestHiveDriver.java b/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestHiveDriver.java
index 2cb3736..fc57c94 100644
--- a/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestHiveDriver.java
+++ b/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestHiveDriver.java
@@ -818,7 +818,7 @@ public class TestHiveDriver {
 
       final Set<FactPartition> partitions = getFactParts(Arrays.asList(kv[0].trim().split("\\s*,\\s*")));
       final Priority expected = Priority.valueOf(kv[1]);
-      AbstractQueryContext ctx = createContext("test priority query", conf);
+      QueryContext ctx = createContext("test priority query", conf);
       ctx.getDriverContext().setDriverRewriterPlan(driver, new DriverQueryPlan() {
 
         @Override
@@ -847,9 +847,10 @@ public class TestHiveDriver {
             }
           });
       }
-      ctx.setDriverCost(driver, driver.queryCostCalculator.calculateCost(ctx, driver));
-      assertEquals(expected, driver.queryPriorityDecider.decidePriority(ctx.getDriverQueryCost(driver)));
-      assertEquals(Priority.NORMAL, alwaysNormalPriorityDecider.decidePriority(ctx.getDriverQueryCost(driver)));
+      assertEquals(ctx.calculateCostAndDecidePriority(driver, driver.queryCostCalculator,
+        driver.queryPriorityDecider), expected);
+      assertEquals(ctx.calculateCostAndDecidePriority(driver, driver.queryCostCalculator,
+        alwaysNormalPriorityDecider), Priority.NORMAL);
       i++;
     }
     // test priority without fact partitions

http://git-wip-us.apache.org/repos/asf/lens/blob/5741aee7/lens-server-api/src/main/java/org/apache/lens/server/api/query/QueryContext.java
----------------------------------------------------------------------
diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/query/QueryContext.java b/lens-server-api/src/main/java/org/apache/lens/server/api/query/QueryContext.java
index ac94207..9b491d1 100644
--- a/lens-server-api/src/main/java/org/apache/lens/server/api/query/QueryContext.java
+++ b/lens-server-api/src/main/java/org/apache/lens/server/api/query/QueryContext.java
@@ -34,6 +34,8 @@ import org.apache.lens.server.api.driver.LensDriver;
 import org.apache.lens.server.api.error.LensException;
 import org.apache.lens.server.api.query.collect.WaitingQueriesSelectionPolicy;
 import org.apache.lens.server.api.query.constraint.QueryLaunchingConstraint;
+import org.apache.lens.server.api.query.cost.QueryCostCalculator;
+import org.apache.lens.server.api.query.priority.QueryPriorityDecider;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
@@ -79,7 +81,8 @@ public class QueryContext extends AbstractQueryContext {
   /**
    * The is driver persistent.
    */
-  @Getter private boolean isDriverPersistent;
+  @Getter
+  private boolean isDriverPersistent;
 
   /**
    * The status.
@@ -201,10 +204,11 @@ public class QueryContext extends AbstractQueryContext {
    * @param drivers All the drivers
    * @param selectedDriver SelectedDriver
    */
-  private QueryContext(String userQuery, String user, LensConf qconf, Configuration conf,
-      Collection<LensDriver> drivers, LensDriver selectedDriver, boolean mergeDriverConf) {
+  QueryContext(String userQuery, String user, LensConf qconf, Configuration conf,
+    Collection<LensDriver> drivers, LensDriver selectedDriver, boolean mergeDriverConf) {
     this(userQuery, user, qconf, conf, drivers, selectedDriver, System.currentTimeMillis(), mergeDriverConf);
   }
+
   /**
    * Instantiates a new query context.
    *
@@ -250,7 +254,7 @@ public class QueryContext extends AbstractQueryContext {
    * @return QueryContext object
    */
   public static QueryContext createContextWithSingleDriver(String query, String user, LensConf qconf,
-      Configuration conf, LensDriver driver, String lensSessionPublicId, boolean mergeDriverConf) {
+    Configuration conf, LensDriver driver, String lensSessionPublicId, boolean mergeDriverConf) {
     QueryContext ctx = new QueryContext(query, user, qconf, conf, Lists.newArrayList(driver), driver, mergeDriverConf);
     ctx.setLensSessionIdentifier(lensSessionPublicId);
     return ctx;
@@ -358,12 +362,12 @@ public class QueryContext extends AbstractQueryContext {
 
   public boolean getCompressOutput() {
     return conf.getBoolean(LensConfConstants.QUERY_OUTPUT_ENABLE_COMPRESSION,
-        LensConfConstants.DEFAULT_OUTPUT_ENABLE_COMPRESSION);
+      LensConfConstants.DEFAULT_OUTPUT_ENABLE_COMPRESSION);
   }
 
   public long getMaxResultSplitRows() {
     return conf.getLong(LensConfConstants.RESULT_SPLIT_MULTIPLE_MAX_ROWS,
-        LensConfConstants.DEFAULT_RESULT_SPLIT_MULTIPLE_MAX_ROWS);
+      LensConfConstants.DEFAULT_RESULT_SPLIT_MULTIPLE_MAX_ROWS);
   }
 
   /**
@@ -373,7 +377,7 @@ public class QueryContext extends AbstractQueryContext {
    */
   public boolean splitResultIntoMultipleFiles() {
     return conf.getBoolean(LensConfConstants.RESULT_SPLIT_INTO_MULTIPLE,
-        LensConfConstants.DEFAULT_RESULT_SPLIT_INTO_MULTIPLE);
+      LensConfConstants.DEFAULT_RESULT_SPLIT_INTO_MULTIPLE);
   }
 
   public String getClusterUser() {
@@ -397,7 +401,7 @@ public class QueryContext extends AbstractQueryContext {
   public void validateTransition(final QueryStatus newStatus) throws LensException {
     if (!this.status.isValidTransition(newStatus.getStatus())) {
       throw new LensException("Invalid state transition:from[" + this.status.getStatus() + " to "
-          + newStatus.getStatus() + "]");
+        + newStatus.getStatus() + "]");
     }
   }
 
@@ -424,4 +428,17 @@ public class QueryContext extends AbstractQueryContext {
   public ImmutableSet<WaitingQueriesSelectionPolicy> getSelectedDriverSelectionPolicies() {
     return getSelectedDriver().getWaitingQuerySelectionPolicies();
   }
+
+  public Priority decidePriority(LensDriver driver, QueryPriorityDecider queryPriorityDecider) throws LensException {
+    priority = queryPriorityDecider.decidePriority(getDriverQueryCost(driver));
+    return priority;
+  }
+
+  public Priority calculateCostAndDecidePriority(LensDriver driver, QueryCostCalculator queryCostCalculator,
+    QueryPriorityDecider queryPriorityDecider) throws LensException {
+    if (getDriverQueryCost(driver) == null) {
+      setDriverCost(driver, queryCostCalculator.calculateCost(this, driver));
+    }
+    return decidePriority(driver, queryPriorityDecider);
+  }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/5741aee7/lens-server-api/src/test/java/org/apache/lens/server/api/query/MockQueryContext.java
----------------------------------------------------------------------
diff --git a/lens-server-api/src/test/java/org/apache/lens/server/api/query/MockQueryContext.java b/lens-server-api/src/test/java/org/apache/lens/server/api/query/MockQueryContext.java
index 3d38eab..12fb4ce 100644
--- a/lens-server-api/src/test/java/org/apache/lens/server/api/query/MockQueryContext.java
+++ b/lens-server-api/src/test/java/org/apache/lens/server/api/query/MockQueryContext.java
@@ -19,19 +19,40 @@
 package org.apache.lens.server.api.query;
 
 import java.util.Collection;
+import java.util.List;
 
 import org.apache.lens.api.LensConf;
 import org.apache.lens.server.api.driver.LensDriver;
+import org.apache.lens.server.api.driver.MockDriver;
+import org.apache.lens.server.api.error.LensException;
 
 import org.apache.hadoop.conf.Configuration;
 
-public class MockQueryContext extends AbstractQueryContext {
+import com.beust.jcommander.internal.Lists;
+
+public class MockQueryContext extends QueryContext {
 
   private static final long serialVersionUID = 1L;
 
   public MockQueryContext(final String query, final LensConf qconf,
     final Configuration conf, final Collection<LensDriver> drivers) {
-    super(query, "testuser", qconf, conf, drivers, false);
+    super(query, "testuser", qconf, conf, drivers, drivers.iterator().next(), false);
+  }
+
+  public MockQueryContext() throws LensException {
+    this(new Configuration());
+  }
+
+  public MockQueryContext(Configuration conf) throws LensException {
+    this("mock query", new LensConf(), conf, getDrivers(conf));
+  }
+
+  public static List<LensDriver> getDrivers(Configuration conf) throws LensException {
+    List<LensDriver> drivers = Lists.newArrayList();
+    MockDriver d = new MockDriver();
+    d.configure(conf);
+    drivers.add(d);
+    return drivers;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/lens/blob/5741aee7/lens-server-api/src/test/java/org/apache/lens/server/api/query/TestAbstractQueryContext.java
----------------------------------------------------------------------
diff --git a/lens-server-api/src/test/java/org/apache/lens/server/api/query/TestAbstractQueryContext.java b/lens-server-api/src/test/java/org/apache/lens/server/api/query/TestAbstractQueryContext.java
index 847d12a..44978f2 100644
--- a/lens-server-api/src/test/java/org/apache/lens/server/api/query/TestAbstractQueryContext.java
+++ b/lens-server-api/src/test/java/org/apache/lens/server/api/query/TestAbstractQueryContext.java
@@ -18,22 +18,22 @@
  */
 package org.apache.lens.server.api.query;
 
+import static org.apache.lens.api.Priority.HIGH;
+import static org.apache.lens.server.api.LensConfConstants.*;
+import static org.apache.lens.server.api.util.TestLensUtil.getConfiguration;
+
+import static org.testng.Assert.*;
+
 import java.io.*;
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
-import java.util.UUID;
 
-import org.apache.lens.api.LensConf;
-import org.apache.lens.server.api.LensConfConstants;
-import org.apache.lens.server.api.driver.LensDriver;
+import org.apache.lens.api.Priority;
 import org.apache.lens.server.api.driver.MockDriver;
 import org.apache.lens.server.api.error.LensException;
 import org.apache.lens.server.api.metrics.LensMetricsRegistry;
+import org.apache.lens.server.api.query.cost.MockQueryCostCalculator;
+import org.apache.lens.server.api.query.priority.MockQueryPriorityDecider;
 
-import org.apache.hadoop.conf.Configuration;
-
-import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.codahale.metrics.MetricRegistry;
@@ -45,59 +45,33 @@ public class TestAbstractQueryContext {
 
   @Test
   public void testMetricsConfigEnabled() throws LensException {
-    Configuration conf = new Configuration();
-    List<LensDriver> testDrivers = new ArrayList<LensDriver>();
-    MockDriver mdriver = new MockDriver();
-    mdriver.configure(conf);
-    testDrivers.add(mdriver);
-    conf.setBoolean(LensConfConstants.ENABLE_QUERY_METRICS, true);
-    MockQueryContext ctx = new MockQueryContext("mock query", new LensConf(), conf, testDrivers);
-    String uniqueMetridId = ctx.getConf().get(LensConfConstants.QUERY_METRIC_UNIQUE_ID_CONF_KEY);
-    Assert.assertNotNull(uniqueMetridId);
-    UUID.fromString(uniqueMetridId);
-    StringBuilder expectedStackName = new StringBuilder();
-    expectedStackName.append(uniqueMetridId).append("-").append(MockDriver.class.getSimpleName());
-    Assert.assertEquals(ctx.getDriverConf(mdriver).get(LensConfConstants.QUERY_METRIC_DRIVER_STACK_NAME),
-      expectedStackName.toString());
+    MockQueryContext ctx = new MockQueryContext(getConfiguration(ENABLE_QUERY_METRICS, true));
+    String uniqueMetridId = ctx.getConf().get(QUERY_METRIC_UNIQUE_ID_CONF_KEY);
+    assertNotNull(uniqueMetridId);
+    assertEquals(ctx.getSelectedDriverConf().get(QUERY_METRIC_DRIVER_STACK_NAME),
+      uniqueMetridId + "-" + MockDriver.class.getSimpleName());
   }
 
   @Test
   public void testMetricsConfigDisabled() throws LensException {
-    Configuration conf = new Configuration();
-    List<LensDriver> testDrivers = new ArrayList<LensDriver>();
-    MockDriver mdriver = new MockDriver();
-    mdriver.configure(conf);
-    testDrivers.add(mdriver);
-    conf.setBoolean(LensConfConstants.ENABLE_QUERY_METRICS, false);
-    MockQueryContext ctx = new MockQueryContext("mock query", new LensConf(), conf, testDrivers);
-    Assert.assertNull(ctx.getConf().get(LensConfConstants.QUERY_METRIC_UNIQUE_ID_CONF_KEY));
-    Assert.assertNull(ctx.getDriverConf(mdriver).get(LensConfConstants.QUERY_METRIC_DRIVER_STACK_NAME));
+    MockQueryContext ctx = new MockQueryContext(getConfiguration(ENABLE_QUERY_METRICS, false));
+    assertNull(ctx.getConf().get(QUERY_METRIC_UNIQUE_ID_CONF_KEY));
+    assertNull(ctx.getSelectedDriverConf().get(QUERY_METRIC_DRIVER_STACK_NAME));
   }
 
   @Test
   public void testEstimateGauges() throws LensException {
-    Configuration conf = new Configuration();
-    List<LensDriver> testDrivers = new ArrayList<LensDriver>();
-    MockDriver mdriver = new MockDriver();
-    mdriver.configure(conf);
-    testDrivers.add(mdriver);
-    conf.set(LensConfConstants.QUERY_METRIC_UNIQUE_ID_CONF_KEY, TestAbstractQueryContext.class.getSimpleName());
-    MockQueryContext ctx = new MockQueryContext("mock query", new LensConf(), conf, testDrivers);
+    MockQueryContext ctx = new MockQueryContext(getConfiguration(QUERY_METRIC_UNIQUE_ID_CONF_KEY,
+      TestAbstractQueryContext.class.getSimpleName()));
     ctx.estimateCostForDrivers();
     MetricRegistry reg = LensMetricsRegistry.getStaticRegistry();
-
-    Assert.assertTrue(reg.getGauges().keySet().containsAll(Arrays.asList(
+    assertTrue(reg.getGauges().keySet().containsAll(Arrays.asList(
       "lens.MethodMetricGauge.TestAbstractQueryContext-MockDriver-driverEstimate")));
   }
 
   @Test
   public void testTransientState() throws LensException, IOException, ClassNotFoundException {
-    Configuration conf = new Configuration();
-    List<LensDriver> testDrivers = new ArrayList<LensDriver>();
-    MockDriver mdriver = new MockDriver();
-    mdriver.configure(conf);
-    testDrivers.add(mdriver);
-    MockQueryContext ctx = new MockQueryContext("mock query", new LensConf(), conf, testDrivers);
+    MockQueryContext ctx = new MockQueryContext();
     ByteArrayOutputStream bios = new ByteArrayOutputStream();
     ObjectOutputStream out = new ObjectOutputStream(bios);
     byte[] ctxBytes = null;
@@ -116,7 +90,17 @@ public class TestAbstractQueryContext {
       in.close();
     }
     ctxRead.initTransientState();
-    ctxRead.setConf(conf);
-    Assert.assertNotNull(ctxRead.getHiveConf());
+    ctxRead.setConf(ctx.getConf());
+    assertNotNull(ctxRead.getHiveConf());
   }
+
+  @Test
+  public void testPrioritySetting() throws LensException {
+    MockQueryContext ctx = new MockQueryContext();
+    Priority p = ctx.calculateCostAndDecidePriority(ctx.getSelectedDriver(), new
+      MockQueryCostCalculator(), new MockQueryPriorityDecider());
+    assertEquals(p, HIGH);
+    assertEquals(ctx.getPriority(), HIGH);
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/5741aee7/lens-server-api/src/test/java/org/apache/lens/server/api/query/cost/MockQueryCostCalculator.java
----------------------------------------------------------------------
diff --git a/lens-server-api/src/test/java/org/apache/lens/server/api/query/cost/MockQueryCostCalculator.java b/lens-server-api/src/test/java/org/apache/lens/server/api/query/cost/MockQueryCostCalculator.java
new file mode 100644
index 0000000..fb4085e
--- /dev/null
+++ b/lens-server-api/src/test/java/org/apache/lens/server/api/query/cost/MockQueryCostCalculator.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.lens.server.api.query.cost;
+
+import org.apache.lens.server.api.driver.LensDriver;
+import org.apache.lens.server.api.error.LensException;
+import org.apache.lens.server.api.query.AbstractQueryContext;
+
+public class MockQueryCostCalculator implements QueryCostCalculator {
+  @Override
+  public QueryCost calculateCost(AbstractQueryContext queryContext, LensDriver driver) throws LensException {
+    return new FactPartitionBasedQueryCost(10.0);
+  }
+}

http://git-wip-us.apache.org/repos/asf/lens/blob/5741aee7/lens-server-api/src/test/java/org/apache/lens/server/api/query/priority/MockQueryPriorityDecider.java
----------------------------------------------------------------------
diff --git a/lens-server-api/src/test/java/org/apache/lens/server/api/query/priority/MockQueryPriorityDecider.java b/lens-server-api/src/test/java/org/apache/lens/server/api/query/priority/MockQueryPriorityDecider.java
new file mode 100644
index 0000000..121a28b
--- /dev/null
+++ b/lens-server-api/src/test/java/org/apache/lens/server/api/query/priority/MockQueryPriorityDecider.java
@@ -0,0 +1,30 @@
+/**
+ * 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.lens.server.api.query.priority;
+
+import org.apache.lens.api.Priority;
+import org.apache.lens.server.api.error.LensException;
+import org.apache.lens.server.api.query.cost.QueryCost;
+
+public class MockQueryPriorityDecider implements QueryPriorityDecider {
+  @Override
+  public Priority decidePriority(QueryCost cost) throws LensException {
+    return Priority.HIGH;
+  }
+}

http://git-wip-us.apache.org/repos/asf/lens/blob/5741aee7/lens-server-api/src/test/java/org/apache/lens/server/api/util/TestLensUtil.java
----------------------------------------------------------------------
diff --git a/lens-server-api/src/test/java/org/apache/lens/server/api/util/TestLensUtil.java b/lens-server-api/src/test/java/org/apache/lens/server/api/util/TestLensUtil.java
index caee12f..a6acb7d 100644
--- a/lens-server-api/src/test/java/org/apache/lens/server/api/util/TestLensUtil.java
+++ b/lens-server-api/src/test/java/org/apache/lens/server/api/util/TestLensUtil.java
@@ -18,8 +18,14 @@
  */
 package org.apache.lens.server.api.util;
 
+import static org.testng.Assert.assertEquals;
+
 import java.io.IOException;
 
+import org.apache.lens.api.LensConf;
+
+import org.apache.hadoop.conf.Configuration;
+
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
@@ -55,4 +61,22 @@ public class TestLensUtil {
     }
     Assert.assertEquals(LensUtil.getCauseMessage(th), "run time exception");
   }
+
+  public static Configuration getConfiguration(Object... args) {
+    Configuration conf = new Configuration();
+    Assert.assertEquals(args.length % 2, 0, "Odd number of arguments not supported");
+    for (int i = 0; i < args.length; i += 2) {
+      conf.set(args[i].toString(), args[i + 1].toString());
+    }
+    return conf;
+  }
+
+  public static LensConf getLensConf(Object... args) {
+    assertEquals(args.length % 2, 0);
+    LensConf conf = new LensConf();
+    for (int i = 0; i < args.length; i += 2) {
+      conf.addProperty(args[i], args[i + 1]);
+    }
+    return conf;
+  }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/5741aee7/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java b/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java
index e266ef2..4b25fd0 100644
--- a/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java
+++ b/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java
@@ -252,13 +252,4 @@ public class RestAPITestUtil {
     return target.path("queryapi/queries").path(handle.toString()).path("httpresultset")
       .queryParam("sessionid", lensSessionHandle).request().get(Response.class);
   }
-
-  public static LensConf getLensConf(Object... args) {
-    assertEquals(args.length % 2, 0);
-    LensConf conf = new LensConf();
-    for (int i = 0; i < args.length; i += 2) {
-      conf.addProperty(args[i], args[i + 1]);
-    }
-    return conf;
-  }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/5741aee7/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java
index 3bb90ef..ec6fd86 100644
--- a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java
+++ b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java
@@ -18,6 +18,7 @@
  */
 package org.apache.lens.server.query;
 
+import static org.apache.lens.server.api.util.TestLensUtil.getLensConf;
 import static org.apache.lens.server.common.RestAPITestUtil.*;
 
 import static org.testng.Assert.assertEquals;

http://git-wip-us.apache.org/repos/asf/lens/blob/5741aee7/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java
index 6218882..c37b0ed 100644
--- a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java
+++ b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java
@@ -20,6 +20,7 @@ package org.apache.lens.server.query;
 
 import static javax.ws.rs.core.Response.Status.*;
 
+import static org.apache.lens.server.api.util.TestLensUtil.getLensConf;
 import static org.apache.lens.server.common.RestAPITestUtil.*;
 
 import static org.testng.Assert.*;