http://git-wip-us.apache.org/repos/asf/lens/blob/1a96948e/lens-server/src/test/java/org/apache/lens/server/scheduler/AlarmServiceTest.java
----------------------------------------------------------------------
diff --git 
a/lens-server/src/test/java/org/apache/lens/server/scheduler/AlarmServiceTest.java
 
b/lens-server/src/test/java/org/apache/lens/server/scheduler/AlarmServiceTest.java
new file mode 100644
index 0000000..7b610de
--- /dev/null
+++ 
b/lens-server/src/test/java/org/apache/lens/server/scheduler/AlarmServiceTest.java
@@ -0,0 +1,177 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.scheduler;
+
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.*;
+
+import org.apache.lens.api.scheduler.SchedulerJobHandle;
+import org.apache.lens.api.scheduler.XFrequency;
+import org.apache.lens.api.scheduler.XFrequencyEnum;
+import org.apache.lens.server.EventServiceImpl;
+import org.apache.lens.server.LensServerConf;
+import org.apache.lens.server.LensServices;
+import org.apache.lens.server.api.LensConfConstants;
+import org.apache.lens.server.api.error.LensException;
+import org.apache.lens.server.api.events.LensEventListener;
+import org.apache.lens.server.api.events.LensEventService;
+import org.apache.lens.server.api.events.SchedulerAlarmEvent;
+
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+import org.quartz.*;
+import org.quartz.impl.StdSchedulerFactory;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Tests for AlarmService.
+ */
+@Slf4j
+@Test(groups = "unit-test")
+public class AlarmServiceTest {
+
+  private static List<SchedulerAlarmEvent> events = new LinkedList<>();
+  private static volatile int counter = 0;
+  private final LensEventListener<SchedulerAlarmEvent> alarmEventListener;
+  private AlarmService alarmService;
+  private EventServiceImpl eventService;
+
+  {
+    alarmEventListener = new LensEventListener<SchedulerAlarmEvent>() {
+
+      @Override
+      public void onEvent(SchedulerAlarmEvent event) {
+        events.add(event);
+      }
+    };
+  }
+
+  @BeforeMethod
+  public void initializeEventsList() {
+    events = new LinkedList<>();
+  }
+
+  @BeforeTest
+  public void setUp() {
+    System.setProperty(LensConfConstants.CONFIG_LOCATION, 
"target/test-classes/");
+    LensServices.get().init(LensServerConf.getHiveConf());
+    LensServices.get().start();
+    eventService = LensServices.get().getService(LensEventService.NAME);
+    assertNotNull(eventService);
+    alarmService = LensServices.get().getService(AlarmService.NAME);
+    assertNotNull(alarmService);
+    eventService.addListenerForType(alarmEventListener, 
SchedulerAlarmEvent.class);
+  }
+
+  /**
+   * This test generally tests the basic understanding and assumptions about 
quartz framework with a sample job.
+   *
+   * @throws SchedulerException
+   * @throws InterruptedException
+   */
+  @Test
+  public void testCoreExecution() throws SchedulerException, 
InterruptedException {
+    SchedulerFactory sf = new StdSchedulerFactory();
+    Scheduler scheduler = sf.getScheduler();
+    scheduler.start();
+    // prepare a sample Job
+    JobDetail job = JobBuilder.newJob(TestJob.class).withIdentity("random", 
"group").build();
+    scheduler.scheduleJob(job, getPastPerSecondsTrigger());
+    Thread.sleep(2000);
+    Assert.assertEquals(counter, 10);
+    scheduler.deleteJob(job.getKey());
+  }
+
+  private CalendarIntervalScheduleBuilder getPerSecondCalendar() {
+    return 
CalendarIntervalScheduleBuilder.calendarIntervalSchedule().withInterval(1, 
DateBuilder.IntervalUnit.SECOND)
+        .withMisfireHandlingInstructionFireAndProceed();
+  }
+
+  private Trigger getPastPerSecondsTrigger() {
+    CalendarIntervalScheduleBuilder scheduleBuilder = getPerSecondCalendar();
+    Date start = new Date();
+    start = new Date(start.getTime() - 10000);
+    Date end = new Date();
+
+    return TriggerBuilder.newTrigger().withIdentity("trigger1", 
"group1").startAt(start).endAt(end)
+        .withSchedule(scheduleBuilder).build();
+  }
+
+  @Test
+  public void testAlarmServiceEnums() throws InterruptedException, 
LensException {
+    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-mm-dd");
+    DateTime start = formatter.parseDateTime("2016-03-03");
+    DateTime end = formatter.parseDateTime("2016-03-06");
+    SchedulerJobHandle jobHandle = new SchedulerJobHandle(UUID.randomUUID());
+    XFrequency frequency = new XFrequency();
+    frequency.setEnum(XFrequencyEnum.DAILY);
+    alarmService.schedule(start, end, frequency, jobHandle.toString());
+    Thread.sleep(2000); // give chance to the event listener to process the 
data
+    int count = 0;
+    for (SchedulerAlarmEvent event : events) {
+      if (event.getJobHandle().equals(jobHandle)) {
+        count++;
+      }
+    }
+    // 3 scheduled events, and one expired event.
+    Assert.assertEquals(count, 4);
+    DateTime expectedDate = start;
+    Set<DateTime> actualSet = new HashSet<>();
+    for (SchedulerAlarmEvent e : events) {
+      actualSet.add(e.getNominalTime());
+    }
+
+    for (int i = 0; i < actualSet.size(); i++) {
+      Assert.assertTrue(actualSet.contains(expectedDate));
+      expectedDate = expectedDate.plusDays(1);
+    }
+  }
+
+  @Test
+  public void testAlarmServiceCronExpressions() throws InterruptedException, 
LensException {
+    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-mm-dd");
+    DateTime start = formatter.parseDateTime("2016-03-03");
+    DateTime end = formatter.parseDateTime("2016-03-06");
+    SchedulerJobHandle jobHandle = new SchedulerJobHandle(UUID.randomUUID());
+    System.out.println("jobHandle = " + jobHandle);
+    XFrequency frequency = new XFrequency();
+    frequency.setCronExpression("0/1 * * * * ?");
+    alarmService.schedule(start, end, frequency, jobHandle.toString());
+    Thread.sleep(2000);
+    // Assert that the events are fired and at per second interval.
+    assertTrue(events.size() > 1);
+  }
+
+  @PersistJobDataAfterExecution
+  @DisallowConcurrentExecution
+  public static class TestJob implements Job {
+    @Override
+    public void execute(JobExecutionContext context) throws 
JobExecutionException {
+      AlarmServiceTest.counter++;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/lens/blob/1a96948e/lens-server/src/test/java/org/apache/lens/server/scheduler/SchedulerDAOTest.java
----------------------------------------------------------------------
diff --git 
a/lens-server/src/test/java/org/apache/lens/server/scheduler/SchedulerDAOTest.java
 
b/lens-server/src/test/java/org/apache/lens/server/scheduler/SchedulerDAOTest.java
index d76a586..16a6c78 100644
--- 
a/lens-server/src/test/java/org/apache/lens/server/scheduler/SchedulerDAOTest.java
+++ 
b/lens-server/src/test/java/org/apache/lens/server/scheduler/SchedulerDAOTest.java
@@ -25,10 +25,11 @@ import javax.xml.datatype.DatatypeFactory;
 import javax.xml.datatype.XMLGregorianCalendar;
 
 import org.apache.lens.api.LensSessionHandle;
+import org.apache.lens.api.query.QueryHandle;
 import org.apache.lens.api.scheduler.*;
 import org.apache.lens.server.LensServerConf;
 import org.apache.lens.server.api.LensConfConstants;
-import org.apache.lens.server.scheduler.util.UtilityMethods;
+import org.apache.lens.server.util.UtilityMethods;
 
 import org.apache.commons.dbutils.QueryRunner;
 import org.apache.hadoop.conf.Configuration;
@@ -45,12 +46,13 @@ public class SchedulerDAOTest {
 
   SchedulerDAO schedulerDAO;
   Map<SchedulerJobInstanceHandle, SchedulerJobInstanceInfo> instances = new 
HashMap<>();
+  SchedulerJobHandle jobHandle = null;
 
   @BeforeClass
   public void setup() throws Exception {
     System.setProperty(LensConfConstants.CONFIG_LOCATION, 
"target/test-classes/");
     Configuration conf = LensServerConf.getHiveConf();
-    QueryRunner runner = new 
QueryRunner(UtilityMethods.getDataSourceFromConf(conf));
+    QueryRunner runner = new 
QueryRunner(UtilityMethods.getDataSourceFromConfForScheduler(conf));
     // Cleanup all tables
     runner.update("DROP TABLE IF EXISTS job_table");
     runner.update("DROP TABLE IF EXISTS job_instance_table");
@@ -95,12 +97,13 @@ public class SchedulerDAOTest {
     return job;
   }
 
-  @Test
+  @Test(priority = 1)
   public void testStoreJob() throws Exception {
     XJob job = getTestJob();
     long currentTime = System.currentTimeMillis();
-    SchedulerJobInfo info = new 
SchedulerJobInfo(SchedulerJobHandle.fromString(UUID.randomUUID().toString()), 
job,
-        "lens", SchedulerJobStatus.NEW, currentTime, currentTime);
+    jobHandle = new SchedulerJobHandle(UUID.randomUUID());
+    SchedulerJobInfo info = new SchedulerJobInfo(jobHandle, job, "lens", 
SchedulerJobState.NEW, currentTime,
+        currentTime);
     // Store the job
     schedulerDAO.storeJob(info);
     // Retrive the stored job
@@ -108,43 +111,49 @@ public class SchedulerDAOTest {
     Assert.assertEquals(job, outJob);
   }
 
-  @Test
+  @Test(priority = 2)
   public void testStoreInstance() throws Exception {
     long currentTime = System.currentTimeMillis();
-    SchedulerJobHandle jobHandle = 
SchedulerJobHandle.fromString(UUID.randomUUID().toString());
-    SchedulerJobInstanceInfo firstInstance = new SchedulerJobInstanceInfo(
-        SchedulerJobInstanceHandle.fromString(UUID.randomUUID().toString()), 
jobHandle,
+    SchedulerJobInstanceHandle instanceHandle = new 
SchedulerJobInstanceHandle(UUID.randomUUID());
+    SchedulerJobInstanceInfo firstInstance = new 
SchedulerJobInstanceInfo(instanceHandle, jobHandle, currentTime,
+        new ArrayList<SchedulerJobInstanceRun>());
+    SchedulerJobInstanceRun run1 = new SchedulerJobInstanceRun(instanceHandle, 
1,
         new LensSessionHandle(UUID.randomUUID(), UUID.randomUUID()), 
currentTime, currentTime, "/tmp/",
-        "select * form yoda_cube", SchedulerJobInstanceStatus.WAITING, 
currentTime);
+        QueryHandle.fromString(UUID.randomUUID().toString()), 
SchedulerJobInstanceState.WAITING);
     instances.put(firstInstance.getId(), firstInstance);
     schedulerDAO.storeJobInstance(firstInstance);
+    schedulerDAO.storeJobInstanceRun(run1);
+    // Put run in the instance
+    firstInstance.getInstanceRunList().add(run1);
 
     currentTime = System.currentTimeMillis();
-    SchedulerJobInstanceInfo secondInstance = new SchedulerJobInstanceInfo(
-        SchedulerJobInstanceHandle.fromString(UUID.randomUUID().toString()), 
jobHandle,
+    instanceHandle = new SchedulerJobInstanceHandle(UUID.randomUUID());
+    SchedulerJobInstanceInfo secondInstance = new 
SchedulerJobInstanceInfo(instanceHandle, jobHandle, currentTime,
+        new ArrayList<SchedulerJobInstanceRun>());
+    SchedulerJobInstanceRun run2 = new SchedulerJobInstanceRun(instanceHandle, 
1,
         new LensSessionHandle(UUID.randomUUID(), UUID.randomUUID()), 
currentTime, currentTime, "/tmp/",
-        "select * form yoda_cube", SchedulerJobInstanceStatus.WAITING, 
currentTime);
+        QueryHandle.fromString(UUID.randomUUID().toString()), 
SchedulerJobInstanceState.WAITING);
     instances.put(secondInstance.getId(), secondInstance);
     schedulerDAO.storeJobInstance(secondInstance);
-    List<SchedulerJobInstanceHandle> handleList = 
schedulerDAO.getJobInstances(jobHandle);
+    schedulerDAO.storeJobInstanceRun(run2);
+    secondInstance.getInstanceRunList().add(run2);
+
+    List<SchedulerJobInstanceInfo> handleList = 
schedulerDAO.getJobInstances(jobHandle);
     // Size should be 2
     Assert.assertEquals(handleList.size(), 2);
     // Get the definition of instance from the store.
-    SchedulerJobInstanceInfo instance1 = 
schedulerDAO.getSchedulerJobInstanceInfo(handleList.get(0));
-    Assert.assertEquals(instances.get(handleList.get(0)), instance1);
+    SchedulerJobInstanceInfo instance1 = handleList.get(0);
+    Assert.assertEquals(instances.get(handleList.get(0).getId()), instance1);
 
-    SchedulerJobInstanceInfo instance2 = 
schedulerDAO.getSchedulerJobInstanceInfo(handleList.get(1));
-    Assert.assertEquals(instances.get(handleList.get(1)), instance2);
+    SchedulerJobInstanceInfo instance2 = handleList.get(1);
+    Assert.assertEquals(instances.get(handleList.get(1).getId()), instance2);
   }
 
-  @Test(dependsOnMethods = { "testStoreJob" })
+  @Test(priority = 2)
   public void testUpdateJob() throws Exception {
     // Get all the stored jobs.
     // update one and check if it successful.
-    List<SchedulerJobHandle> jobHandles = schedulerDAO.getJobs(null, null, 
null, null);
-    Assert.assertEquals(jobHandles.size() > 0, true);
-
-    SchedulerJobInfo jobInfo = 
schedulerDAO.getSchedulerJobInfo(jobHandles.get(0));
+    SchedulerJobInfo jobInfo = schedulerDAO.getSchedulerJobInfo(jobHandle);
     XJob newJob = getTestJob();
     jobInfo.setJob(newJob);
     schedulerDAO.updateJob(jobInfo);
@@ -152,37 +161,38 @@ public class SchedulerDAOTest {
     XJob storedJob = schedulerDAO.getJob(jobInfo.getId());
     Assert.assertEquals(storedJob, newJob);
 
-    // Change State
-    jobInfo.setState(SchedulerJobStatus.SCHEDULED);
-    schedulerDAO.updateJobState(jobInfo);
-    Assert.assertEquals(schedulerDAO.getJobState(jobInfo.getId()), 
SchedulerJobStatus.SCHEDULED);
+    // Change SchedulerJobInstanceState
+    
jobInfo.setJobState(jobInfo.getJobState().nextTransition(SchedulerJobEvent.ON_SCHEDULE));
+    schedulerDAO.updateJobStatus(jobInfo);
+    Assert.assertEquals(schedulerDAO.getJobState(jobInfo.getId()), 
SchedulerJobState.SCHEDULED);
   }
 
-  @Test(dependsOnMethods = { "testStoreInstance" })
+  @Test(priority = 3)
   public void testUpdateJobInstance() {
     SchedulerJobInstanceHandle handle = instances.keySet().iterator().next();
     SchedulerJobInstanceInfo info = instances.get(handle);
-    info.setState(SchedulerJobInstanceStatus.LAUNCHED);
-    schedulerDAO.updateJobInstanceState(info);
+    SchedulerJobInstanceRun run = info.getInstanceRunList().get(0);
+    run.setInstanceState(SchedulerJobInstanceState.LAUNCHED);
+    schedulerDAO.updateJobInstanceRun(run);
     // Get the instance
     Assert.assertEquals(schedulerDAO.getSchedulerJobInstanceInfo(handle), 
info);
   }
 
-  @Test(dependsOnMethods = { "testUpdateJob" })
+  @Test(priority = 3)
   public void testSearchStoreJob() throws Exception {
     // Store more jobs with the one user and search
     XJob job = getTestJob();
     long currentTime = System.currentTimeMillis();
     SchedulerJobInfo info = new 
SchedulerJobInfo(SchedulerJobHandle.fromString(UUID.randomUUID().toString()), 
job,
-        "lens", SchedulerJobStatus.NEW, currentTime, currentTime);
+        "lens", SchedulerJobState.NEW, currentTime, currentTime);
     // Store the job
     schedulerDAO.storeJob(info);
     info = new 
SchedulerJobInfo(SchedulerJobHandle.fromString(UUID.randomUUID().toString()), 
job, "lens",
-        SchedulerJobStatus.NEW, currentTime, currentTime);
+        SchedulerJobState.NEW, currentTime, currentTime);
     schedulerDAO.storeJob(info);
     // There should be 3 jobs till now.
     Assert.assertEquals(schedulerDAO.getJobs("lens", null, null, null).size(), 
3);
-    Assert.assertEquals(schedulerDAO.getJobs("lens", SchedulerJobStatus.NEW, 
1L, System.currentTimeMillis()).size(), 2);
-    Assert.assertEquals(schedulerDAO.getJobs("Alice", SchedulerJobStatus.NEW, 
null, null).size(), 0);
+    Assert.assertEquals(schedulerDAO.getJobs("lens", SchedulerJobState.NEW, 
1L, System.currentTimeMillis()).size(), 2);
+    Assert.assertEquals(schedulerDAO.getJobs("Alice", SchedulerJobState.NEW, 
null, null).size(), 0);
   }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/1a96948e/lens-server/src/test/java/org/apache/lens/server/scheduler/TestSchedulerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/lens-server/src/test/java/org/apache/lens/server/scheduler/TestSchedulerServiceImpl.java
 
b/lens-server/src/test/java/org/apache/lens/server/scheduler/TestSchedulerServiceImpl.java
new file mode 100644
index 0000000..ce744af
--- /dev/null
+++ 
b/lens-server/src/test/java/org/apache/lens/server/scheduler/TestSchedulerServiceImpl.java
@@ -0,0 +1,236 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.scheduler;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.List;
+import java.util.UUID;
+
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+import org.apache.lens.api.LensConf;
+import org.apache.lens.api.LensSessionHandle;
+import org.apache.lens.api.query.QueryHandle;
+import org.apache.lens.api.query.QueryStatus;
+import org.apache.lens.api.scheduler.*;
+import org.apache.lens.server.EventServiceImpl;
+import org.apache.lens.server.LensServerConf;
+import org.apache.lens.server.LensServices;
+import org.apache.lens.server.api.LensConfConstants;
+import org.apache.lens.server.api.query.QueryContext;
+import org.apache.lens.server.api.query.QueryEnded;
+import org.apache.lens.server.api.query.QueryExecutionService;
+import org.apache.lens.server.api.scheduler.SchedulerService;
+import org.apache.lens.server.query.QueryExecutionServiceImpl;
+
+import org.apache.hadoop.conf.Configuration;
+
+import org.powermock.api.mockito.PowerMockito;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Test(groups = "unit-test")
+public class TestSchedulerServiceImpl {
+
+  SchedulerServiceImpl scheduler;
+  EventServiceImpl eventService;
+  LensSessionHandle sessionHandle = null;
+
+  @BeforeMethod
+  public void setup() throws Exception {
+    System.setProperty(LensConfConstants.CONFIG_LOCATION, 
"target/test-classes/");
+  }
+
+  private void setupQueryService() throws Exception {
+    QueryExecutionService queryExecutionService = 
PowerMockito.mock(QueryExecutionService.class);
+    scheduler.setQueryService(queryExecutionService);
+    PowerMockito.when(scheduler.getQueryService()
+        .estimate(anyString(), any(LensSessionHandle.class), anyString(), 
any(LensConf.class))).thenReturn(null);
+    PowerMockito.when(scheduler.getQueryService()
+        .executeAsync(any(LensSessionHandle.class), anyString(), 
any(LensConf.class), anyString()))
+        .thenReturn(new QueryHandle(UUID.randomUUID()));
+    
PowerMockito.when(scheduler.getQueryService().cancelQuery(any(LensSessionHandle.class),
 any(QueryHandle.class)))
+        .thenReturn(true);
+    
scheduler.getSchedulerEventListener().setQueryService(queryExecutionService);
+  }
+
+  private QueryEnded mockQueryEnded(SchedulerJobInstanceHandle instanceHandle, 
QueryStatus.Status status) {
+    QueryContext mockContext = PowerMockito.mock(QueryContext.class);
+    
PowerMockito.when(mockContext.getDriverResultPath()).thenReturn("/tmp/query1/result");
+    Configuration conf = new Configuration();
+    // set the instance handle
+    conf.set("job_instance_key", instanceHandle.getHandleIdString());
+    PowerMockito.when(mockContext.getConf()).thenReturn(conf);
+    // Get the queryHandle.
+    PowerMockito.when(mockContext.getQueryHandle()).thenReturn(new 
QueryHandle(UUID.randomUUID()));
+    QueryEnded queryEnded = PowerMockito.mock(QueryEnded.class);
+    PowerMockito.when(queryEnded.getQueryContext()).thenReturn(mockContext);
+    PowerMockito.when(queryEnded.getCurrentValue()).thenReturn(status);
+    return queryEnded;
+  }
+
+  @Test(priority = 1)
+  public void testScheduler() throws Exception {
+    LensServices.get().init(LensServerConf.getHiveConf());
+    LensServices.get().start();
+    scheduler = LensServices.get().getService(SchedulerService.NAME);
+    eventService = LensServices.get().getService(EventServiceImpl.NAME);
+    setupQueryService();
+    sessionHandle = ((QueryExecutionServiceImpl) 
LensServices.get().getService(QueryExecutionService.NAME))
+        .openSession("someuser", "test", new HashMap<String, String>(), false);
+    long currentTime = System.currentTimeMillis();
+    XJob job = getTestJob("0/5 * * * * ?", currentTime, currentTime + 15000);
+    SchedulerJobHandle jobHandle = 
scheduler.submitAndScheduleJob(sessionHandle, job);
+    Assert.assertNotNull(jobHandle);
+    Assert.assertEquals(scheduler.getSchedulerDAO().getJobState(jobHandle), 
SchedulerJobState.SCHEDULED);
+    // Wait for job to finish
+    Thread.sleep(30000);
+    List<SchedulerJobInstanceInfo> instanceHandleList = 
scheduler.getSchedulerDAO().getJobInstances(jobHandle);
+    Assert.assertEquals(instanceHandleList.size() >= 3, true);
+    Assert.assertEquals(scheduler.getSchedulerDAO().getJobState(jobHandle), 
SchedulerJobState.EXPIRED);
+    // SuccessFul query
+    eventService.notifyEvent(mockQueryEnded(instanceHandleList.get(0).getId(), 
QueryStatus.Status.SUCCESSFUL));
+    // Wait, for event to get processed
+    Thread.sleep(2000);
+    // Check the instance value
+    SchedulerJobInstanceInfo info = scheduler.getSchedulerDAO()
+        .getSchedulerJobInstanceInfo(instanceHandleList.get(0).getId());
+    Assert.assertEquals(info.getInstanceRunList().size(), 1);
+    Assert.assertEquals(info.getInstanceRunList().get(0).getResultPath(), 
"/tmp/query1/result");
+    Assert.assertEquals(info.getInstanceRunList().get(0).getInstanceState(), 
SchedulerJobInstanceState.SUCCEEDED);
+  }
+
+  @Test(priority = 2)
+  public void testSuspendResume() throws Exception {
+    long currentTime = System.currentTimeMillis();
+    XJob job = getTestJob("0/10 * * * * ?", currentTime, currentTime + 180000);
+    SchedulerJobHandle jobHandle = 
scheduler.submitAndScheduleJob(sessionHandle, job);
+    Assert.assertNotNull(jobHandle);
+    Assert.assertTrue(scheduler.suspendJob(sessionHandle, jobHandle));
+    Assert.assertEquals(scheduler.getSchedulerDAO().getJobState(jobHandle), 
SchedulerJobState.SUSPENDED);
+    Assert.assertTrue(scheduler.resumeJob(sessionHandle, jobHandle));
+    Assert.assertEquals(scheduler.getSchedulerDAO().getJobState(jobHandle), 
SchedulerJobState.SCHEDULED);
+    Thread.sleep(10000);
+    Assert.assertTrue(scheduler.expireJob(sessionHandle, jobHandle));
+    Assert.assertEquals(scheduler.getSchedulerDAO().getJobState(jobHandle), 
SchedulerJobState.EXPIRED);
+  }
+
+  @Test(priority = 2)
+  public void testRerunInstance() throws Exception {
+    long currentTime = System.currentTimeMillis();
+
+    XJob job = getTestJob("0/10 * * * * ?", currentTime, currentTime + 180000);
+    SchedulerJobHandle jobHandle = 
scheduler.submitAndScheduleJob(sessionHandle, job);
+    // Wait for some instances.
+    Thread.sleep(15000);
+    List<SchedulerJobInstanceInfo> instanceHandleList = 
scheduler.getSchedulerDAO().getJobInstances(jobHandle);
+    // Mark fail
+    eventService.notifyEvent(mockQueryEnded(instanceHandleList.get(0).getId(), 
QueryStatus.Status.FAILED));
+    Thread.sleep(1000);
+    SchedulerJobInstanceInfo info = scheduler.getSchedulerDAO()
+        .getSchedulerJobInstanceInfo(instanceHandleList.get(0).getId());
+    // First run
+    Assert.assertEquals(info.getInstanceRunList().size(), 1);
+    Assert.assertEquals(info.getInstanceRunList().get(0).getInstanceState(), 
SchedulerJobInstanceState.FAILED);
+
+    // Rerun
+    Assert.assertTrue(scheduler.rerunInstance(sessionHandle, 
instanceHandleList.get(0).getId()));
+    Thread.sleep(5000);
+    eventService.notifyEvent(mockQueryEnded(instanceHandleList.get(0).getId(), 
QueryStatus.Status.SUCCESSFUL));
+    Thread.sleep(1000);
+    info = 
scheduler.getSchedulerDAO().getSchedulerJobInstanceInfo(instanceHandleList.get(0).getId());
+    // There should be 2 reruns.
+    Assert.assertEquals(info.getInstanceRunList().size(), 2);
+    Assert.assertEquals(info.getInstanceRunList().get(1).getResultPath(), 
"/tmp/query1/result");
+    Assert.assertEquals(info.getInstanceRunList().get(1).getInstanceState(), 
SchedulerJobInstanceState.SUCCEEDED);
+    Assert.assertTrue(scheduler.expireJob(sessionHandle, jobHandle));
+    Assert.assertEquals(scheduler.getSchedulerDAO().getJobState(jobHandle), 
SchedulerJobState.EXPIRED);
+  }
+
+  @Test(priority = 2)
+  public void testKillRunningInstance() throws Exception {
+    long currentTime = System.currentTimeMillis();
+
+    XJob job = getTestJob("0/5 * * * * ?", currentTime, currentTime + 180000);
+    SchedulerJobHandle jobHandle = 
scheduler.submitAndScheduleJob(sessionHandle, job);
+    // Let it run
+    Thread.sleep(6000);
+    List<SchedulerJobInstanceInfo> instanceHandleList = 
scheduler.getSchedulerDAO().getJobInstances(jobHandle);
+    Assert.assertTrue(scheduler.killInstance(sessionHandle, 
instanceHandleList.get(0).getId()));
+    Thread.sleep(2000);
+    SchedulerJobInstanceInfo info = scheduler.getSchedulerDAO()
+        .getSchedulerJobInstanceInfo(instanceHandleList.get(0).getId());
+    Assert.assertEquals(info.getInstanceRunList().size(), 1);
+    Assert.assertEquals(info.getInstanceRunList().get(0).getInstanceState(), 
SchedulerJobInstanceState.RUNNING);
+    // Query End event
+    eventService.notifyEvent(mockQueryEnded(instanceHandleList.get(0).getId(), 
QueryStatus.Status.CANCELED));
+    Thread.sleep(2000);
+    info = 
scheduler.getSchedulerDAO().getSchedulerJobInstanceInfo(instanceHandleList.get(0).getId());
+    Assert.assertEquals(info.getInstanceRunList().get(0).getInstanceState(), 
SchedulerJobInstanceState.KILLED);
+    Assert.assertTrue(scheduler.expireJob(sessionHandle, jobHandle));
+    Assert.assertEquals(scheduler.getSchedulerDAO().getJobState(jobHandle), 
SchedulerJobState.EXPIRED);
+  }
+
+  private XTrigger getTestTrigger(String cron) {
+    XTrigger trigger = new XTrigger();
+    XFrequency frequency = new XFrequency();
+    frequency.setCronExpression(cron);
+    frequency.setTimezone("UTC");
+    trigger.setFrequency(frequency);
+    return trigger;
+  }
+
+  private XExecution getTestExecution() {
+    XExecution execution = new XExecution();
+    XJobQuery query = new XJobQuery();
+    query.setQuery("select ID from test_table");
+    execution.setQuery(query);
+    XSessionType sessionType = new XSessionType();
+    sessionType.setDb("test");
+    execution.setSession(sessionType);
+    return execution;
+  }
+
+  private XJob getTestJob(String cron, long start, long end) throws Exception {
+    XJob job = new XJob();
+    job.setTrigger(getTestTrigger(cron));
+    job.setName("Test lens Job");
+    GregorianCalendar startTime = new GregorianCalendar();
+    startTime.setTimeInMillis(start);
+    XMLGregorianCalendar startCal = 
DatatypeFactory.newInstance().newXMLGregorianCalendar(startTime);
+
+    GregorianCalendar endTime = new GregorianCalendar();
+    endTime.setTimeInMillis(end);
+    XMLGregorianCalendar endCal = 
DatatypeFactory.newInstance().newXMLGregorianCalendar(endTime);
+
+    job.setStartTime(startCal);
+    job.setEndTime(endCal);
+    job.setExecution(getTestExecution());
+    return job;
+  }
+}

http://git-wip-us.apache.org/repos/asf/lens/blob/1a96948e/lens-server/src/test/java/org/apache/lens/server/scheduler/notification/services/AlarmServiceTest.java
----------------------------------------------------------------------
diff --git 
a/lens-server/src/test/java/org/apache/lens/server/scheduler/notification/services/AlarmServiceTest.java
 
b/lens-server/src/test/java/org/apache/lens/server/scheduler/notification/services/AlarmServiceTest.java
deleted file mode 100644
index 06883ae..0000000
--- 
a/lens-server/src/test/java/org/apache/lens/server/scheduler/notification/services/AlarmServiceTest.java
+++ /dev/null
@@ -1,180 +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.scheduler.notification.services;
-
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-
-import java.util.*;
-
-import org.apache.lens.api.scheduler.SchedulerJobHandle;
-import org.apache.lens.api.scheduler.XFrequency;
-import org.apache.lens.api.scheduler.XFrequencyEnum;
-import org.apache.lens.server.EventServiceImpl;
-import org.apache.lens.server.LensServerConf;
-import org.apache.lens.server.LensServices;
-import org.apache.lens.server.api.LensConfConstants;
-import org.apache.lens.server.api.error.LensException;
-import org.apache.lens.server.api.events.LensEventListener;
-import org.apache.lens.server.api.events.LensEventService;
-import org.apache.lens.server.api.events.SchedulerAlarmEvent;
-
-import org.joda.time.DateTime;
-import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.DateTimeFormatter;
-
-import org.quartz.*;
-import org.quartz.impl.StdSchedulerFactory;
-
-import org.testng.Assert;
-import org.testng.annotations.*;
-
-import lombok.extern.slf4j.Slf4j;
-/**
- * Tests for AlarmService.
- */
-@Slf4j
-@Test(groups = "unit-test")
-public class AlarmServiceTest {
-
-  private AlarmService alarmService;
-
-  private EventServiceImpl eventService;
-
-  private static List<SchedulerAlarmEvent> events = new LinkedList<>();
-
-  private static volatile int counter = 0;
-
-  private final LensEventListener<SchedulerAlarmEvent> alarmEventListener = new
-    LensEventListener<SchedulerAlarmEvent>() {
-
-    @Override
-    public void onEvent(SchedulerAlarmEvent event) {
-      events.add(event);
-    }
-  };
-
-  @BeforeMethod
-  public void initializeEventsList() {
-    events = new LinkedList<>();
-  }
-
-  @BeforeTest
-  public void setUp() {
-    System.setProperty(LensConfConstants.CONFIG_LOCATION, 
"target/test-classes/");
-    LensServices.get().init(LensServerConf.getHiveConf());
-    LensServices.get().start();
-    eventService = LensServices.get().getService(LensEventService.NAME);
-    assertNotNull(eventService);
-    alarmService = LensServices.get().getService(AlarmService.NAME);
-    assertNotNull(alarmService);
-    eventService.addListenerForType(alarmEventListener, 
SchedulerAlarmEvent.class);
-  }
-
-  /**
-   * This test generally tests the basic understanding and assumptions about 
quartz framework with a sample job.
-   *
-   * @throws SchedulerException
-   * @throws InterruptedException
-   */
-  @Test
-  public void testCoreExecution() throws SchedulerException, 
InterruptedException {
-    SchedulerFactory sf = new StdSchedulerFactory();
-    Scheduler scheduler = sf.getScheduler();
-    scheduler.start();
-    try {
-      // prepare a sample Job
-      JobDetail job = JobBuilder.newJob(TestJob.class).withIdentity("random", 
"group").build();
-      scheduler.scheduleJob(job, getPastPerSecondsTrigger());
-      Thread.sleep(2000);
-      Assert.assertEquals(counter, 10);
-    } finally {
-      scheduler.shutdown();
-    }
-  }
-
-  private CalendarIntervalScheduleBuilder  getPerSecondCalendar() {
-    return CalendarIntervalScheduleBuilder.calendarIntervalSchedule()
-      .withInterval(1, DateBuilder.IntervalUnit.SECOND)
-      .withMisfireHandlingInstructionFireAndProceed();
-  }
-  private Trigger getPastPerSecondsTrigger() {
-    CalendarIntervalScheduleBuilder scheduleBuilder = getPerSecondCalendar();
-    Date start = new Date();
-    start = new Date(start.getTime() - 10000);
-    Date end = new Date();
-
-    return TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
-      .startAt(start).endAt(end).withSchedule(scheduleBuilder).build();
-  }
-
-
-  @PersistJobDataAfterExecution
-  @DisallowConcurrentExecution
-  public static class TestJob implements Job {
-    @Override
-    public void execute(JobExecutionContext context) throws 
JobExecutionException {
-      AlarmServiceTest.counter++;
-    }
-  }
-
-  @Test
-  public void testAlarmServiceEnums() throws InterruptedException, 
LensException {
-    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-mm-dd");
-    DateTime start = formatter.parseDateTime("2016-03-03");
-    DateTime end = formatter.parseDateTime("2016-03-06");
-    SchedulerJobHandle jobHandle = new SchedulerJobHandle(UUID.randomUUID());
-    XFrequency frequency = new XFrequency();
-    frequency.setEnum(XFrequencyEnum.DAILY);
-    alarmService.schedule(start, end, frequency, jobHandle.toString());
-    Thread.sleep(2000); // give chance to the event listener to process the 
data
-    int count = 0;
-    for (SchedulerAlarmEvent event : events) {
-      if (event.getJobHandle().equals(jobHandle)) {
-        count++;
-      }
-    }
-    Assert.assertEquals(count, 3);
-    DateTime expectedDate = start;
-    Set<DateTime> actualSet = new HashSet<>();
-    for (SchedulerAlarmEvent e : events) {
-      actualSet.add(e.getNominalTime());
-    }
-
-    for (int i = 0; i < 3; i++) {
-      Assert.assertTrue(actualSet.contains(expectedDate));
-      expectedDate = expectedDate.plusDays(1);
-    }
-  }
-
-  @Test
-  public void testAlarmServiceCronExpressions() throws InterruptedException, 
LensException {
-    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-mm-dd");
-    DateTime start = formatter.parseDateTime("2016-03-03");
-    DateTime end = formatter.parseDateTime("2016-03-06");
-    SchedulerJobHandle jobHandle = new SchedulerJobHandle(UUID.randomUUID());
-    System.out.println("jobHandle = " + jobHandle);
-    XFrequency frequency = new XFrequency();
-    frequency.setCronExpression("0/1 * * * * ?");
-    alarmService.schedule(start, end, frequency, jobHandle.toString());
-    Thread.sleep(2000);
-    // Assert that the events are fired and at per second interval.
-    assertTrue(events.size() > 1);
-  }
-}

http://git-wip-us.apache.org/repos/asf/lens/blob/1a96948e/src/site/apt/admin/config.apt
----------------------------------------------------------------------
diff --git a/src/site/apt/admin/config.apt b/src/site/apt/admin/config.apt
index d9b2a19..db859e6 100644
--- a/src/site/apt/admin/config.apt
+++ b/src/site/apt/admin/config.apt
@@ -40,235 +40,229 @@ Lens server configuration
 *--+--+---+--+
 |8|hive.server2.logging.operation.enabled|false|Disable the operation logging, 
since there are no execution operation happening in lens session. Keeping it 
true might conflict with Hive Server if both are running on the same machine 
causing disappearance of the operation log directory.|
 *--+--+---+--+
-|9|lens.server.appevent.ws.listener.impl|org.apache.lens.server.LensApplicationListener|Implementation
 class for Lens Application Listener|
+|9|lens.query.current.time.millis|0|Query current time in millis. This is used 
to resolve 'now'. If value is set to zero, 'now' is resolved to current value|
 *--+--+---+--+
-|10|lens.server.base.url|http://0.0.0.0:9999/lensapi/|The base url for the 
lens server|
+|10|lens.server.appevent.ws.listener.impl|org.apache.lens.server.LensApplicationListener|Implementation
 class for Lens Application Listener|
 *--+--+---+--+
-|11|lens.server.consistentState.ws.filter.impl|org.apache.lens.server.ConsistentStateFilter|Implementation
 class for ConsistentState Filter|
+|11|lens.server.base.url|http://0.0.0.0:9999/lensapi/|The base url for the 
lens server|
 *--+--+---+--+
-|12|lens.server.database.resource.dir|/tmp/lens/resources|Top level directory 
to store database specific static resources which are added to each database. 
To add a static resource for a DB, create a directory with the same name as 
that of the DB under this directory, and place the resources inside the DB 
directory. Any subdirectories under the DB directory and the resources under 
them will be ignored|
+|12|lens.server.consistentState.ws.filter.impl|org.apache.lens.server.ConsistentStateFilter|Implementation
 class for ConsistentState Filter|
 *--+--+---+--+
-|13|lens.server.db.driver.name|org.hsqldb.jdbcDriver|Database driver for 
database where Finished queries have to be stored. Also used for database based 
user config loaders|
+|13|lens.server.database.resource.dir|/tmp/lens/resources|Top level directory 
to store database specific static resources which are added to each database. 
To add a static resource for a DB, create a directory with the same name as 
that of the DB under this directory, and place the resources inside the DB 
directory. Any subdirectories under the DB directory and the resources under 
them will be ignored|
 *--+--+---+--+
-|14|lens.server.db.jdbc.pass| |JDBC Password for Finished queries table. Also 
used for database based user config loaders|
+|14|lens.server.db.driver.name|org.hsqldb.jdbcDriver|Database driver for 
database where Finished queries have to be stored. Also used for database based 
user config loaders|
 *--+--+---+--+
-|15|lens.server.db.jdbc.url|jdbc:hsqldb:/tmp/lensserver/queries.db|JDBC URL 
where the database for storing finished queries is located. Also used for 
database based user config loaders|
+|15|lens.server.db.jdbc.pass| |JDBC Password for Finished queries table. Also 
used for database based user config loaders|
 *--+--+---+--+
-|16|lens.server.db.jdbc.user|SA|JDBC User for Finished queries table. Also 
used for database based user config loaders|
+|16|lens.server.db.jdbc.url|jdbc:hsqldb:/tmp/lensserver/queries.db|JDBC URL 
where the database for storing finished queries is located. Also used for 
database based user config loaders|
 *--+--+---+--+
-|17|lens.server.db.validation.query|select 1 from 
INFORMATION_SCHEMA.SYSTEM_USERS|BasicDatasource has a config parameter called 
validationQuery. This query is run before passing the Datasource to the 
application to verify if connection is valid.\ |
+|17|lens.server.db.jdbc.user|SA|JDBC User for Finished queries table. Also 
used for database based user config loaders|
+*--+--+---+--+
+|18|lens.server.db.validation.query|select 1 from 
INFORMATION_SCHEMA.SYSTEM_USERS|BasicDatasource has a config parameter called 
validationQuery. This query is run before passing the Datasource to the 
application to verify if connection is valid.\ |
 |  |                               |                                           
  |{{{http://commons.apache.org/proper/commons-dbcp/configuration.html}dbcp 
configuration}}                                                                 
          \ |
 |  |                               |                                           
  
|{{{http://stackoverflow.com/questions/10684244/dbcp-validationquery-for-different-databases}validationquery
 for different databases}}                              \ |
 |  |                               |                                           
  |                                                                             
                                                                                
        |
 *--+--+---+--+
-|18|lens.server.domain|company.com|Server domain. This will be used in 
authentication and Sending emails to users. For the server, the username will 
be without domain and domain will come through conf.|
+|19|lens.server.domain|company.com|Server domain. This will be used in 
authentication and Sending emails to users. For the server, the username will 
be without domain and domain will come through conf.|
 *--+--+---+--+
-|19|lens.server.driver.selector.class|org.apache.lens.server.api.driver.MinQueryCostSelector|Class
 for selecting best driver given the query context|
+|20|lens.server.driver.selector.class|org.apache.lens.server.api.driver.MinQueryCostSelector|Class
 for selecting best driver given the query context|
 *--+--+---+--+
-|20|lens.server.drivers|hive:org.apache.lens.driver.hive.HiveDriver|Drivers 
enabled for this lens server instance|
+|21|lens.server.drivers|hive:org.apache.lens.driver.hive.HiveDriver|Drivers 
enabled for this lens server instance|
 *--+--+---+--+
-|21|lens.server.duplicate.query.allowed|false|If this is false and same query 
is submitted by a user in the same session and with the same configuration 
while earlier query is not completed then lens server will return the handle of 
the previous query|
+|22|lens.server.duplicate.query.allowed|false|If this is false and same query 
is submitted by a user in the same session and with the same configuration 
while earlier query is not completed then lens server will return the handle of 
the previous query|
 *--+--+---+--+
-|22|lens.server.enable.console.metrics|false|Enable metrics to be reported on 
console|
+|23|lens.server.enable.console.metrics|false|Enable metrics to be reported on 
console|
 *--+--+---+--+
-|23|lens.server.enable.csv.metrics|false|Enable metrics to be reported as csv 
files in a directory|
+|24|lens.server.enable.csv.metrics|false|Enable metrics to be reported as csv 
files in a directory|
 *--+--+---+--+
-|24|lens.server.enable.ganglia.metrics|false|Enable metrics to be reported on 
ganglia|
+|25|lens.server.enable.ganglia.metrics|false|Enable metrics to be reported on 
ganglia|
 *--+--+---+--+
-|25|lens.server.enable.graphite.metrics|false|Enable metrics to be reported on 
graphite|
+|26|lens.server.enable.graphite.metrics|false|Enable metrics to be reported on 
graphite|
 *--+--+---+--+
-|26|lens.server.enable.resource.method.metering|false|Whether to Enable 
metering for all resource methods.|
+|27|lens.server.enable.resource.method.metering|false|Whether to Enable 
metering for all resource methods.|
 *--+--+---+--+
-|27|lens.server.estimate.pool.keepalive.millis|60000|Thread keep alive time in 
milliseconds for the estimate thread pool. If there are no estimate requests 
for this period,then cached threads are released from the pool.|
+|28|lens.server.estimate.pool.keepalive.millis|60000|Thread keep alive time in 
milliseconds for the estimate thread pool. If there are no estimate requests 
for this period,then cached threads are released from the pool.|
 *--+--+---+--+
-|28|lens.server.estimate.pool.max.threads|100|Maximum number of threads in the 
estimate thread pool|
+|29|lens.server.estimate.pool.max.threads|100|Maximum number of threads in the 
estimate thread pool|
 *--+--+---+--+
-|29|lens.server.estimate.pool.min.threads|3|Minimum number of threads in the 
estimate thread pool|
+|30|lens.server.estimate.pool.min.threads|3|Minimum number of threads in the 
estimate thread pool|
 *--+--+---+--+
-|30|lens.server.estimate.timeout.millis|300000|Timeout for parallel query 
estimate calls in milliseconds. A driver needs to comeback with a query 
estimate within this timeout. If the timeout is reached, only the drivers that 
have provided an estimate would be considered for query selection. If the 
timeout is reached and none of the drivers have provided an estimate then 
estimate calls fails with an exception.|
+|31|lens.server.estimate.timeout.millis|300000|Timeout for parallel query 
estimate calls in milliseconds. A driver needs to comeback with a query 
estimate within this timeout. If the timeout is reached, only the drivers that 
have provided an estimate would be considered for query selection. If the 
timeout is reached and none of the drivers have provided an estimate then 
estimate calls fails with an exception.|
 *--+--+---+--+
-|31|lens.server.event.service.thread.pool.size| |The size of thread pool for 
notifying events. The no value is specified, it uses the available processors 
as the number.|
+|32|lens.server.event.service.thread.pool.size| |The size of thread pool for 
notifying events. The no value is specified, it uses the available processors 
as the number.|
 *--+--+---+--+
-|32|lens.server.hdfs.output.retention|1 day|hdfs output retention period. 
Default 1 day|
+|33|lens.server.hdfs.output.retention|1 day|hdfs output retention period. 
Default 1 day|
 *--+--+---+--+
-|33|lens.server.index.ws.resource.impl|org.apache.lens.server.IndexResource|Implementation
 class for Index Resource|
+|34|lens.server.index.ws.resource.impl|org.apache.lens.server.IndexResource|Implementation
 class for Index Resource|
 *--+--+---+--+
-|34|lens.server.inmemory.resultset.ttl.secs|300|This property defines the 
TTL(time to live) in seconds for all result sets of type InMemoryResultSet 
beyond which they are eligible for purging irrespective of whether the result 
set has been read or not. The default value is 300 seconds (5 minutes).|
+|35|lens.server.inmemory.resultset.ttl.secs|300|This property defines the 
TTL(time to live) in seconds for all result sets of type InMemoryResultSet 
beyond which they are eligible for purging irrespective of whether the result 
set has been read or not. The default value is 300 seconds (5 minutes).|
 *--+--+---+--+
-|35|lens.server.launcher.pool.keepalive.millis|60000|Thread keep alive time in 
milliseconds for the query launcher thread pool. If there are no query launches 
for this period,then cached threads will be released from the pool.|
+|36|lens.server.launcher.pool.keepalive.millis|60000|Thread keep alive time in 
milliseconds for the query launcher thread pool. If there are no query launches 
for this period,then cached threads will be released from the pool.|
 *--+--+---+--+
-|36|lens.server.launcher.pool.max.threads|100|Maximum number of threads in the 
query launcher thread pool. Keeping the default to hundred, we may never grow 
till there, it would go to max for concurrrent queries allowed on all drivers 
together. This value should be greater than the max concurrent queries allowed 
on all drivers.|
+|37|lens.server.launcher.pool.max.threads|100|Maximum number of threads in the 
query launcher thread pool. Keeping the default to hundred, we may never grow 
till there, it would go to max for concurrrent queries allowed on all drivers 
together. This value should be greater than the max concurrent queries allowed 
on all drivers.|
 *--+--+---+--+
-|37|lens.server.launcher.pool.min.threads|3|Minimum number of threads in the 
query launcher thread pool|
+|38|lens.server.launcher.pool.min.threads|3|Minimum number of threads in the 
query launcher thread pool|
 *--+--+---+--+
-|38|lens.server.log.ws.resource.impl|org.apache.lens.server.LogResource|Implementation
 class for Log Resource|
+|39|lens.server.log.ws.resource.impl|org.apache.lens.server.LogResource|Implementation
 class for Log Resource|
 *--+--+---+--+
-|39|lens.server.mail.from.address|[email protected]|The from field in the 
notifier mail to the submitter.|
+|40|lens.server.mail.from.address|[email protected]|The from field in the 
notifier mail to the submitter.|
 *--+--+---+--+
-|40|lens.server.mail.host|mail-host.company.com|SMTP Host for sending mail|
+|41|lens.server.mail.host|mail-host.company.com|SMTP Host for sending mail|
 *--+--+---+--+
-|41|lens.server.mail.port|25|SMTP Port|
+|42|lens.server.mail.port|25|SMTP Port|
 *--+--+---+--+
-|42|lens.server.mail.smtp.connectiontimeout|15000|Socket connection timeout 
value in milliseconds. This timeout is implemented by java.net.Socket. Default 
is 15 seconds.|
+|43|lens.server.mail.smtp.connectiontimeout|15000|Socket connection timeout 
value in milliseconds. This timeout is implemented by java.net.Socket. Default 
is 15 seconds.|
 *--+--+---+--+
-|43|lens.server.mail.smtp.timeout|30000|Socket read timeout value in 
milliseconds. This timeout is implemented by java.net.Socket. Default is 30 
seconds.|
+|44|lens.server.mail.smtp.timeout|30000|Socket read timeout value in 
milliseconds. This timeout is implemented by java.net.Socket. Default is 30 
seconds.|
 *--+--+---+--+
-|44|lens.server.max.sessions.per.user|10|Number of sessions can be allowed for 
each user. User has to close one of the active sessions to open a new session 
once limit is reached. Otherwise Server throws an exception by saying that 
opened session limit has been already reached for user.|
+|45|lens.server.max.sessions.per.user|10|Number of sessions can be allowed for 
each user. User has to close one of the active sessions to open a new session 
once limit is reached. Otherwise Server throws an exception by saying that 
opened session limit has been already reached for user.|
 *--+--+---+--+
-|45|lens.server.metastore.service.impl|org.apache.lens.server.metastore.CubeMetastoreServiceImpl|Implementation
 class for metastore service|
+|46|lens.server.metastore.service.impl|org.apache.lens.server.metastore.CubeMetastoreServiceImpl|Implementation
 class for metastore service|
 *--+--+---+--+
-|46|lens.server.metastore.ws.resource.impl|org.apache.lens.server.metastore.MetastoreResource|Implementation
 class for Metastore Resource|
+|47|lens.server.metastore.ws.resource.impl|org.apache.lens.server.metastore.MetastoreResource|Implementation
 class for Metastore Resource|
 *--+--+---+--+
-|47|lens.server.metrics.csv.directory.path|metrics/|Path of the directory in 
which to report metrics as separate csv files.|
+|48|lens.server.metrics.csv.directory.path|metrics/|Path of the directory in 
which to report metrics as separate csv files.|
 *--+--+---+--+
-|48|lens.server.metrics.ganglia.host| |The ganglia host name|
+|49|lens.server.metrics.ganglia.host| |The ganglia host name|
 *--+--+---+--+
-|49|lens.server.metrics.ganglia.port| |The ganglia port|
+|50|lens.server.metrics.ganglia.port| |The ganglia port|
 *--+--+---+--+
-|50|lens.server.metrics.graphite.host| |The graphite host name|
+|51|lens.server.metrics.graphite.host| |The graphite host name|
 *--+--+---+--+
-|51|lens.server.metrics.graphite.port| |The graphite port|
+|52|lens.server.metrics.graphite.port| |The graphite port|
 *--+--+---+--+
-|52|lens.server.metrics.reporting.period|10|The reporting period for metrics. 
The value is in seconds|
+|53|lens.server.metrics.reporting.period|10|The reporting period for metrics. 
The value is in seconds|
 *--+--+---+--+
-|53|lens.server.mode|OPEN|The mode in which server should run. Allowed values 
are OPEN, READ_ONLY, METASTORE_READONLY, METASTORE_NODROP. OPEN mode will allow 
all requests. READ_ONLY mode will allow all requests on session resouce and 
only GET requests on all other resources. METASTORE_READONLY will allow GET on 
metastore and all other requests in other services. METASTORE_NODROP will not 
allow DELETE on metastore, will allow all other requests.|
+|54|lens.server.mode|OPEN|The mode in which server should run. Allowed values 
are OPEN, READ_ONLY, METASTORE_READONLY, METASTORE_NODROP. OPEN mode will allow 
all requests. READ_ONLY mode will allow all requests on session resouce and 
only GET requests on all other resources. METASTORE_READONLY will allow GET on 
metastore and all other requests in other services. METASTORE_NODROP will not 
allow DELETE on metastore, will allow all other requests.|
 *--+--+---+--+
-|54|lens.server.moxyjson.ws.feature.impl|org.glassfish.jersey.moxy.json.MoxyJsonFeature|Enable
 Moxy json feature|
+|55|lens.server.moxyjson.ws.feature.impl|org.glassfish.jersey.moxy.json.MoxyJsonFeature|Enable
 Moxy json feature|
 *--+--+---+--+
-|55|lens.server.moxyjsonconfigresovler.ws.feature.impl|org.apache.lens.api.util.MoxyJsonConfigurationContextResolver|Moxy
 json configuration resolver|
+|56|lens.server.moxyjsonconfigresovler.ws.feature.impl|org.apache.lens.api.util.MoxyJsonConfigurationContextResolver|Moxy
 json configuration resolver|
 *--+--+---+--+
-|56|lens.server.multipart.ws.feature.impl|org.glassfish.jersey.media.multipart.MultiPartFeature|Implementation
 class for query scheduler resource|
+|57|lens.server.multipart.ws.feature.impl|org.glassfish.jersey.media.multipart.MultiPartFeature|Implementation
 class for query scheduler resource|
 *--+--+---+--+
-|57|lens.server.persist.location|file:///tmp/lensserver|The directory in which 
lens server will persist its state when it is going down. The location be on 
any Hadoop compatible file system. Server will read from the location when it 
is restarted and recovery is enabled. So, Server should have both read and 
write permissions to the location|
+|58|lens.server.persist.location|file:///tmp/lensserver|The directory in which 
lens server will persist its state when it is going down. The location be on 
any Hadoop compatible file system. Server will read from the location when it 
is restarted and recovery is enabled. So, Server should have both read and 
write permissions to the location|
 *--+--+---+--+
-|58|lens.server.query.acceptors| |Query Acceptors configured. Query acceptors 
are consulted first, before anything happens for the given query. They can 
either return null or return a messaging indicating why the given query 
shouldn't be accepted. These can be used to filter out queries at the earliest.|
+|59|lens.server.query.acceptors| |Query Acceptors configured. Query acceptors 
are consulted first, before anything happens for the given query. They can 
either return null or return a messaging indicating why the given query 
shouldn't be accepted. These can be used to filter out queries at the earliest.|
 *--+--+---+--+
-|59|lens.server.query.launching.constraint.factories|org.apache.lens.server.query.constraint.TotalQueryCostCeilingConstraintFactory|Factories
 used to instantiate constraints enforced on queries by lens. Every Factory 
should be an implementation of 
org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory and create 
an implementation of 
org.apache.lens.server.api.query.constraint.QueryLaunchingConstraint. A query 
will be launched only if all constraints pass.|
+|60|lens.server.query.launching.constraint.factories|org.apache.lens.server.query.constraint.TotalQueryCostCeilingConstraintFactory|Factories
 used to instantiate constraints enforced on queries by lens. Every Factory 
should be an implementation of 
org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory and create 
an implementation of 
org.apache.lens.server.api.query.constraint.QueryLaunchingConstraint. A query 
will be launched only if all constraints pass.|
 *--+--+---+--+
-|60|lens.server.query.phase1.rewriters| |Query phase 1 rewriters. This is to 
convert user query to cube query. The resulting cube query will be passed for 
validation and rewriting to hql query.\ |
+|61|lens.server.query.phase1.rewriters| |Query phase 1 rewriters. This is to 
convert user query to cube query. The resulting cube query will be passed for 
validation and rewriting to hql query.\ |
 |  |                                  | |Use cases will be to use extra 
intelligence to convert user query to optimized cube query.                     
                                         \ |
 |  |                                  | |Or define shortcuts for certain 
frequently used queries :)                                                      
                                          |
 *--+--+---+--+
-|61|lens.server.query.resultset.retention|1 day|Lens query resultset retention 
period. Default 1 day|
-*--+--+---+--+
-|62|lens.server.query.service.impl|org.apache.lens.server.query.QueryExecutionServiceImpl|Implementation
 class for query execution service|
-*--+--+---+--+
-|63|lens.server.query.state.logger.enabled|true|Disable or enable the query 
state logger with this config. The location for the logger can be specified in 
logback xml for the class 
org.apache.lens.server.query.QueryExecutionServiceImpl.QueryStatusLogger|
-*--+--+---+--+
-|64|lens.server.query.ws.resource.impl|org.apache.lens.server.query.QueryServiceResource|Implementation
 class for Query Resource|
-*--+--+---+--+
-|65|lens.server.querypurger.sleep.interval|10000|The interval(milliseconds) 
with which purger to run periodically. Default 10 sec.|
+|62|lens.server.query.resultset.retention|1 day|Lens query resultset retention 
period. Default 1 day|
 *--+--+---+--+
-|66|lens.server.quota.service.impl|org.apache.lens.server.quota.QuotaServiceImpl|Implementation
 class for quota service|
+|63|lens.server.query.service.impl|org.apache.lens.server.query.QueryExecutionServiceImpl|Implementation
 class for query execution service|
 *--+--+---+--+
-|67|lens.server.quota.ws.resource.impl|org.apache.lens.server.quota.QuotaResource|Implementation
 class for Quota Resource|
+|64|lens.server.query.state.logger.enabled|true|Disable or enable the query 
state logger with this config. The location for the logger can be specified in 
logback xml for the class 
org.apache.lens.server.query.QueryExecutionServiceImpl.QueryStatusLogger|
 *--+--+---+--+
-|68|lens.server.requestlogger.ws.filter.impl|org.apache.lens.server.LensRequestLoggingFilter|Implementation
 class for Request logging Filter|
+|65|lens.server.query.ws.resource.impl|org.apache.lens.server.query.QueryServiceResource|Implementation
 class for Query Resource|
 *--+--+---+--+
-|69|lens.server.resultset.purge.enabled|false|Whether to purge the query 
results|
+|66|lens.server.querypurger.sleep.interval|10000|The interval(milliseconds) 
with which purger to run periodically. Default 10 sec.|
 *--+--+---+--+
-|70|lens.server.resultsetpurger.sleep.interval.secs|3600|Periodicity for Query 
result purger runs. Default 1 hour.|
+|67|lens.server.quota.service.impl|org.apache.lens.server.quota.QuotaServiceImpl|Implementation
 class for quota service|
 *--+--+---+--+
-|71|lens.server.savedquery.jdbc.dialectclass|org.apache.lens.server.query.save.SavedQueryDao$HSQLDialect|Dialect
 of the target DB, Default is HSQL. Override with the target DB used.|
+|68|lens.server.quota.ws.resource.impl|org.apache.lens.server.quota.QuotaResource|Implementation
 class for Quota Resource|
 *--+--+---+--+
-|72|lens.server.savedquery.list.default.count|20|Key denoting the default 
fetch value of saved query list api.|
+|69|lens.server.requestlogger.ws.filter.impl|org.apache.lens.server.LensRequestLoggingFilter|Implementation
 class for Request logging Filter|
 *--+--+---+--+
-|73|lens.server.savedquery.list.default.offset|0|Key denoting the default 
start value of saved query list api.|
+|70|lens.server.resultset.purge.enabled|false|Whether to purge the query 
results|
 *--+--+---+--+
-|74|lens.server.savedquery.service.impl|org.apache.lens.server.query.save.SavedQueryServiceImpl|Implementation
 class for saved query service|
+|71|lens.server.resultsetpurger.sleep.interval.secs|3600|Periodicity for Query 
result purger runs. Default 1 hour.|
 *--+--+---+--+
-|75|lens.server.savedquery.ws.resource.impl|org.apache.lens.server.query.save.SavedQueryResource|Implementation
 class for Saved query Resource|
+|72|lens.server.savedquery.jdbc.dialectclass|org.apache.lens.server.query.save.SavedQueryDao$HSQLDialect|Dialect
 of the target DB, Default is HSQL. Override with the target DB used.|
 *--+--+---+--+
-|76|lens.server.scheduler.service.impl|org.apache.lens.server.scheduler.SchedulerServiceImpl|Implementation
 class for query scheduler service|
+|73|lens.server.savedquery.list.default.count|20|Key denoting the default 
fetch value of saved query list api.|
 *--+--+---+--+
-|77|lens.server.scheduler.store.class|org.apache.lens.server.scheduler.SchedulerDAO$SchedulerHsqlDBStore|A
 subclass of SchedulerDBStore class used for storing scheduler related 
information.|
+|74|lens.server.savedquery.list.default.offset|0|Key denoting the default 
start value of saved query list api.|
 *--+--+---+--+
-|78|lens.server.scheduler.ws.resource.impl|org.apache.lens.server.scheduler.ScheduleResource|Implementation
 class for query scheduler resource|
+|75|lens.server.savedquery.service.impl|org.apache.lens.server.query.save.SavedQueryServiceImpl|Implementation
 class for saved query service|
 *--+--+---+--+
-|79|lens.server.scheduling.queue.poll.interval.millisec|2000|The interval at 
which submission thread will poll scheduling queue to fetch the next query for 
submission. If value is less than equal to 0, then it would mean that thread 
will continuosly poll without sleeping. The interval has to be given in 
milliseconds.|
+|76|lens.server.savedquery.ws.resource.impl|org.apache.lens.server.query.save.SavedQueryResource|Implementation
 class for Saved query Resource|
 *--+--+---+--+
-|80|lens.server.serverMode.ws.filter.impl|org.apache.lens.server.ServerModeFilter|Implementation
 class for ServerMode Filter|
+|77|lens.server.scheduler.service.impl|org.apache.lens.server.scheduler.SchedulerServiceImpl|Implementation
 class for query scheduler service|
 *--+--+---+--+
-|81|lens.server.service.provider.factory|org.apache.lens.server.ServiceProviderFactoryImpl|Service
 provider factory implementation class. This parameter is used to lookup the 
factory implementation class name that would provide an instance of 
ServiceProvider. Users should instantiate the class to obtain its instance. 
Example -- Class spfClass = 
conf.getClass("lens.server.service.provider.factory", null, 
ServiceProviderFactory.class); ServiceProviderFactory spf = 
spfClass.newInstance(); ServiceProvider serviceProvider = 
spf.getServiceProvider(); -- This is not supposed to be overridden by users.|
+|78|lens.server.scheduler.store.class|org.apache.lens.server.scheduler.SchedulerDAO$SchedulerHsqlDBStore|A
 subclass of SchedulerDBStore class used for storing scheduler related 
information.|
 *--+--+---+--+
-|82|lens.server.servicenames|session,query,savedquery,metastore,scheduler,quota|These
 services would be started in the specified order when lens-server starts up|
+|79|lens.server.scheduler.ws.resource.impl|org.apache.lens.server.scheduler.ScheduleResource|Implementation
 class for query scheduler resource|
 *--+--+---+--+
-|83|lens.server.session.expiry.service.interval.secs|3600|Interval at which 
lens session expiry service runs|
+|80|lens.server.scheduling.queue.poll.interval.millisec|2000|The interval at 
which submission thread will poll scheduling queue to fetch the next query for 
submission. If value is less than equal to 0, then it would mean that thread 
will continuosly poll without sleeping. The interval has to be given in 
milliseconds.|
 *--+--+---+--+
-|84|lens.server.session.service.impl|org.apache.lens.server.session.HiveSessionService|Implementation
 class for session service|
+|81|lens.server.serverMode.ws.filter.impl|org.apache.lens.server.ServerModeFilter|Implementation
 class for ServerMode Filter|
 *--+--+---+--+
-|85|lens.server.session.timeout.seconds|86400|Lens session timeout in 
seconds.If there is no activity on the session for this period then the session 
will be closed.Default timeout is one day.|
+|82|lens.server.service.provider.factory|org.apache.lens.server.ServiceProviderFactoryImpl|Service
 provider factory implementation class. This parameter is used to lookup the 
factory implementation class name that would provide an instance of 
ServiceProvider. Users should instantiate the class to obtain its instance. 
Example -- Class spfClass = 
conf.getClass("lens.server.service.provider.factory", null, 
ServiceProviderFactory.class); ServiceProviderFactory spf = 
spfClass.newInstance(); ServiceProvider serviceProvider = 
spf.getServiceProvider(); -- This is not supposed to be overridden by users.|
 *--+--+---+--+
-|86|lens.server.session.ws.resource.impl|org.apache.lens.server.session.SessionResource|Implementation
 class for Session Resource|
+|83|lens.server.servicenames|session,query,savedquery,metastore,scheduler,quota|These
 services would be started in the specified order when lens-server starts up|
 *--+--+---+--+
-|87|lens.server.state.persist.out.stream.buffer.size|1048576|Output Stream 
Buffer Size used in writing lens server state to file system. Size is in bytes.|
+|84|lens.server.session.expiry.service.interval.secs|3600|Interval at which 
lens session expiry service runs|
 *--+--+---+--+
-|88|lens.server.state.persistence.enabled|true|If flag is enabled, state of 
all the services will be persisted periodically to a location specified by 
lens.server.persist.location and on server restart all the services will be 
started from last saved state.|
+|85|lens.server.session.service.impl|org.apache.lens.server.session.HiveSessionService|Implementation
 class for session service|
 *--+--+---+--+
-|89|lens.server.state.persistence.interval.millis|300000|Lens server state 
persistence time interval in milliseconds|
+|86|lens.server.session.timeout.seconds|86400|Lens session timeout in 
seconds.If there is no activity on the session for this period then the session 
will be closed.Default timeout is one day.|
 *--+--+---+--+
-|90|lens.server.statistics.db|lensstats|Database to which statistics tables 
are created and partitions are added.|
+|87|lens.server.session.ws.resource.impl|org.apache.lens.server.session.SessionResource|Implementation
 class for Session Resource|
 *--+--+---+--+
-|91|lens.server.statistics.log.rollover.interval|3600000|Default rate which 
log statistics store scans for rollups in milliseconds.|
+|88|lens.server.state.persist.out.stream.buffer.size|1048576|Output Stream 
Buffer Size used in writing lens server state to file system. Size is in bytes.|
 *--+--+---+--+
-|92|lens.server.statistics.store.class|org.apache.lens.server.stats.store.log.LogStatisticsStore|Default
 implementation of class used to persist Lens Statistics.|
+|89|lens.server.state.persistence.enabled|true|If flag is enabled, state of 
all the services will be persisted periodically to a location specified by 
lens.server.persist.location and on server restart all the services will be 
started from last saved state.|
 *--+--+---+--+
-|93|lens.server.statistics.warehouse.dir|file:///tmp/lens/statistics/warehouse|Default
 top level location where stats are moved by the log statistics store.|
+|90|lens.server.state.persistence.interval.millis|300000|Lens server state 
persistence time interval in milliseconds|
 *--+--+---+--+
-|94|lens.server.status.update.exponential.wait.millis|30000|Number of millis 
that would grow exponentially for next update, incase of transient failures.|
+|91|lens.server.statistics.db|lensstats|Database to which statistics tables 
are created and partitions are added.|
 *--+--+---+--+
-|95|lens.server.status.update.maximum.delay.secs|1800|The maximum delay in 
seconds for next status update to happen after any transient failure. This will 
be used a maximum delay sothat exponential wait times not to grow to bigger 
value.|
+|92|lens.server.statistics.log.rollover.interval|3600000|Default rate which 
log statistics store scans for rollups in milliseconds.|
 *--+--+---+--+
-|96|lens.server.status.update.num.retries|10|The number of retries a status 
update will tried with exponentital back off, in case of transient issues, upon 
which query will be marked FAILED.|
+|93|lens.server.statistics.store.class|org.apache.lens.server.stats.store.log.LogStatisticsStore|Default
 implementation of class used to persist Lens Statistics.|
 *--+--+---+--+
-|97|lens.server.total.query.cost.ceiling.per.user|-1.0|A query submitted by 
user will be launched only if total query cost of all current launched queries 
of user is less than or equal to total query cost ceiling defined by this 
property. This configuration value is only useful when 
TotalQueryCostCeilingConstraint is enabled by using 
org.apache.lens.server.query.constraint.TotalQueryCostCeilingConstraintFactory 
as one of the factories in lens.server.query.constraint.factories property. 
Default is -1.0 which means that there is no limit on the total query cost of 
launched queries submitted by a user.|
+|94|lens.server.statistics.warehouse.dir|file:///tmp/lens/statistics/warehouse|Default
 top level location where stats are moved by the log statistics store.|
 *--+--+---+--+
-|98|lens.server.ui.base.uri|http://0.0.0.0:19999/|The base url for the Lens UI 
Server|
+|95|lens.server.status.update.exponential.wait.millis|30000|Number of millis 
that would grow exponentially for next update, incase of transient failures.|
 *--+--+---+--+
-|99|lens.server.ui.enable|true|Bringing up the ui server is optional. By 
default it brings up UI server.|
+|96|lens.server.status.update.maximum.delay.secs|1800|The maximum delay in 
seconds for next status update to happen after any transient failure. This will 
be used a maximum delay sothat exponential wait times not to grow to bigger 
value.|
 *--+--+---+--+
-|100|lens.server.ui.enable.caching|true|Set this to false to disable static 
file caching in the UI server|
+|97|lens.server.status.update.num.retries|10|The number of retries a status 
update will tried with exponentital back off, in case of transient issues, upon 
which query will be marked FAILED.|
 *--+--+---+--+
-|101|lens.server.ui.static.dir|webapp/lens-server/static|The base directory to 
server UI static files from|
+|98|lens.server.total.query.cost.ceiling.per.user|-1.0|A query submitted by 
user will be launched only if total query cost of all current launched queries 
of user is less than or equal to total query cost ceiling defined by this 
property. This configuration value is only useful when 
TotalQueryCostCeilingConstraint is enabled by using 
org.apache.lens.server.query.constraint.TotalQueryCostCeilingConstraintFactory 
as one of the factories in lens.server.query.constraint.factories property. 
Default is -1.0 which means that there is no limit on the total query cost of 
launched queries submitted by a user.|
 *--+--+---+--+
-|102|lens.server.user.resolver.custom.class|full.package.name.Classname|Required
 for CUSTOM user resolver. In case the provided implementations are not 
sufficient for user config resolver, a custom classname can be provided. Class 
should extend org.apache.lens.server.user.UserConfigLoader|
+|99|lens.server.user.resolver.custom.class|full.package.name.Classname|Required
 for CUSTOM user resolver. In case the provided implementations are not 
sufficient for user config resolver, a custom classname can be provided. Class 
should extend org.apache.lens.server.user.UserConfigLoader|
 *--+--+---+--+
-|103|lens.server.user.resolver.db.keys|lens.session.cluster.user,mapred.job.queue.name|Required
 for DATABASE and LDAP_BACKED_DATABASE user resolvers. For database based user 
config loaders, the conf keys that will be loaded from database.|
+|100|lens.server.user.resolver.db.keys|lens.session.cluster.user,mapred.job.queue.name|Required
 for DATABASE and LDAP_BACKED_DATABASE user resolvers. For database based user 
config loaders, the conf keys that will be loaded from database.|
 *--+--+---+--+
-|104|lens.server.user.resolver.db.query|select clusteruser,queue from 
user_config_table where username=?|Required for DATABASE and 
LDAP_BACKED_DATABASE user resolvers. For database based user config loader, 
this query will be run with single argument = logged in user and the result 
columns will be assigned to lens.server.user.resolver.db.keys in order. For 
ldap backed database resolver, the argument to this query will be the 
intermediate values obtained from ldap.|
+|101|lens.server.user.resolver.db.query|select clusteruser,queue from 
user_config_table where username=?|Required for DATABASE and 
LDAP_BACKED_DATABASE user resolvers. For database based user config loader, 
this query will be run with single argument = logged in user and the result 
columns will be assigned to lens.server.user.resolver.db.keys in order. For 
ldap backed database resolver, the argument to this query will be the 
intermediate values obtained from ldap.|
 *--+--+---+--+
-|105|lens.server.user.resolver.fixed.value| |Required for FIXED user resolver. 
when lens.server.user.resolver.type=FIXED, This will be the value cluster user 
will resolve to.|
+|102|lens.server.user.resolver.fixed.value| |Required for FIXED user resolver. 
when lens.server.user.resolver.type=FIXED, This will be the value cluster user 
will resolve to.|
 *--+--+---+--+
-|106|lens.server.user.resolver.ldap.bind.dn| |Required for 
LDAP_BACKED_DATABASE user resolvers. ldap dn for admin binding example: 
CN=company-it-admin,ou=service-account,ou=company-service-account,dc=dc1,dc=com...|
+|103|lens.server.user.resolver.ldap.bind.dn| |Required for 
LDAP_BACKED_DATABASE user resolvers. ldap dn for admin binding example: 
CN=company-it-admin,ou=service-account,ou=company-service-account,dc=dc1,dc=com...|
 *--+--+---+--+
-|107|lens.server.user.resolver.ldap.bind.password| |Required for 
LDAP_BACKED_DATABASE user resolvers. ldap password for admin binding above|
+|104|lens.server.user.resolver.ldap.bind.password| |Required for 
LDAP_BACKED_DATABASE user resolvers. ldap password for admin binding above|
 *--+--+---+--+
-|108|lens.server.user.resolver.ldap.fields|department|Required for 
LDAP_BACKED_DATABASE user resolvers. list of fields to be obtained from ldap. 
These will be cached by the intermediate db.|
+|105|lens.server.user.resolver.ldap.fields|department|Required for 
LDAP_BACKED_DATABASE user resolvers. list of fields to be obtained from ldap. 
These will be cached by the intermediate db.|
 *--+--+---+--+
-|109|lens.server.user.resolver.ldap.intermediate.db.delete.sql|delete from 
user_department where username=?|Required for LDAP_BACKED_DATABASE user 
resolvers. query to delete intermediate values from database backing ldap as 
cache. one argument: logged in user.|
+|106|lens.server.user.resolver.ldap.intermediate.db.delete.sql|delete from 
user_department where username=?|Required for LDAP_BACKED_DATABASE user 
resolvers. query to delete intermediate values from database backing ldap as 
cache. one argument: logged in user.|
 *--+--+---+--+
-|110|lens.server.user.resolver.ldap.intermediate.db.insert.sql|insert into 
user_department (username, department, expiry) values (?, ?, ?)|Required for 
LDAP_BACKED_DATABASE user resolvers. query to insert intermediate values from 
database backing ldap as cache. arguments: first logged in user, then all 
intermediate values, then current time + expiration time|
+|107|lens.server.user.resolver.ldap.intermediate.db.insert.sql|insert into 
user_department (username, department, expiry) values (?, ?, ?)|Required for 
LDAP_BACKED_DATABASE user resolvers. query to insert intermediate values from 
database backing ldap as cache. arguments: first logged in user, then all 
intermediate values, then current time + expiration time|
 *--+--+---+--+
-|111|lens.server.user.resolver.ldap.intermediate.db.query|select department 
from user_department where username=? and expiry>?|Required for 
LDAP_BACKED_DATABASE user resolvers. query to obtain intermediate values from 
database backing ldap as cache. two arguments: logged in user and current time.|
+|108|lens.server.user.resolver.ldap.intermediate.db.query|select department 
from user_department where username=? and expiry>?|Required for 
LDAP_BACKED_DATABASE user resolvers. query to obtain intermediate values from 
database backing ldap as cache. two arguments: logged in user and current time.|
 *--+--+---+--+
-|112|lens.server.user.resolver.ldap.search.base| |Required for 
LDAP_BACKED_DATABASE user resolvers. for searching intermediate values for a 
user, the search keys. example: cn=users,dc=dc1,dc=dc2...|
+|109|lens.server.user.resolver.ldap.search.base| |Required for 
LDAP_BACKED_DATABASE user resolvers. for searching intermediate values for a 
user, the search keys. example: cn=users,dc=dc1,dc=dc2...|
 *--+--+---+--+
-|113|lens.server.user.resolver.ldap.search.filter|(&(objectClass=user)(sAMAccountName=%s))|Required
 for LDAP_BACKED_DATABASE user resolvers. filter pattern for ldap search|
+|110|lens.server.user.resolver.ldap.search.filter|(&(objectClass=user)(sAMAccountName=%s))|Required
 for LDAP_BACKED_DATABASE user resolvers. filter pattern for ldap search|
 *--+--+---+--+
-|114|lens.server.user.resolver.ldap.url| |Required for LDAP_BACKED_DATABASE 
user resolvers. ldap url to connect to.|
+|111|lens.server.user.resolver.ldap.url| |Required for LDAP_BACKED_DATABASE 
user resolvers. ldap url to connect to.|
 *--+--+---+--+
-|115|lens.server.user.resolver.propertybased.filename|/path/to/propertyfile|Required
 for PROPERTYBASED user resolver. when lens.server.user.resolver.type is 
PROPERTYBASED, then this file will be read and parsed to determine cluster 
user. Each line should contain username followed by DOT followed by property 
full name followed by equal-to sign and followed by value. example schema of 
the file is: user1.lens.server.cluster.user=clusteruser1 
user1.mapred.job.queue.name=queue1 
*.lens.server.cluster.user=defaultclusteruser *.mapred.job.queue.name=default|
+|112|lens.server.user.resolver.propertybased.filename|/path/to/propertyfile|Required
 for PROPERTYBASED user resolver. when lens.server.user.resolver.type is 
PROPERTYBASED, then this file will be read and parsed to determine cluster 
user. Each line should contain username followed by DOT followed by property 
full name followed by equal-to sign and followed by value. example schema of 
the file is: user1.lens.server.cluster.user=clusteruser1 
user1.mapred.job.queue.name=queue1 
*.lens.server.cluster.user=defaultclusteruser *.mapred.job.queue.name=default|
 *--+--+---+--+
-|116|lens.server.user.resolver.type|FIXED|Type of user config resolver. 
allowed values are FIXED, PROPERTYBASED, DATABASE, LDAP_BACKED_DATABASE, 
CUSTOM.|
+|113|lens.server.user.resolver.type|FIXED|Type of user config resolver. 
allowed values are FIXED, PROPERTYBASED, DATABASE, LDAP_BACKED_DATABASE, 
CUSTOM.|
 *--+--+---+--+
-|117|lens.server.waiting.queries.selection.policy.factories|org.apache.lens.server.query.collect.UserSpecificWaitingQueriesSelectionPolicyFactory|Factories
 used to instantiate waiting queries selection policies. Every factory should 
be an implementation of 
org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory and create 
an implementation of 
org.apache.lens.server.api.query.collect.WaitingQueriesSelectionPolicy.|
+|114|lens.server.waiting.queries.selection.policy.factories|org.apache.lens.server.query.collect.UserSpecificWaitingQueriesSelectionPolicyFactory|Factories
 used to instantiate waiting queries selection policies. Every factory should 
be an implementation of 
org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory and create 
an implementation of 
org.apache.lens.server.api.query.collect.WaitingQueriesSelectionPolicy.|
 *--+--+---+--+
-|118|lens.server.ws.featurenames|multipart,moxyjson,moxyjsonconfigresovler|These
 JAX-RS Feature(s) would be started in the specified order when lens-server 
starts up|
+|115|lens.server.ws.featurenames|multipart,moxyjson,moxyjsonconfigresovler|These
 JAX-RS Feature(s) would be started in the specified order when lens-server 
starts up|
 *--+--+---+--+
-|119|lens.server.ws.filternames|requestlogger,consistentState,serverMode|These 
JAX-RS filters would be started in the specified order when lens-server starts 
up|
+|116|lens.server.ws.filternames|requestlogger,consistentState,serverMode|These 
JAX-RS filters would be started in the specified order when lens-server starts 
up|
 *--+--+---+--+
-|120|lens.server.ws.listenernames|appevent|These listeners would be called in 
the specified order when lens-server starts up|
+|117|lens.server.ws.listenernames|appevent|These listeners would be called in 
the specified order when lens-server starts up|
 *--+--+---+--+
-|121|lens.server.ws.resourcenames|session,metastore,query,savedquery,quota,scheduler,index,log|These
 JAX-RS resources would be started in the specified order when lens-server 
starts up|
+|118|lens.server.ws.resourcenames|session,metastore,query,savedquery,quota,scheduler,index,log|These
 JAX-RS resources would be started in the specified order when lens-server 
starts up|
 *--+--+---+--+
 The configuration parameters and their default values

Reply via email to