Repository: lens
Updated Branches:
  refs/heads/master b805ee989 -> bee5cfd8d


LENS-909 : Remove sending result as part of email incase of inmemory results


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

Branch: refs/heads/master
Commit: bee5cfd8d6f216a0af042a4ae6772aa4dabfe320
Parents: b805ee9
Author: Puneet Gupta <puneet.k.gu...@gmail.com>
Authored: Sun Feb 7 15:11:34 2016 +0530
Committer: Amareshwari Sriramadasu <amareshw...@apache.org>
Committed: Sun Feb 7 15:11:34 2016 +0530

----------------------------------------------------------------------
 .../lens/server/query/QueryEndNotifier.java     | 26 +++++++++++++++++++-
 .../server/query/TestQueryEndEmailNotifier.java | 19 +++++++++++---
 2 files changed, 40 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/bee5cfd8/lens-server/src/main/java/org/apache/lens/server/query/QueryEndNotifier.java
----------------------------------------------------------------------
diff --git 
a/lens-server/src/main/java/org/apache/lens/server/query/QueryEndNotifier.java 
b/lens-server/src/main/java/org/apache/lens/server/query/QueryEndNotifier.java
index ca00b4d..63c38d9 100644
--- 
a/lens-server/src/main/java/org/apache/lens/server/query/QueryEndNotifier.java
+++ 
b/lens-server/src/main/java/org/apache/lens/server/query/QueryEndNotifier.java
@@ -34,6 +34,8 @@ import javax.mail.internet.MimeMultipart;
 
 import org.apache.lens.api.query.QueryStatus;
 import org.apache.lens.server.LensServices;
+import org.apache.lens.server.api.driver.InMemoryResultSet;
+import org.apache.lens.server.api.driver.LensResultSet;
 import org.apache.lens.server.api.error.LensException;
 import org.apache.lens.server.api.events.AsyncEventListener;
 import org.apache.lens.server.api.metrics.MetricsService;
@@ -44,6 +46,9 @@ import org.apache.lens.server.model.LogSegregationContext;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.hive.conf.HiveConf;
 
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
 import lombok.Data;
 import lombok.NonNull;
 import lombok.extern.slf4j.Slf4j;
@@ -60,6 +65,18 @@ public class QueryEndNotifier extends 
AsyncEventListener<QueryEnded> {
   /** The Constant EMAIL_ERROR_COUNTER. */
   public static final String EMAIL_ERROR_COUNTER = "email-send-errors";
 
+  /** The time in seconds for which in memory result is available */
+  private final int inMemoryResultsetTTLSecs;
+
+  /** Time formatter for email message corresponding to InMemoryResultset
+   *  Example : 2016-01-25 07:05:46 PM, IST
+   */
+  static final DateTimeFormatter MESSAGE_DATE_FORMATTER = 
DateTimeFormat.forPattern("yyyy-MM-dd hh:mm:SS aaa, z");
+
+  /** Mail message corresponding to InMemoryResultset*/
+  static final String RESULT_AVAILABLE_UNTIL_MSG =
+      "Query result is temporarily cached in the server and will be available 
until ";
+
   /** The from. */
   private final String from;
 
@@ -97,6 +114,7 @@ public class QueryEndNotifier extends 
AsyncEventListener<QueryEnded> {
     mailSmtpConnectionTimeout = 
Integer.parseInt(conf.get(MAIL_SMTP_CONNECTIONTIMEOUT,
       MAIL_DEFAULT_SMTP_CONNECTIONTIMEOUT));
     this.logSegregationContext = logSegregationContext;
+    this.inMemoryResultsetTTLSecs =conf.getInt(INMEMORY_RESULT_SET_TTL_SECS, 
DEFAULT_INMEMORY_RESULT_SET_TTL_SECS);
   }
 
   /*
@@ -172,7 +190,13 @@ public class QueryEndNotifier extends 
AsyncEventListener<QueryEnded> {
 
   private String getResultMessage(QueryContext queryContext) {
     try {
-      return 
queryService.getResultset(queryContext.getQueryHandle()).toQueryResult().toPrettyString();
+      LensResultSet result = 
queryService.getResultset(queryContext.getQueryHandle());
+      if (result instanceof InMemoryResultSet) { // Do not include the result 
rows for InMemory results.
+        long availableUntilTime = 
((InMemoryResultSet)result).getCreationTime() + inMemoryResultsetTTLSecs;
+        return RESULT_AVAILABLE_UNTIL_MSG + 
MESSAGE_DATE_FORMATTER.print(availableUntilTime);
+      } else {
+        return result.toQueryResult().toPrettyString();
+      }
     } catch (LensException e) {
       log.error("Error retrieving result of query handle {} for sending 
e-mail", queryContext.getQueryHandle(), e);
       return "Error retrieving result.";

http://git-wip-us.apache.org/repos/asf/lens/blob/bee5cfd8/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java
----------------------------------------------------------------------
diff --git 
a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java
 
b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java
index e97a5a3..5196c9b 100644
--- 
a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java
+++ 
b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java
@@ -36,15 +36,18 @@ import javax.ws.rs.core.Response;
 
 import org.apache.lens.api.LensConf;
 import org.apache.lens.api.LensSessionHandle;
-import org.apache.lens.api.query.InMemoryQueryResult;
 import org.apache.lens.api.query.QueryHandle;
 import org.apache.lens.api.query.QueryResult;
 import org.apache.lens.api.query.QueryStatus.Status;
 import org.apache.lens.api.result.LensAPIResult;
 import org.apache.lens.server.LensJerseyTest;
+import org.apache.lens.server.LensServerConf;
 import org.apache.lens.server.LensServerTestUtil;
 import org.apache.lens.server.LensServices;
 import org.apache.lens.server.api.LensConfConstants;
+import org.apache.lens.server.api.driver.InMemoryResultSet;
+import org.apache.lens.server.api.error.LensException;
+import org.apache.lens.server.api.query.QueryContext;
 import org.apache.lens.server.api.query.QueryExecutionService;
 import org.apache.lens.server.common.TestResourceFile;
 
@@ -242,18 +245,26 @@ public class TestQueryEndEmailNotifier extends 
LensJerseyTest {
 
   @Test(dataProvider = "success-tests")
   public void testSuccessfulQuery(Boolean lensPersistence, Boolean 
driverPersistence, MediaType mt)
-    throws InterruptedException {
+    throws InterruptedException, LensException {
     // successful query
     LensConf conf = getLensConf(
       LensConfConstants.QUERY_PERSISTENT_RESULT_SET, lensPersistence,
       LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, driverPersistence);
-    QueryHandle handle = launchAndWaitForQuery(conf, "select ID, IDSTR from " 
+ TEST_TABLE, Status.SUCCESSFUL, mt);
     String expectedKeywords;
+    QueryHandle handle = launchAndWaitForQuery(conf, "select ID, IDSTR from " 
+ TEST_TABLE, Status.SUCCESSFUL, mt);
     if (lensPersistence || driverPersistence) {
       QueryResult result = getLensQueryResult(target(), lensSessionId, handle, 
mt);
       expectedKeywords = result.toPrettyString();
     } else {
-      expectedKeywords = InMemoryQueryResult.DECLARATION;
+      QueryContext context = queryService.getQueryContext(handle);
+      long creationTime = ((InMemoryResultSet) 
(context.getSelectedDriver().fetchResultSet(context))).getCreationTime();
+      long inMemoryResultsetTTLSecs =
+          
LensServerConf.getHiveConf().getInt(LensConfConstants.INMEMORY_RESULT_SET_TTL_SECS,
+              LensConfConstants.DEFAULT_INMEMORY_RESULT_SET_TTL_SECS);
+      expectedKeywords =
+          QueryEndNotifier.RESULT_AVAILABLE_UNTIL_MSG
+              + QueryEndNotifier.MESSAGE_DATE_FORMATTER.print(creationTime + 
inMemoryResultsetTTLSecs);
+      getLensQueryResultAsString(target(), lensSessionId, handle, mt); 
//Reading it so that query can be purged
     }
     WiserMessage message = getMessage();
     assertKeywordsContains(message, handle, "Query SUCCESSFUL", 
expectedKeywords);

Reply via email to