LENS-650 :Move pre-submit hook out of User Config Loader into DriverQueryHook


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

Branch: refs/heads/LENS-581
Commit: c7261d12b622d5990bd80edffe2a1654ba1a2a6d
Parents: 689c9a9
Author: Rajat Khandelwal <[email protected]>
Authored: Mon Jul 20 12:21:37 2015 +0530
Committer: Amareshwari Sriramadasu <[email protected]>
Committed: Mon Jul 20 12:21:37 2015 +0530

----------------------------------------------------------------------
 .../org/apache/lens/driver/hive/HiveDriver.java | 24 ++++-----
 .../apache/lens/driver/hive/TestHiveDriver.java | 17 +++----
 .../lens/driver/hive/TestRemoteHiveDriver.java  | 14 +++---
 .../org/apache/lens/driver/jdbc/JDBCDriver.java | 32 ++++++------
 .../driver/jdbc/JDBCDriverConfConstants.java    |  1 +
 .../apache/lens/driver/jdbc/TestJdbcDriver.java | 17 +++----
 .../lens/server/api/LensConfConstants.java      |  2 +-
 .../lens/server/api/driver/DriverQueryHook.java | 50 +++++++++++++++++++
 .../lens/server/api/driver/LensDriver.java      | 11 ++---
 .../server/api/driver/NoOpDriverQueryHook.java  | 35 +++++++++++++
 .../lens/server/api/user/UserConfigLoader.java  | 37 +++-----------
 .../lens/server/api/driver/MockDriver.java      |  6 +--
 .../server/api/user/MockDriverQueryHook.java    | 32 ++++++++++++
 .../server/api/user/MockUserConfigLoader.java   | 47 ------------------
 .../server/query/QueryExecutionServiceImpl.java | 52 ++++++++++----------
 .../server/user/DatabaseUserConfigLoader.java   |  5 +-
 .../lens/server/user/FixedUserConfigLoader.java | 25 +++++-----
 .../user/PropertyBasedUserConfigLoader.java     | 15 +++---
 .../lens/server/user/FooBarConfigLoader.java    | 11 +----
 19 files changed, 222 insertions(+), 211 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/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 e87ed23..89d671f 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
@@ -44,7 +44,6 @@ import 
org.apache.lens.server.api.query.cost.QueryCostCalculator;
 import org.apache.lens.server.api.query.priority.CostRangePriorityDecider;
 import org.apache.lens.server.api.query.priority.CostToPriorityRangeConf;
 import org.apache.lens.server.api.query.priority.QueryPriorityDecider;
-import org.apache.lens.server.api.user.UserConfigLoader;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.conf.Configuration;
@@ -72,6 +71,8 @@ public class HiveDriver implements LensDriver {
   /** The Constant HIVE_CONNECTION_CLASS. */
   public static final String HIVE_CONNECTION_CLASS = 
"lens.driver.hive.connection.class";
 
+  public static final String HIVE_QUERY_HOOK_CLASS = 
"lens.driver.hive.query.hook.class";
+
   /** The Constant HS2_CONNECTION_EXPIRY_DELAY. */
   public static final String HS2_CONNECTION_EXPIRY_DELAY = 
"lens.driver.hive.hs2.connection.expiry.delay";
 
@@ -127,7 +128,7 @@ public class HiveDriver implements LensDriver {
   QueryPriorityDecider queryPriorityDecider;
   // package-local. Test case can change.
   boolean whetherCalculatePriority;
-  private UserConfigLoader userConfigLoader;
+  private DriverQueryHook queryHook;
 
 
   private String sessionDbKey(String sessionHandle, String database) {
@@ -341,6 +342,13 @@ public class HiveDriver implements LensDriver {
     queryPriorityDecider = new CostRangePriorityDecider(
       new CostToPriorityRangeConf(driverConf.get(HS2_PRIORITY_RANGES, 
HS2_PRIORITY_DEFAULT_RANGES))
     );
+    try {
+      queryHook = driverConf.getClass(
+        HIVE_QUERY_HOOK_CLASS, NoOpDriverQueryHook.class, DriverQueryHook.class
+      ).newInstance();
+    } catch (InstantiationException | IllegalAccessException e) {
+      throw new LensException("Can't instantiate driver query hook for 
hivedriver with given class", e);
+    }
   }
 
   private QueryCost calculateQueryCost(AbstractQueryContext qctx) throws 
LensException {
@@ -350,6 +358,7 @@ public class HiveDriver implements LensDriver {
       return new FactPartitionBasedQueryCost(Double.MAX_VALUE);
     }
   }
+
   @Override
   public QueryCost estimate(AbstractQueryContext qctx) throws LensException {
     log.info("Estimate: " + qctx.getDriverQuery(this));
@@ -520,9 +529,7 @@ public class HiveDriver implements LensDriver {
             + "User query: " + ctx.getUserQuery(), e);
         }
       }
-      if (userConfigLoader != null) {
-        userConfigLoader.preSubmit(ctx);
-      }
+      queryHook.preLaunch(ctx);
       OperationHandle op = getClient().executeStatementAsync(getSession(ctx), 
ctx.getSelectedDriverQuery(),
         qdconf.getValByRegex(".*"));
       ctx.setDriverOpHandle(op.toString());
@@ -758,11 +765,6 @@ public class HiveDriver implements LensDriver {
     driverListeners.add(driverEventListener);
   }
 
-  @Override
-  public void registerUserConfigLoader(UserConfigLoader userConfigLoader) {
-    this.userConfigLoader = userConfigLoader;
-  }
-
   protected CLIServiceClient getClient() throws LensException {
     if (isEmbedded) {
       if (embeddedConnection == null) {
@@ -982,7 +984,7 @@ public class HiveDriver implements LensDriver {
               listener.onCompletion(handle);
               return;
             }
-          } catch(LensException e) {
+          } catch (LensException e) {
             log.debug("query handle: {} Not yet launched on driver", handle);
           }
           Thread.sleep(pollInterval);

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/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 67a4667..78b3320 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
@@ -18,9 +18,6 @@
  */
 package org.apache.lens.driver.hive;
 
-import static org.apache.lens.server.api.user.MockUserConfigLoader.KEY;
-import static org.apache.lens.server.api.user.MockUserConfigLoader.VALUE;
-
 import static org.testng.Assert.*;
 
 import java.io.*;
@@ -40,7 +37,7 @@ import org.apache.lens.server.api.query.*;
 import org.apache.lens.server.api.query.cost.QueryCost;
 import org.apache.lens.server.api.query.priority.CostRangePriorityDecider;
 import org.apache.lens.server.api.query.priority.CostToPriorityRangeConf;
-import org.apache.lens.server.api.user.MockUserConfigLoader;
+import org.apache.lens.server.api.user.MockDriverQueryHook;
 import org.apache.lens.server.api.util.LensUtil;
 
 import org.apache.hadoop.conf.Configuration;
@@ -56,6 +53,8 @@ import org.apache.hive.service.cli.ColumnDescriptor;
 
 import org.testng.annotations.*;
 
+import com.google.common.collect.Lists;
+
 
 /**
  * The Class TestHiveDriver.
@@ -115,16 +114,12 @@ public class TestHiveDriver {
     conf = new HiveConf();
     conf.addResource("hivedriver-site.xml");
     conf.setClass(HiveDriver.HIVE_CONNECTION_CLASS, 
EmbeddedThriftConnection.class, ThriftConnection.class);
+    conf.setClass(HiveDriver.HIVE_QUERY_HOOK_CLASS, MockDriverQueryHook.class, 
DriverQueryHook.class);
     conf.set("hive.lock.manager", 
"org.apache.hadoop.hive.ql.lockmgr.EmbeddedLockManager");
     conf.setBoolean(HiveDriver.HS2_CALCULATE_PRIORITY, true);
     driver = new HiveDriver();
     driver.configure(conf);
-    driver.registerUserConfigLoader(new MockUserConfigLoader(conf));
-    drivers = new ArrayList<LensDriver>() {
-      {
-        add(driver);
-      }
-    };
+    drivers = Lists.<LensDriver>newArrayList(driver);
     System.out.println("TestHiveDriver created");
   }
 
@@ -477,7 +472,7 @@ public class TestHiveDriver {
    */
   protected void validateExecuteAsync(QueryContext ctx, DriverQueryState 
finalState, boolean isPersistent,
     boolean formatNulls) throws Exception {
-    assertEquals(ctx.getSelectedDriverConf().get(KEY), VALUE);
+    assertEquals(ctx.getSelectedDriverConf().get(MockDriverQueryHook.KEY), 
MockDriverQueryHook.VALUE);
     validateExecuteAsync(ctx, finalState, isPersistent, formatNulls, driver);
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestRemoteHiveDriver.java
----------------------------------------------------------------------
diff --git 
a/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestRemoteHiveDriver.java
 
b/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestRemoteHiveDriver.java
index c144fd8..98edc28 100644
--- 
a/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestRemoteHiveDriver.java
+++ 
b/lens-driver-hive/src/test/java/org/apache/lens/driver/hive/TestRemoteHiveDriver.java
@@ -28,12 +28,13 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.lens.api.query.QueryHandle;
 import org.apache.lens.server.api.LensConfConstants;
+import org.apache.lens.server.api.driver.DriverQueryHook;
 import org.apache.lens.server.api.driver.DriverQueryPlan;
 import org.apache.lens.server.api.driver.DriverQueryStatus.DriverQueryState;
 import org.apache.lens.server.api.driver.LensDriver;
 import org.apache.lens.server.api.error.LensException;
 import org.apache.lens.server.api.query.QueryContext;
-import org.apache.lens.server.api.user.MockUserConfigLoader;
+import org.apache.lens.server.api.user.MockDriverQueryHook;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.hive.conf.HiveConf;
@@ -46,6 +47,7 @@ import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
+import com.google.common.collect.Lists;
 import lombok.extern.slf4j.Slf4j;
 
 /**
@@ -134,13 +136,9 @@ public class TestRemoteHiveDriver extends TestHiveDriver {
     conf.addResource("hivedriver-site.xml");
     driver = new HiveDriver();
     conf.setBoolean(HiveDriver.HS2_CALCULATE_PRIORITY, true);
+    conf.setClass(HiveDriver.HIVE_QUERY_HOOK_CLASS, MockDriverQueryHook.class, 
DriverQueryHook.class);
     driver.configure(conf);
-    driver.registerUserConfigLoader(new MockUserConfigLoader(conf));
-    drivers = new ArrayList<LensDriver>() {
-      {
-        add(driver);
-      }
-    };
+    drivers = Lists.<LensDriver>newArrayList(driver);
     System.out.println("TestRemoteHiveDriver created");
   }
 
@@ -198,7 +196,7 @@ public class TestRemoteHiveDriver extends TestHiveDriver {
                 }
                 Thread.sleep(POLL_DELAY);
               } catch (LensException e) {
-                log.error("Got Exception " +e.getCause(), e);
+                log.error("Got Exception " + e.getCause(), e);
                 errCount.incrementAndGet();
                 break;
               } catch (InterruptedException e) {

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriver.java
----------------------------------------------------------------------
diff --git 
a/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriver.java 
b/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriver.java
index e048a78..a09cd1b 100644
--- a/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriver.java
+++ b/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriver.java
@@ -20,8 +20,6 @@ package org.apache.lens.driver.jdbc;
 
 import static org.apache.lens.driver.jdbc.JDBCDriverConfConstants.*;
 
-import static org.apache.hadoop.hive.ql.parse.HiveParser.TOK_TMP_FILE;
-
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
@@ -33,7 +31,8 @@ import java.util.concurrent.*;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.lens.api.LensConf;
-import org.apache.lens.api.query.*;
+import org.apache.lens.api.query.QueryHandle;
+import org.apache.lens.api.query.QueryPrepareHandle;
 import org.apache.lens.cube.parse.HQLParser;
 import org.apache.lens.server.api.driver.*;
 import org.apache.lens.server.api.driver.DriverQueryStatus.DriverQueryState;
@@ -41,11 +40,12 @@ import org.apache.lens.server.api.error.LensException;
 import org.apache.lens.server.api.events.LensEventListener;
 import org.apache.lens.server.api.metrics.MethodMetricsContext;
 import org.apache.lens.server.api.metrics.MethodMetricsFactory;
-import org.apache.lens.server.api.query.*;
+import org.apache.lens.server.api.query.AbstractQueryContext;
+import org.apache.lens.server.api.query.PreparedQueryContext;
+import org.apache.lens.server.api.query.QueryContext;
 import org.apache.lens.server.api.query.cost.FactPartitionBasedQueryCost;
 import org.apache.lens.server.api.query.cost.QueryCost;
 import org.apache.lens.server.api.query.rewrite.QueryRewriter;
-import org.apache.lens.server.api.user.UserConfigLoader;
 import org.apache.lens.server.model.LogSegregationContext;
 import org.apache.lens.server.model.MappedDiagnosticLogSegregationContext;
 
@@ -92,7 +92,7 @@ public class JDBCDriver implements LensDriver {
   private ConnectionProvider estimateConnectionProvider;
 
   private LogSegregationContext logSegregationContext;
-  private UserConfigLoader userConfigLoader;
+  private DriverQueryHook queryHook;
 
   /**
    * Data related to a query submitted to JDBCDriver.
@@ -419,6 +419,13 @@ public class JDBCDriver implements LensDriver {
     this.conf.addResource("jdbcdriver-default.xml");
     this.conf.addResource("jdbcdriver-site.xml");
     init(conf);
+    try {
+      queryHook = this.conf.getClass(
+        JDBC_QUERY_HOOK_CLASS, NoOpDriverQueryHook.class, DriverQueryHook.class
+      ).newInstance();
+    } catch (InstantiationException | IllegalAccessException e) {
+      throw new LensException("Can't instantiate driver query hook for 
hivedriver with given class", e);
+    }
     configured = true;
     LOG.info("JDBC Driver configured");
   }
@@ -532,7 +539,7 @@ public class JDBCDriver implements LensDriver {
       // check for insert clause
       ASTNode dest = HQLParser.findNodeByPath(ast, HiveParser.TOK_INSERT);
       if (dest != null
-        && ((ASTNode) 
(dest.getChild(0).getChild(0).getChild(0))).getToken().getType() != 
TOK_TMP_FILE) {
+        && ((ASTNode) 
(dest.getChild(0).getChild(0).getChild(0))).getToken().getType() != 
HiveParser.TOK_TMP_FILE) {
         throw new LensException("Not allowed statement:" + query);
       }
     }
@@ -889,9 +896,7 @@ public class JDBCDriver implements LensDriver {
     String rewrittenQuery = rewriteQuery(context);
     JdbcQueryContext jdbcCtx = new JdbcQueryContext(context, 
logSegregationContext);
     jdbcCtx.setRewrittenQuery(rewrittenQuery);
-    if (userConfigLoader != null) {
-      userConfigLoader.preSubmit(context);
-    }
+    queryHook.preLaunch(context);
     try {
       Future<QueryResult> future = asyncQueryPool.submit(new 
QueryCallable(jdbcCtx, logSegregationContext));
       jdbcCtx.setResultFuture(future);
@@ -1079,13 +1084,6 @@ public class JDBCDriver implements LensDriver {
 
   }
 
-
-  @Override
-  public void registerUserConfigLoader(UserConfigLoader userConfigLoader) {
-    this.userConfigLoader = userConfigLoader;
-  }
-
-
   /*
    * (non-Javadoc)
    *

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriverConfConstants.java
----------------------------------------------------------------------
diff --git 
a/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriverConfConstants.java
 
b/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriverConfConstants.java
index 5abd040..ebcdaca 100644
--- 
a/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriverConfConstants.java
+++ 
b/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/JDBCDriverConfConstants.java
@@ -33,6 +33,7 @@ public final class JDBCDriverConfConstants {
 
   /** The Constant JDBC_QUERY_REWRITER_CLASS. */
   public static final String JDBC_QUERY_REWRITER_CLASS = JDBC_DRIVER_PFX + 
"query.rewriter";
+  public static final String JDBC_QUERY_HOOK_CLASS = JDBC_DRIVER_PFX + 
"query.hook.class";
 
   /** The Constant JDBC_DRIVER_CLASS. */
   public static final String JDBC_DRIVER_CLASS = JDBC_DRIVER_PFX + 
"driver.class";

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestJdbcDriver.java
----------------------------------------------------------------------
diff --git 
a/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestJdbcDriver.java
 
b/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestJdbcDriver.java
index a6c97ae..f534b69 100644
--- 
a/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestJdbcDriver.java
+++ 
b/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestJdbcDriver.java
@@ -18,9 +18,6 @@
  */
 package org.apache.lens.driver.jdbc;
 
-import static org.apache.lens.server.api.user.MockUserConfigLoader.KEY;
-import static org.apache.lens.server.api.user.MockUserConfigLoader.VALUE;
-
 import static org.testng.Assert.*;
 
 import java.sql.*;
@@ -40,7 +37,7 @@ import org.apache.lens.server.api.query.ExplainQueryContext;
 import org.apache.lens.server.api.query.PreparedQueryContext;
 import org.apache.lens.server.api.query.QueryContext;
 import org.apache.lens.server.api.query.cost.QueryCost;
-import org.apache.lens.server.api.user.MockUserConfigLoader;
+import org.apache.lens.server.api.user.MockDriverQueryHook;
 import org.apache.lens.server.api.util.LensUtil;
 
 import org.apache.hadoop.conf.Configuration;
@@ -52,6 +49,7 @@ import org.testng.Assert;
 import org.testng.annotations.*;
 
 import com.codahale.metrics.MetricRegistry;
+import com.google.common.collect.Lists;
 import com.mchange.v2.c3p0.ComboPooledDataSource;
 import lombok.extern.slf4j.Slf4j;
 
@@ -83,19 +81,16 @@ public class TestJdbcDriver {
     baseConf.set(JDBCDriverConfConstants.JDBC_USER, "SA");
     baseConf.set(JDBCDriverConfConstants.JDBC_PASSWORD, "");
     baseConf.set(JDBCDriverConfConstants.JDBC_EXPLAIN_KEYWORD_PARAM, "explain 
plan for ");
+    baseConf.setClass(JDBCDriverConfConstants.JDBC_QUERY_HOOK_CLASS, 
MockDriverQueryHook.class, DriverQueryHook.class);
     hConf = new HiveConf(baseConf, this.getClass());
 
     driver = new JDBCDriver();
     driver.configure(baseConf);
-    driver.registerUserConfigLoader(new MockUserConfigLoader(hConf));
+
     assertNotNull(driver);
     assertTrue(driver.configured);
 
-    drivers = new ArrayList<LensDriver>() {
-      {
-        add(driver);
-      }
-    };
+    drivers = Lists.<LensDriver>newArrayList(driver);
   }
 
   /**
@@ -650,7 +645,7 @@ public class TestJdbcDriver {
 
   private void executeAsync(QueryContext ctx) throws LensException {
     driver.executeAsync(ctx);
-    assertEquals(ctx.getSelectedDriverConf().get(KEY), VALUE);
+    assertEquals(ctx.getSelectedDriverConf().get(MockDriverQueryHook.KEY), 
MockDriverQueryHook.VALUE);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java
----------------------------------------------------------------------
diff --git 
a/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java
 
b/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java
index eab42d0..2b3a480 100644
--- 
a/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java
+++ 
b/lens-server-api/src/main/java/org/apache/lens/server/api/LensConfConstants.java
@@ -716,7 +716,7 @@ public final class LensConfConstants {
    * Interval at which lens session expiry service runs
    */
   public static final String SESSION_EXPIRY_SERVICE_INTERVAL_IN_SECS = 
SERVER_PFX
-      + "session.expiry.serivce.interval.secs";
+    + "session.expiry.serivce.interval.secs";
 
   public static final int DEFAULT_SESSION_EXPIRY_SERVICE_INTERVAL_IN_SECS = 
3600;
 

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-server-api/src/main/java/org/apache/lens/server/api/driver/DriverQueryHook.java
----------------------------------------------------------------------
diff --git 
a/lens-server-api/src/main/java/org/apache/lens/server/api/driver/DriverQueryHook.java
 
b/lens-server-api/src/main/java/org/apache/lens/server/api/driver/DriverQueryHook.java
new file mode 100644
index 0000000..70d999a
--- /dev/null
+++ 
b/lens-server-api/src/main/java/org/apache/lens/server/api/driver/DriverQueryHook.java
@@ -0,0 +1,50 @@
+/**
+ * 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.driver;
+
+import org.apache.lens.server.api.query.AbstractQueryContext;
+
+/**
+ * Drivers can choose to initialize a DriverQueryHook object in their
+ * initialization and use that wherever they want.
+ *
+ * The only use case I see right now is to provide a hook just before query is
+ * launched on the driver.
+ *
+ * This interface is meant to unify drivers' needs of having hooks. Each driver
+ * can use the methods in their own way. Each driver can pose its own 
restrictions
+ * or guidelines on methods for its hooks.
+ * e.g. some driver may choose to not allow any hooks
+ * another driver may allow hooks but for restricted usage
+ * Some drivers may want their hooks to be initialized with some constructor 
params
+ * Currently, Hivedriver and Jdbcdriver only require their hook 
implementations to have a default constructor
+ *
+ * This interface is expected to evolve for some time as more needs of hooks 
are discovered
+ *
+ */
+public interface DriverQueryHook {
+  /**
+   * Should be Called before launch on the driver
+   * @param ctx
+   */
+  void preLaunch(AbstractQueryContext ctx);
+}

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-server-api/src/main/java/org/apache/lens/server/api/driver/LensDriver.java
----------------------------------------------------------------------
diff --git 
a/lens-server-api/src/main/java/org/apache/lens/server/api/driver/LensDriver.java
 
b/lens-server-api/src/main/java/org/apache/lens/server/api/driver/LensDriver.java
index b56c67c..52207d3 100644
--- 
a/lens-server-api/src/main/java/org/apache/lens/server/api/driver/LensDriver.java
+++ 
b/lens-server-api/src/main/java/org/apache/lens/server/api/driver/LensDriver.java
@@ -24,9 +24,10 @@ import org.apache.lens.api.query.QueryHandle;
 import org.apache.lens.api.query.QueryPrepareHandle;
 import org.apache.lens.server.api.error.LensException;
 import org.apache.lens.server.api.events.LensEventListener;
-import org.apache.lens.server.api.query.*;
+import org.apache.lens.server.api.query.AbstractQueryContext;
+import org.apache.lens.server.api.query.PreparedQueryContext;
+import org.apache.lens.server.api.query.QueryContext;
 import org.apache.lens.server.api.query.cost.QueryCost;
-import org.apache.lens.server.api.user.UserConfigLoader;
 
 import org.apache.hadoop.conf.Configuration;
 
@@ -181,10 +182,4 @@ public interface LensDriver extends Externalizable {
    * @param driverEventListener the driver event listener
    */
   void registerDriverEventListener(LensEventListener<DriverEvent> 
driverEventListener);
-
-  /**
-   * Add the user config loader to driver for use
-   * @param userConfigLoader
-   */
-  void registerUserConfigLoader(UserConfigLoader userConfigLoader);
 }

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-server-api/src/main/java/org/apache/lens/server/api/driver/NoOpDriverQueryHook.java
----------------------------------------------------------------------
diff --git 
a/lens-server-api/src/main/java/org/apache/lens/server/api/driver/NoOpDriverQueryHook.java
 
b/lens-server-api/src/main/java/org/apache/lens/server/api/driver/NoOpDriverQueryHook.java
new file mode 100644
index 0000000..a5475e4
--- /dev/null
+++ 
b/lens-server-api/src/main/java/org/apache/lens/server/api/driver/NoOpDriverQueryHook.java
@@ -0,0 +1,35 @@
+/**
+ * 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.driver;
+
+import org.apache.lens.server.api.query.AbstractQueryContext;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class NoOpDriverQueryHook implements DriverQueryHook {
+  @Override
+  public void preLaunch(AbstractQueryContext ctx) {
+    log.info("Pre launch for {}, user query: {}, driver query: {}", 
ctx.getSubmittedUser(), ctx.getUserQuery(),
+      ctx.getSelectedDriverQuery());
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-server-api/src/main/java/org/apache/lens/server/api/user/UserConfigLoader.java
----------------------------------------------------------------------
diff --git 
a/lens-server-api/src/main/java/org/apache/lens/server/api/user/UserConfigLoader.java
 
b/lens-server-api/src/main/java/org/apache/lens/server/api/user/UserConfigLoader.java
index 93e11a2..61f3a5a 100644
--- 
a/lens-server-api/src/main/java/org/apache/lens/server/api/user/UserConfigLoader.java
+++ 
b/lens-server-api/src/main/java/org/apache/lens/server/api/user/UserConfigLoader.java
@@ -20,34 +20,13 @@ package org.apache.lens.server.api.user;
 
 import java.util.Map;
 
-import org.apache.lens.server.api.error.LensException;
-import org.apache.lens.server.api.query.QueryContext;
-
-import org.apache.hadoop.hive.conf.HiveConf;
-
-import lombok.extern.slf4j.Slf4j;
-
 /**
- * The Class UserConfigLoader. It's initialized once in the server lifetime. 
After that, t:
- *    1. Gets session configs for the user on each session open. This config 
applies to the particular session
- *       and is forwarded for all actions. One Use case is to decide driver 
specific details e.g. priority/queue of
- *       all queries of the user.
- *    2. Provides a pre-submit hook. Just before submission
+ * The Class UserConfigLoader. It's initialized once in the server lifetime. 
After that, it's job is to
+ * Get session configs for the user on each session open. This config applies 
to the particular session
+ * and is forwarded for all actions. One Use case is to decide driver specific 
details e.g. priority/queue of
+ * all queries of the user.
  */
-@Slf4j
-public abstract class UserConfigLoader {
-
-  /** The hive conf. */
-  protected final HiveConf hiveConf;
-
-  /**
-   * Instantiates a new user config loader.
-   *
-   * @param conf the conf
-   */
-  protected UserConfigLoader(HiveConf conf) {
-    this.hiveConf = conf;
-  }
+public interface UserConfigLoader {
 
   /**
    * Gets the user config.
@@ -56,9 +35,5 @@ public abstract class UserConfigLoader {
    * @return the user config
    * @throws UserConfigLoaderException the user config loader exception
    */
-  public abstract Map<String, String> getUserConfig(String loggedInUser) 
throws UserConfigLoaderException;
-
-  public void preSubmit(QueryContext ctx) throws LensException {
-    log.debug("Pre submit " + ctx + " on " + ctx.getSelectedDriver());
-  }
+  Map<String, String> getUserConfig(String loggedInUser) throws 
UserConfigLoaderException;
 }

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-server-api/src/test/java/org/apache/lens/server/api/driver/MockDriver.java
----------------------------------------------------------------------
diff --git 
a/lens-server-api/src/test/java/org/apache/lens/server/api/driver/MockDriver.java
 
b/lens-server-api/src/test/java/org/apache/lens/server/api/driver/MockDriver.java
index b52b08a..dffcfd3 100644
--- 
a/lens-server-api/src/test/java/org/apache/lens/server/api/driver/MockDriver.java
+++ 
b/lens-server-api/src/test/java/org/apache/lens/server/api/driver/MockDriver.java
@@ -36,7 +36,6 @@ import org.apache.lens.server.api.query.PreparedQueryContext;
 import org.apache.lens.server.api.query.QueryContext;
 import org.apache.lens.server.api.query.cost.FactPartitionBasedQueryCost;
 import org.apache.lens.server.api.query.cost.QueryCost;
-import org.apache.lens.server.api.user.UserConfigLoader;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hive.service.cli.ColumnDescriptor;
@@ -44,7 +43,7 @@ import org.apache.hive.service.cli.ColumnDescriptor;
 /**
  * The Class MockDriver.
  */
-public class  MockDriver implements LensDriver {
+public class MockDriver implements LensDriver {
   private static AtomicInteger mockDriverId = new AtomicInteger();
 
   /**
@@ -186,9 +185,6 @@ public class  MockDriver implements LensDriver {
   public void registerDriverEventListener(LensEventListener<DriverEvent> 
driverEventListener) {
   }
 
-  @Override
-  public void registerUserConfigLoader(UserConfigLoader userConfigLoader) {
-  }
 
   /*
    * (non-Javadoc)

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-server-api/src/test/java/org/apache/lens/server/api/user/MockDriverQueryHook.java
----------------------------------------------------------------------
diff --git 
a/lens-server-api/src/test/java/org/apache/lens/server/api/user/MockDriverQueryHook.java
 
b/lens-server-api/src/test/java/org/apache/lens/server/api/user/MockDriverQueryHook.java
new file mode 100644
index 0000000..2505ef4
--- /dev/null
+++ 
b/lens-server-api/src/test/java/org/apache/lens/server/api/user/MockDriverQueryHook.java
@@ -0,0 +1,32 @@
+/**
+ * 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.user;
+
+import org.apache.lens.server.api.driver.DriverQueryHook;
+import org.apache.lens.server.api.query.AbstractQueryContext;
+
+public class MockDriverQueryHook implements DriverQueryHook {
+  public static final String KEY = "TEST_KEY";
+  public static final String VALUE = "TEST_VALUE";
+
+  @Override
+  public void preLaunch(AbstractQueryContext ctx) {
+    ctx.getSelectedDriverConf().set(KEY, VALUE);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-server-api/src/test/java/org/apache/lens/server/api/user/MockUserConfigLoader.java
----------------------------------------------------------------------
diff --git 
a/lens-server-api/src/test/java/org/apache/lens/server/api/user/MockUserConfigLoader.java
 
b/lens-server-api/src/test/java/org/apache/lens/server/api/user/MockUserConfigLoader.java
deleted file mode 100644
index f6ef0d4..0000000
--- 
a/lens-server-api/src/test/java/org/apache/lens/server/api/user/MockUserConfigLoader.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * 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.user;
-
-import java.util.Map;
-
-import org.apache.lens.server.api.error.LensException;
-import org.apache.lens.server.api.query.QueryContext;
-
-import org.apache.hadoop.hive.conf.HiveConf;
-
-import com.beust.jcommander.internal.Maps;
-
-public class MockUserConfigLoader extends UserConfigLoader {
-  public static final String KEY = "TEST_KEY";
-  public static final String VALUE = "TEST_VALUE";
-
-  public MockUserConfigLoader(HiveConf conf) {
-    super(conf);
-  }
-
-  @Override
-  public Map<String, String> getUserConfig(String loggedInUser) throws 
UserConfigLoaderException {
-    return Maps.newHashMap();
-  }
-
-  @Override
-  public void preSubmit(QueryContext ctx) throws LensException {
-    ctx.getSelectedDriverConf().set(KEY, VALUE);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java
 
b/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java
index 3511236..2d7a92a 100644
--- 
a/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java
+++ 
b/lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java
@@ -19,6 +19,7 @@
 package org.apache.lens.server.query;
 
 import static org.apache.lens.api.query.QueryStatus.Status.*;
+import static org.apache.lens.server.api.LensConfConstants.*;
 import static org.apache.lens.server.session.LensSessionImpl.ResourceEntry;
 
 import java.io.*;
@@ -44,7 +45,6 @@ import org.apache.lens.driver.hive.HiveDriver;
 import org.apache.lens.server.LensServerConf;
 import org.apache.lens.server.LensService;
 import org.apache.lens.server.LensServices;
-import org.apache.lens.server.api.LensConfConstants;
 import org.apache.lens.server.api.driver.*;
 import org.apache.lens.server.api.error.LensException;
 import org.apache.lens.server.api.error.LensMultiCauseException;
@@ -60,7 +60,6 @@ import org.apache.lens.server.rewrite.RewriteUtil;
 import org.apache.lens.server.rewrite.UserQueryToCubeQueryRewriter;
 import org.apache.lens.server.session.LensSessionImpl;
 import org.apache.lens.server.stats.StatisticsService;
-import org.apache.lens.server.user.UserConfigLoaderFactory;
 import org.apache.lens.server.util.UtilityMethods;
 
 import org.apache.commons.collections.CollectionUtils;
@@ -273,7 +272,7 @@ public class QueryExecutionServiceImpl extends LensService 
implements QueryExecu
    * Initialize query acceptors and listeners.
    */
   private void initializeQueryAcceptors() throws LensException {
-    String[] acceptorClasses = 
conf.getStrings(LensConfConstants.ACCEPTOR_CLASSES);
+    String[] acceptorClasses = conf.getStrings(ACCEPTOR_CLASSES);
     if (acceptorClasses != null) {
       for (String acceptorClass : acceptorClasses) {
         try {
@@ -290,7 +289,7 @@ public class QueryExecutionServiceImpl extends LensService 
implements QueryExecu
   }
 
   private void initializeListeners() {
-    if (conf.getBoolean(LensConfConstants.QUERY_STATE_LOGGER_ENABLED, true)) {
+    if (conf.getBoolean(QUERY_STATE_LOGGER_ENABLED, true)) {
       getEventService().addListenerForType(new QueryStatusLogger(), 
StatusChange.class);
       log.info("Registered query state logger");
     }
@@ -309,17 +308,16 @@ public class QueryExecutionServiceImpl extends 
LensService implements QueryExecu
    * @throws LensException the lens exception
    */
   private void loadDriversAndSelector() throws LensException {
-    String[] driverClasses = conf.getStrings(LensConfConstants.DRIVER_CLASSES);
+    Class<?>[] driverClasses = conf.getClasses(DRIVER_CLASSES);
     if (driverClasses != null) {
-      for (String driverClass : driverClasses) {
+      for (Class<?> driverClass : driverClasses) {
         try {
-          Class<?> clazz = Class.forName(driverClass);
-          LensDriver driver = (LensDriver) clazz.newInstance();
+          LensDriver driver = (LensDriver) driverClass.newInstance();
           driver.configure(LensServerConf.getConf());
-          
driver.registerUserConfigLoader(UserConfigLoaderFactory.getUserConfigLoader());
-          driver.registerDriverEventListener(driverEventListener);
-
-          drivers.put(driverClass, driver);
+          if (driver instanceof HiveDriver) {
+            driver.registerDriverEventListener(driverEventListener);
+          }
+          drivers.put(driverClass.getName(), driver);
           log.info("Driver for " + driverClass + " is loaded");
         } catch (Exception e) {
           log.warn("Could not load the driver:" + driverClass, e);
@@ -330,15 +328,15 @@ public class QueryExecutionServiceImpl extends 
LensService implements QueryExecu
       throw new LensException("No drivers specified");
     }
     try {
-      Class<? extends DriverSelector> driverSelectorClass = 
conf.getClass(LensConfConstants.DRIVER_SELECTOR_CLASS,
+      Class<? extends DriverSelector> driverSelectorClass = 
conf.getClass(DRIVER_SELECTOR_CLASS,
         MinQueryCostSelector.class,
         DriverSelector.class);
       log.info("Using driver selector class: " + 
driverSelectorClass.getCanonicalName());
       driverSelector = driverSelectorClass.newInstance();
     } catch (Exception e) {
       throw new LensException("Couldn't instantiate driver selector class. 
Class name: "
-        + conf.get(LensConfConstants.DRIVER_SELECTOR_CLASS) + ". Please supply 
a valid value for "
-        + LensConfConstants.DRIVER_SELECTOR_CLASS);
+        + conf.get(DRIVER_SELECTOR_CLASS) + ". Please supply a valid value for 
"
+        + DRIVER_SELECTOR_CLASS);
     }
   }
 
@@ -928,8 +926,8 @@ public class QueryExecutionServiceImpl extends LensService 
implements QueryExecu
       LOG.error(e);
       throw new IllegalStateException("Could not load drivers", e);
     }
-    maxFinishedQueries = 
conf.getInt(LensConfConstants.MAX_NUMBER_OF_FINISHED_QUERY,
-      LensConfConstants.DEFAULT_FINISHED_QUERIES);
+    maxFinishedQueries = conf.getInt(MAX_NUMBER_OF_FINISHED_QUERY,
+      DEFAULT_FINISHED_QUERIES);
     initalizeFinishedQueryStore(conf);
     log.info("Query execution service initialized");
   }
@@ -1043,12 +1041,12 @@ public class QueryExecutionServiceImpl extends 
LensService implements QueryExecu
   }
 
   private void startEstimatePool() {
-    int minPoolSize = conf.getInt(LensConfConstants.ESTIMATE_POOL_MIN_THREADS,
-      LensConfConstants.DEFAULT_ESTIMATE_POOL_MIN_THREADS);
-    int maxPoolSize = conf.getInt(LensConfConstants.ESTIMATE_POOL_MAX_THREADS,
-      LensConfConstants.DEFAULT_ESTIMATE_POOL_MAX_THREADS);
-    int keepAlive = 
conf.getInt(LensConfConstants.ESTIMATE_POOL_KEEP_ALIVE_MILLIS,
-      LensConfConstants.DEFAULT_ESTIMATE_POOL_KEEP_ALIVE_MILLIS);
+    int minPoolSize = conf.getInt(ESTIMATE_POOL_MIN_THREADS,
+      DEFAULT_ESTIMATE_POOL_MIN_THREADS);
+    int maxPoolSize = conf.getInt(ESTIMATE_POOL_MAX_THREADS,
+      DEFAULT_ESTIMATE_POOL_MAX_THREADS);
+    int keepAlive = conf.getInt(ESTIMATE_POOL_KEEP_ALIVE_MILLIS,
+      DEFAULT_ESTIMATE_POOL_KEEP_ALIVE_MILLIS);
 
     final ThreadFactory defaultFactory = Executors.defaultThreadFactory();
     final AtomicInteger thId = new AtomicInteger();
@@ -1111,8 +1109,8 @@ public class QueryExecutionServiceImpl extends 
LensService implements QueryExecu
 
       // Wait for all rewrite and estimates to finish
       try {
-        long estimateLatchTimeout = 
ctx.getConf().getLong(LensConfConstants.ESTIMATE_TIMEOUT_MILLIS,
-          LensConfConstants.DEFAULT_ESTIMATE_TIMEOUT_MILLIS);
+        long estimateLatchTimeout = 
ctx.getConf().getLong(ESTIMATE_TIMEOUT_MILLIS,
+          DEFAULT_ESTIMATE_TIMEOUT_MILLIS);
         boolean completed = 
estimateCompletionLatch.await(estimateLatchTimeout, TimeUnit.MILLISECONDS);
 
         // log operations yet to complete and  check if we can proceed with at 
least one driver
@@ -2157,7 +2155,7 @@ public class QueryExecutionServiceImpl extends 
LensService implements QueryExecu
   private QueryContext createResourceQuery(String command, LensSessionHandle 
sessionHandle, LensDriver driver)
     throws LensException {
     LensConf qconf = new LensConf();
-    qconf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, 
"false");
+    qconf.addProperty(QUERY_PERSISTENT_RESULT_INDRIVER, "false");
     QueryContext addQuery = QueryContext.createContextWithSingleDriver(command,
       getSession(sessionHandle).getLoggedInUser(), qconf, getLensConf(
         sessionHandle, qconf), driver, sessionHandle.getPublicId().toString(), 
true);
@@ -2330,7 +2328,7 @@ public class QueryExecutionServiceImpl extends 
LensService implements QueryExecu
         log.warn("Unable to get status for Result Directory", e);
         throw new NotFoundException("Http result not available for query:" + 
queryHandle.toString());
       }
-      String resultFSReadUrl = 
ctx.getConf().get(LensConfConstants.RESULT_FS_READ_URL);
+      String resultFSReadUrl = ctx.getConf().get(RESULT_FS_READ_URL);
       if (resultFSReadUrl != null) {
         try {
           URI resultReadPath = new URI(resultFSReadUrl + 
resultPath.toUri().getPath() + "?op=OPEN&user.name="

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-server/src/main/java/org/apache/lens/server/user/DatabaseUserConfigLoader.java
----------------------------------------------------------------------
diff --git 
a/lens-server/src/main/java/org/apache/lens/server/user/DatabaseUserConfigLoader.java
 
b/lens-server/src/main/java/org/apache/lens/server/user/DatabaseUserConfigLoader.java
index ce0d112..e5e91b8 100644
--- 
a/lens-server/src/main/java/org/apache/lens/server/user/DatabaseUserConfigLoader.java
+++ 
b/lens-server/src/main/java/org/apache/lens/server/user/DatabaseUserConfigLoader.java
@@ -39,7 +39,7 @@ import com.google.common.cache.CacheBuilder;
 /**
  * The Class DatabaseUserConfigLoader.
  */
-public class DatabaseUserConfigLoader extends UserConfigLoader {
+public class DatabaseUserConfigLoader implements UserConfigLoader {
 
   /** The query sql. */
   protected final String querySql;
@@ -49,6 +49,7 @@ public class DatabaseUserConfigLoader extends 
UserConfigLoader {
 
   /** The cache. */
   protected final Cache<String, Map<String, String>> cache;
+  private final HiveConf hiveConf;
 
   /** The ds. */
   protected BasicDataSource ds;
@@ -60,7 +61,7 @@ public class DatabaseUserConfigLoader extends 
UserConfigLoader {
    * @throws UserConfigLoaderException the user config loader exception
    */
   public DatabaseUserConfigLoader(HiveConf conf) throws 
UserConfigLoaderException {
-    super(conf);
+    this.hiveConf = conf;
     querySql = conf.get(LensConfConstants.USER_RESOLVER_DB_QUERY);
     keys = 
conf.get(LensConfConstants.USER_RESOLVER_DB_KEYS).split("\\s*,\\s*", -1);
     cache = CacheBuilder.newBuilder()

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-server/src/main/java/org/apache/lens/server/user/FixedUserConfigLoader.java
----------------------------------------------------------------------
diff --git 
a/lens-server/src/main/java/org/apache/lens/server/user/FixedUserConfigLoader.java
 
b/lens-server/src/main/java/org/apache/lens/server/user/FixedUserConfigLoader.java
index 5813ac0..0c53b28 100644
--- 
a/lens-server/src/main/java/org/apache/lens/server/user/FixedUserConfigLoader.java
+++ 
b/lens-server/src/main/java/org/apache/lens/server/user/FixedUserConfigLoader.java
@@ -26,29 +26,28 @@ import org.apache.lens.server.api.user.UserConfigLoader;
 
 import org.apache.hadoop.hive.conf.HiveConf;
 
+import com.google.common.collect.Maps;
+
 /**
  * The Class FixedUserConfigLoader.
  */
-public class FixedUserConfigLoader extends UserConfigLoader {
+public class FixedUserConfigLoader implements UserConfigLoader {
+
+  private final String fixedValue;
 
-  /**
-   * Instantiates a new fixed user config loader.
-   *
-   * @param conf the conf
-   */
   public FixedUserConfigLoader(HiveConf conf) {
-    super(conf);
+    fixedValue = conf.get(LensConfConstants.USER_RESOLVER_FIXED_VALUE);
   }
 
   /*
-   * (non-Javadoc)
-   *
-   * @see 
org.apache.lens.server.user.UserConfigLoader#getUserConfig(java.lang.String)
-   */
+     * (non-Javadoc)
+     *
+     * @see 
org.apache.lens.server.user.UserConfigLoader#getUserConfig(java.lang.String)
+     */
   @Override
   public Map<String, String> getUserConfig(String loggedInUser) {
-    HashMap<String, String> userConfig = new HashMap<String, String>();
-    userConfig.put(LensConfConstants.SESSION_CLUSTER_USER, 
hiveConf.get(LensConfConstants.USER_RESOLVER_FIXED_VALUE));
+    HashMap<String, String> userConfig = Maps.newHashMap();
+    userConfig.put(LensConfConstants.SESSION_CLUSTER_USER, fixedValue);
     return userConfig;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-server/src/main/java/org/apache/lens/server/user/PropertyBasedUserConfigLoader.java
----------------------------------------------------------------------
diff --git 
a/lens-server/src/main/java/org/apache/lens/server/user/PropertyBasedUserConfigLoader.java
 
b/lens-server/src/main/java/org/apache/lens/server/user/PropertyBasedUserConfigLoader.java
index 009e34a..1c025dd 100644
--- 
a/lens-server/src/main/java/org/apache/lens/server/user/PropertyBasedUserConfigLoader.java
+++ 
b/lens-server/src/main/java/org/apache/lens/server/user/PropertyBasedUserConfigLoader.java
@@ -18,10 +18,7 @@
  */
 package org.apache.lens.server.user;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
+import java.io.*;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
@@ -32,13 +29,15 @@ import 
org.apache.lens.server.api.user.UserConfigLoaderException;
 
 import org.apache.hadoop.hive.conf.HiveConf;
 
+import com.google.common.collect.Maps;
+
 /**
  * The Class PropertyBasedUserConfigLoader.
  */
-public class PropertyBasedUserConfigLoader extends UserConfigLoader {
+public class PropertyBasedUserConfigLoader implements UserConfigLoader {
 
   /** The user map. */
-  private HashMap<String, Map<String, String>> userMap;
+  private HashMap<String, Map<String, String>> userMap = Maps.newHashMap();
 
   /**
    * Instantiates a new property based user config loader.
@@ -47,10 +46,8 @@ public class PropertyBasedUserConfigLoader extends 
UserConfigLoader {
    * @throws UserConfigLoaderException the user config loader exception
    */
   public PropertyBasedUserConfigLoader(HiveConf conf) throws 
UserConfigLoaderException {
-    super(conf);
-    userMap = new HashMap<String, Map<String, String>>();
     Properties properties = new Properties();
-    String filename = 
hiveConf.get(LensConfConstants.USER_RESOLVER_PROPERTYBASED_FILENAME, null);
+    String filename = 
conf.get(LensConfConstants.USER_RESOLVER_PROPERTYBASED_FILENAME, null);
     if (filename == null) {
       throw new UserConfigLoaderException("property file path not provided for 
property based resolver."
         + "Please set property " + 
LensConfConstants.USER_RESOLVER_PROPERTYBASED_FILENAME);

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/c7261d12/lens-server/src/test/java/org/apache/lens/server/user/FooBarConfigLoader.java
----------------------------------------------------------------------
diff --git 
a/lens-server/src/test/java/org/apache/lens/server/user/FooBarConfigLoader.java 
b/lens-server/src/test/java/org/apache/lens/server/user/FooBarConfigLoader.java
index 0a319ef..d0c5816 100644
--- 
a/lens-server/src/test/java/org/apache/lens/server/user/FooBarConfigLoader.java
+++ 
b/lens-server/src/test/java/org/apache/lens/server/user/FooBarConfigLoader.java
@@ -21,8 +21,6 @@ package org.apache.lens.server.user;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.lens.server.api.error.LensException;
-import org.apache.lens.server.api.query.QueryContext;
 import org.apache.lens.server.api.user.UserConfigLoader;
 
 import org.apache.hadoop.hive.conf.HiveConf;
@@ -30,7 +28,7 @@ import org.apache.hadoop.hive.conf.HiveConf;
 /**
  * The Class FooBarConfigLoader.
  */
-public class FooBarConfigLoader extends UserConfigLoader {
+public class FooBarConfigLoader implements UserConfigLoader {
 
   /** The const hash map. */
   public static final HashMap<String, String> CONST_HASH_MAP = new 
HashMap<String, String>() {
@@ -45,7 +43,6 @@ public class FooBarConfigLoader extends UserConfigLoader {
    * @param conf the conf
    */
   public FooBarConfigLoader(HiveConf conf) {
-    super(conf);
   }
 
   /*
@@ -57,10 +54,4 @@ public class FooBarConfigLoader extends UserConfigLoader {
   public Map<String, String> getUserConfig(String loggedInUser) {
     return CONST_HASH_MAP;
   }
-
-  @Override
-  public void preSubmit(QueryContext ctx) throws LensException {
-    super.preSubmit(ctx);
-    ctx.getSelectedDriverConf().set("random.conf.key", "random.conf.value");
-  }
 }

Reply via email to