You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by am...@apache.org on 2016/02/27 18:12:33 UTC

lens git commit: LENS-967 : Wrap SavedQueryService methods by session acquire release blocks

Repository: lens
Updated Branches:
  refs/heads/master 84831297c -> 2da114407


LENS-967 : Wrap SavedQueryService methods by session acquire release blocks


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

Branch: refs/heads/master
Commit: 2da1144070986900ad0891890faa53786262c8a6
Parents: 8483129
Author: Rajat Khandelwal <pr...@apache.org>
Authored: Sat Feb 27 22:42:13 2016 +0530
Committer: Amareshwari Sriramadasu <am...@apache.org>
Committed: Sat Feb 27 22:42:13 2016 +0530

----------------------------------------------------------------------
 .../api/query/save/SavedQueryService.java       | 30 +++++---
 .../server/query/save/SavedQueryResource.java   | 38 ++--------
 .../query/save/SavedQueryServiceImpl.java       | 76 ++++++++++++++++----
 .../query/save/TestSavedQueryService.java       | 16 +++--
 4 files changed, 100 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/2da11440/lens-server-api/src/main/java/org/apache/lens/server/api/query/save/SavedQueryService.java
----------------------------------------------------------------------
diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/query/save/SavedQueryService.java b/lens-server-api/src/main/java/org/apache/lens/server/api/query/save/SavedQueryService.java
index cba1df6..c34217a 100644
--- a/lens-server-api/src/main/java/org/apache/lens/server/api/query/save/SavedQueryService.java
+++ b/lens-server-api/src/main/java/org/apache/lens/server/api/query/save/SavedQueryService.java
@@ -20,6 +20,7 @@ package org.apache.lens.server.api.query.save;
 
 import javax.ws.rs.core.MultivaluedMap;
 
+import org.apache.lens.api.LensSessionHandle;
 import org.apache.lens.api.query.save.ListResponse;
 import org.apache.lens.api.query.save.SavedQuery;
 import org.apache.lens.server.api.error.LensException;
@@ -37,58 +38,67 @@ public interface SavedQueryService {
    * @return id of the created saved query.
    * @throws LensException
    */
-  long save(SavedQuery query) throws LensException;
+  long save(LensSessionHandle handle, SavedQuery query) throws LensException;
 
   /**
    * Updates the specified saved query with the new object.
+   * @param handle session handle of the query
    * @param id     id of the saved query.
    * @param query  Saved query object.
    * @throws LensException
    */
-  void update(long id, SavedQuery query) throws LensException;
+  void update(LensSessionHandle handle, long id, SavedQuery query) throws LensException;
 
   /**
    * Deletes the saved query specified.
-   * @param id id of the saved query.
+   * @param handle session handle of the query
+   * @param id     id of the saved query.
    * @throws LensException
    */
-  void delete(long id) throws LensException;
+  void delete(LensSessionHandle handle, long id) throws LensException;
 
   /**
    * Returns the saved query pointed out by the id.
-   * @param id id of the saved query.
+   * @param handle session handle of the query
+   * @param id     id of the saved query.
    * @return saved query object.
    * @throws LensException
    */
-  SavedQuery get(long id)  throws LensException;
+  SavedQuery get(LensSessionHandle handle, long id)  throws LensException;
 
   /**
    * List the saved query from {start} to {count} matching filter denoted by criteria.
+   * @param handle    session handle of the query
    * @param criteria  Multivalued map representing the criteria.
-   * @param start    Displacement from the first matching record.
+   * @param start     Displacement from the first matching record.
    * @param count     Number of records to fetch.
    * @return list of queries.
    * @throws LensException
    */
-  ListResponse list(MultivaluedMap<String, String> criteria, long start, long count) throws LensException;
+  ListResponse list(LensSessionHandle handle, MultivaluedMap<String, String> criteria, long start,
+                    long count) throws LensException;
 
   /**
    * Grant permissions for users to do actions on the saved query.
+   * @param handle          session handle of the query
    * @param id              id of the query.
    * @param sharingUser     User invoking this action.
    * @param targetUserPath  Target users who have to get affected.
    * @param privileges      Privileges to be granted.
    * @throws LensException
    */
-  void grant(long id, String sharingUser, String targetUserPath, String[] privileges) throws LensException;
+  void grant(LensSessionHandle handle, long id, String sharingUser, String targetUserPath,
+             String[] privileges) throws LensException;
 
   /**
    * Revoke permissions from users to do actions on the saved query.
+   * @param handle          session handle of the query
    * @param id              id of the query.
    * @param sharingUser     User invoking this action.
    * @param targetUserPath  Target users who have to get affected.
    * @param privileges      Privileges to be granted.
    * @throws LensException
    */
-  void revoke(long id, String sharingUser, String targetUserPath, String[] privileges) throws LensException;
+  void revoke(LensSessionHandle handle, long id, String sharingUser, String targetUserPath,
+              String[] privileges) throws LensException;
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/2da11440/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryResource.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryResource.java b/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryResource.java
index 02541c5..6ee1e34 100644
--- a/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryResource.java
+++ b/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryResource.java
@@ -18,7 +18,6 @@
  */
 package org.apache.lens.server.query.save;
 
-import static org.apache.lens.api.error.LensCommonErrorCode.INVALID_XML_ERROR;
 import static org.apache.lens.api.query.save.ResourceModifiedResponse.Action.CREATED;
 import static org.apache.lens.api.query.save.ResourceModifiedResponse.Action.DELETED;
 import static org.apache.lens.api.query.save.ResourceModifiedResponse.Action.UPDATED;
@@ -41,9 +40,7 @@ import org.apache.lens.api.query.save.ParameterParserResponse;
 import org.apache.lens.api.query.save.ResourceModifiedResponse;
 import org.apache.lens.api.query.save.SavedQuery;
 import org.apache.lens.api.result.LensAPIResult;
-import org.apache.lens.cube.parse.HQLParser;
 import org.apache.lens.server.LensServices;
-import org.apache.lens.server.api.LensErrorInfo;
 import org.apache.lens.server.api.error.LensException;
 import org.apache.lens.server.api.query.QueryExecutionService;
 import org.apache.lens.server.api.query.save.*;
@@ -56,7 +53,6 @@ import org.apache.hadoop.hive.conf.HiveConf;
 import org.glassfish.grizzly.http.server.Response;
 import org.glassfish.jersey.media.multipart.FormDataParam;
 
-import lombok.NonNull;
 
 @Path("/queryapi")
 /**
@@ -115,7 +111,7 @@ public class SavedQueryResource {
     @QueryParam("count") String count) throws LensException {
     try {
       final int countVal = count == null? defaultCount: Integer.parseInt(count);
-      return savedQueryService.list(info.getQueryParameters(), start, countVal);
+      return savedQueryService.list(sessionid, info.getQueryParameters(), start, countVal);
     } catch (LensException e) {
       throw getWrapped(e);
     }
@@ -136,7 +132,7 @@ public class SavedQueryResource {
     @QueryParam("sessionid") LensSessionHandle sessionid,
     @PathParam("id") long id) throws LensException {
     try {
-      return savedQueryService.get(id);
+      return savedQueryService.get(sessionid, id);
     } catch (LensException e) {
       throw getWrapped(e);
     }
@@ -157,7 +153,7 @@ public class SavedQueryResource {
     @QueryParam("sessionid") LensSessionHandle sessionid,
     @PathParam("id") long id) throws LensException {
     try {
-      savedQueryService.delete(id);
+      savedQueryService.delete(sessionid, id);
       return new ResourceModifiedResponse(id, "saved_query", DELETED);
     } catch (LensException e) {
       throw getWrapped(e);
@@ -184,8 +180,7 @@ public class SavedQueryResource {
     @Context final Response response)
     throws LensException, IOException {
     try {
-      validateSampleResolved(savedQuery);
-      long id = savedQueryService.save(savedQuery);
+      long id = savedQueryService.save(sessionid, savedQuery);
       response.setStatus(HttpServletResponse.SC_CREATED);
       response.flush();
       return new ResourceModifiedResponse(id, "saved_query", CREATED);
@@ -214,8 +209,7 @@ public class SavedQueryResource {
     SavedQuery savedQuery,
     @Context final Response response) throws LensException, IOException {
     try {
-      validateSampleResolved(savedQuery);
-      savedQueryService.update(id, savedQuery);
+      savedQueryService.update(sessionid, id, savedQuery);
       response.setStatus(HttpServletResponse.SC_CREATED);
       response.flush();
       return new ResourceModifiedResponse(id, "saved_query", UPDATED);
@@ -260,7 +254,7 @@ public class SavedQueryResource {
     @FormDataParam("conf") LensConf conf) throws LensException {
     final String requestId = this.logSegregationContext.getLogSegragationId();
     try {
-      final SavedQuery savedQuery = savedQueryService.get(id);
+      final SavedQuery savedQuery = savedQueryService.get(sessionid, id);
       final String query = ParameterResolver.resolve(savedQuery, info.getQueryParameters());
       return LensAPIResult.composedOf(
         null,
@@ -284,24 +278,4 @@ public class SavedQueryResource {
     e.buildLensErrorResponse(errorCollection, null, logSegregationContext.getLogSegragationId());
     throw e;
   }
-
-  /**
-   * Validates the saved query and throws LensException with.
-   * BAD_SYNTAX code if wrong
-   *
-   * @param savedQuery Saved query object
-   * @throws LensException if invalid
-   */
-  private void validateSampleResolved(@NonNull SavedQuery savedQuery) throws LensException {
-    final String sampleResolved  = SavedQueryHelper.getSampleResolvedQuery(savedQuery);
-    try {
-      HQLParser.parseHQL(sampleResolved, new HiveConf());
-    } catch (Exception e) {
-      throw new LensException(
-        new LensErrorInfo(INVALID_XML_ERROR.getValue(), 0, INVALID_XML_ERROR.toString())
-        , e
-        , "Encountered while resolving with sample values { " + sampleResolved + " }");
-    }
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/2da11440/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryServiceImpl.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryServiceImpl.java b/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryServiceImpl.java
index d9de897..e3ebca5 100644
--- a/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryServiceImpl.java
+++ b/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryServiceImpl.java
@@ -18,14 +18,20 @@
  */
 package org.apache.lens.server.query.save;
 
+import static org.apache.lens.api.error.LensCommonErrorCode.INVALID_XML_ERROR;
+
 import javax.ws.rs.core.MultivaluedMap;
 
+import org.apache.lens.api.LensSessionHandle;
 import org.apache.lens.api.query.save.ListResponse;
 import org.apache.lens.api.query.save.SavedQuery;
+import org.apache.lens.cube.parse.HQLParser;
 import org.apache.lens.server.BaseLensService;
 import org.apache.lens.server.api.LensConfConstants;
+import org.apache.lens.server.api.LensErrorInfo;
 import org.apache.lens.server.api.error.LensException;
 import org.apache.lens.server.api.health.HealthStatus;
+import org.apache.lens.server.api.query.save.SavedQueryHelper;
 import org.apache.lens.server.api.query.save.SavedQueryService;
 import org.apache.lens.server.util.UtilityMethods;
 
@@ -84,48 +90,75 @@ public class SavedQueryServiceImpl extends BaseLensService implements SavedQuery
    * {@inheritDoc}
    */
   @Override
-  public long save(SavedQuery savedQuery) throws LensException {
-    return dao.saveQuery(savedQuery);
+  public long save(LensSessionHandle handle, SavedQuery savedQuery) throws LensException {
+    try {
+      acquire(handle);
+      validateSampleResolved(savedQuery);
+      return dao.saveQuery(savedQuery);
+    } finally {
+      release(handle);
+    }
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public void update(long id, SavedQuery savedQuery) throws LensException {
-    dao.updateQuery(id, savedQuery);
+  public void update(LensSessionHandle handle, long id, SavedQuery savedQuery) throws LensException {
+    try {
+      acquire(handle);
+      validateSampleResolved(savedQuery);
+      dao.updateQuery(id, savedQuery);
+    } finally {
+      release(handle);
+    }
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public void delete(long id) throws LensException {
-    dao.deleteSavedQueryByID(id);
+  public void delete(LensSessionHandle handle, long id) throws LensException {
+    try {
+      acquire(handle);
+      dao.deleteSavedQueryByID(id);
+    } finally {
+      release(handle);
+    }
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public SavedQuery get(long id) throws LensException {
-    return dao.getSavedQueryByID(id);
+  public SavedQuery get(LensSessionHandle handle, long id) throws LensException {
+    try {
+      acquire(handle);
+      return dao.getSavedQueryByID(id);
+    } finally {
+      release(handle);
+    }
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public ListResponse list(
+  public ListResponse list(LensSessionHandle handle,
     MultivaluedMap<String, String> criteria, long start, long count) throws LensException {
-    return dao.getList(criteria, start, count);
+    try {
+      acquire(handle);
+      return dao.getList(criteria, start, count);
+    } finally {
+      release(handle);
+    }
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public void grant(long id, String sharingUser, String targetUserPath, String[] privileges)
+  public void grant(LensSessionHandle handle, long id, String sharingUser, String targetUserPath, String[] privileges)
     throws LensException {
     //NOOP
   }
@@ -134,8 +167,27 @@ public class SavedQueryServiceImpl extends BaseLensService implements SavedQuery
    * {@inheritDoc}
    */
   @Override
-  public void revoke(long id, String sharingUser, String targetUserPath, String[] privileges)
+  public void revoke(LensSessionHandle handle, long id, String sharingUser, String targetUserPath, String[] privileges)
     throws LensException {
     //NOOP
   }
+  /**
+   * Validates the saved query and throws LensException with.
+   * BAD_SYNTAX code if wrong
+   *
+   * @param savedQuery Saved query object
+   * @throws LensException if invalid
+   */
+  private void validateSampleResolved(@NonNull SavedQuery savedQuery) throws LensException {
+    final String sampleResolved  = SavedQueryHelper.getSampleResolvedQuery(savedQuery);
+    try {
+      HQLParser.parseHQL(sampleResolved, new HiveConf());
+    } catch (Exception e) {
+      throw new LensException(
+        new LensErrorInfo(INVALID_XML_ERROR.getValue(), 0, INVALID_XML_ERROR.toString())
+        , e
+        , "Encountered while resolving with sample values { " + sampleResolved + " }");
+    }
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/2da11440/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java b/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java
index 70e2dbc..f9bacf1 100644
--- a/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java
+++ b/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java
@@ -42,6 +42,9 @@ import org.apache.lens.server.api.query.save.SavedQueryService;
 import org.apache.lens.server.error.LensExceptionMapper;
 import org.apache.lens.server.query.QueryExecutionServiceImpl;
 
+import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hadoop.hive.ql.session.SessionState;
+
 import org.testng.annotations.AfterTest;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
@@ -96,6 +99,7 @@ public class TestSavedQueryService extends LensJerseyTest {
     Map<String, String> sessionconf = Maps.newHashMap();
     sessionconf.put("test.session.key", "svalue");
     lensSessionId = queryService.openSession("foo", "bar", sessionconf); // @localhost should be removed
+    SessionState.start(new HiveConf());
   }
 
   @AfterTest
@@ -127,7 +131,7 @@ public class TestSavedQueryService extends LensJerseyTest {
 
   private ResourceModifiedResponse updateQuery(long id) {
     Response savedquery = savedQueriesRoot()
-      .path(String.valueOf(id))
+      .path(String.valueOf(id)).queryParam("sessionid", lensSessionId)
       .request(MediaType.APPLICATION_JSON_TYPE)
       .accept(MediaType.APPLICATION_JSON_TYPE)
       .put(Entity.json(QUERY));
@@ -137,7 +141,7 @@ public class TestSavedQueryService extends LensJerseyTest {
 
   private ResourceModifiedResponse deleteQuery(long id) {
     Response savedquery = savedQueriesRoot()
-      .path(String.valueOf(id))
+      .path(String.valueOf(id)).queryParam("sessionid", lensSessionId)
       .request(MediaType.APPLICATION_JSON_TYPE)
       .accept(MediaType.APPLICATION_JSON_TYPE)
       .delete();
@@ -147,7 +151,7 @@ public class TestSavedQueryService extends LensJerseyTest {
 
   private SavedQuery get(long id) {
     Response savedquery = savedQueriesRoot()
-      .path(String.valueOf(id))
+      .path(String.valueOf(id)).queryParam("sessionid", lensSessionId)
       .request(MediaType.APPLICATION_JSON_TYPE)
       .accept(MediaType.APPLICATION_JSON_TYPE)
       .get();
@@ -157,7 +161,7 @@ public class TestSavedQueryService extends LensJerseyTest {
 
   private ParameterParserResponse extractParameters() {
     Response parameters = savedQueriesRoot()
-      .path("parameters")
+      .path("parameters").queryParam("sessionid", lensSessionId)
       .queryParam("query", QUERY_STRING)
       .request(MediaType.APPLICATION_JSON_TYPE)
       .accept(MediaType.APPLICATION_JSON_TYPE)
@@ -167,7 +171,7 @@ public class TestSavedQueryService extends LensJerseyTest {
   }
 
   private ResourceModifiedResponse saveQuery() {
-    Response savedquery = savedQueriesRoot()
+    Response savedquery = savedQueriesRoot().queryParam("sessionid", lensSessionId)
       .request(MediaType.APPLICATION_JSON_TYPE)
       .accept(MediaType.APPLICATION_JSON_TYPE)
       .post(Entity.json(QUERY));
@@ -178,7 +182,7 @@ public class TestSavedQueryService extends LensJerseyTest {
   private ListResponse list(long offset, long count) {
     Response savedquery = savedQueriesRoot()
       .queryParam("start", offset)
-      .queryParam("count", count)
+      .queryParam("count", count).queryParam("sessionid", lensSessionId)
       .request(MediaType.APPLICATION_JSON_TYPE)
       .accept(MediaType.APPLICATION_JSON_TYPE)
       .get();