You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by sh...@apache.org on 2015/12/14 18:57:02 UTC

incubator-hawq git commit: HAWQ-191. Handle retired pxf apis

Repository: incubator-hawq
Updated Branches:
  refs/heads/HAWQ-191 b126f9923 -> ee21bc3c4


HAWQ-191. Handle retired pxf apis


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

Branch: refs/heads/HAWQ-191
Commit: ee21bc3c4bc8ca5f125827e850a0dea23dcd817e
Parents: b126f99
Author: Shivram Mani <sh...@gmail.com>
Authored: Mon Dec 14 09:56:54 2015 -0800
Committer: Shivram Mani <sh...@gmail.com>
Committed: Mon Dec 14 09:56:54 2015 -0800

----------------------------------------------------------------------
 .../pxf/service/rest/InvalidPathResource.java   | 50 ++++++++++++++++++--
 1 file changed, 47 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ee21bc3c/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/rest/InvalidPathResource.java
----------------------------------------------------------------------
diff --git a/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/rest/InvalidPathResource.java b/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/rest/InvalidPathResource.java
index bf45381..1dee254 100644
--- a/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/rest/InvalidPathResource.java
+++ b/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/rest/InvalidPathResource.java
@@ -24,12 +24,17 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hawq.pxf.service.utilities.Utilities;
 
+import com.google.common.collect.ImmutableSet;
+import java.util.Arrays;
+import java.util.List;
+
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.PathSegment;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.core.UriInfo;
@@ -52,6 +57,9 @@ public class InvalidPathResource {
     UriInfo rootUri;
 
     private static final Log Log = LogFactory.getLog(InvalidPathResource.class);
+    // Set of retired endpoints
+    private final ImmutableSet<String> retiredEndPoints = ImmutableSet.of(
+            "Analyzer");
 
     public InvalidPathResource() {
     }
@@ -114,10 +122,16 @@ public class InvalidPathResource {
         Log.debug("REST request: " + rootUri.getAbsolutePath() + ". " +
                 "Version " + version + ", supported version is " + Version.PXF_PROTOCOL_VERSION);
 
-        // if version is not of the format "v<number>" then it's not a version but a wrong path
-        if (version.equals(Version.PXF_PROTOCOL_VERSION)  || !(version.matches("v[0-9]+"))) {
+        if(version.equals(Version.PXF_PROTOCOL_VERSION)) { // api with incorrect path
+            String endPoint = parseEndpoint(path);
+            if (retiredEndPoints.contains(endPoint)) {
+                errmsg = getRetiredPathMsg(endPoint);
+            } else {
+                errmsg = getUnknownPathMsg();
+            }
+        } else if(!(version.matches("v[0-9]+"))) { // api with version not of the format "v<number>"
             errmsg = getUnknownPathMsg();
-        } else {
+        } else { // api with wrong version number
             errmsg = "Wrong version " + version + ", supported version is " + Version.PXF_PROTOCOL_VERSION;
         }
 
@@ -153,9 +167,39 @@ public class InvalidPathResource {
     }
 
     /**
+     * Parses the version part from the path.
+     * The the absolute path is
+     * http://<host>:<port>/pxf/<version>/<rest of path>
+     *
+     * path - the endpoint part after /pxf/
+     * returns the first element after /pxf/
+     */
+    private String parseEndpoint(String path) {
+        List<PathSegment> pathSegments = rootUri.getPathSegments();
+        if(pathSegments.size() < 2) {
+            return null;
+        }
+        return pathSegments.get(1).getPath();
+    }
+
+    /**
      * Returns unknown path message, with the path's special characters masked.
      */
     private String getUnknownPathMsg() {
         return "Unknown path \"" + Utilities.maskNonPrintables(rootUri.getAbsolutePath().toString()) + "\"";
     }
+
+    /**
+     * Warn on recently retired paths
+     * eg: http://<host>:<port>/pxf/<version>/Analyzer/<rest of path>
+     *
+     * Returns message about path not being supported
+     */
+    private String getRetiredPathMsg(String endpoint) {
+        if("Analyzer".equals(endpoint)) {
+            return endpoint + " API is retired. Please use /Fragmenter/getFragmentsStats instead";
+        } else {
+            return endpoint + " API is retired";
+        }
+    }
 }