You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by jf...@apache.org on 2018/11/16 19:24:17 UTC

[incubator-pinot] 01/01: Add new config API Java-properties format output

This is an automated email from the ASF dual-hosted git repository.

jfim pushed a commit to branch add-java-properties-format-for-new-config-rest-api
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git

commit cbff2df24d242d6366f3b97bc16aeef36ec50d59
Author: Jean-Francois Im <je...@gmail.com>
AuthorDate: Thu Nov 15 12:09:00 2018 -0800

    Add new config API Java-properties format output
    
    Add an option for the new config API to output Java properties-style
    HOCON formatted table configurations through HTTP content-type
    negotiation.
---
 .../resources/PinotTableConfigRestletResource.java | 32 +++++++++++++++++++---
 1 file changed, 28 insertions(+), 4 deletions(-)

diff --git a/pinot-controller/src/main/java/com/linkedin/pinot/controller/api/resources/PinotTableConfigRestletResource.java b/pinot-controller/src/main/java/com/linkedin/pinot/controller/api/resources/PinotTableConfigRestletResource.java
index c427afa..a98341f 100644
--- a/pinot-controller/src/main/java/com/linkedin/pinot/controller/api/resources/PinotTableConfigRestletResource.java
+++ b/pinot-controller/src/main/java/com/linkedin/pinot/controller/api/resources/PinotTableConfigRestletResource.java
@@ -24,6 +24,7 @@ import com.linkedin.pinot.common.utils.CommonConstants;
 import com.linkedin.pinot.controller.helix.core.PinotHelixResourceManager;
 import io.swagger.annotations.ApiOperation;
 import java.io.IOException;
+import java.util.List;
 import javax.inject.Inject;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
@@ -31,8 +32,11 @@ import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Request;
 import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Variant;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,16 +44,19 @@ import org.slf4j.LoggerFactory;
 @Path("/")
 public class PinotTableConfigRestletResource {
   private static final Logger LOGGER = LoggerFactory.getLogger(PinotTableConfigRestletResource.class);
+  public static final MediaType APPLICATION_HOCON = new MediaType("application", "hocon");
+  public static final MediaType TEXT_JAVA_PROPERTIES = new MediaType("text", "x-java-properties");
 
   @Inject
   private PinotHelixResourceManager _resourceManager;
 
   @GET
-  @Produces("application/hocon")
+  @Produces({"application/hocon", "text/x-java-properties", "text/plain"})
   @Path("/v2/tables/{tableName}")
   @ApiOperation("Displays the configuration of a table")
   public Response readTableConfiguration(
-      @PathParam("tableName") String tableName
+      @PathParam("tableName") String tableName,
+      @Context Request request
   ) {
     TableConfig offlineTableConfig =
         _resourceManager.getTableConfig(tableName, CommonConstants.Helix.TableType.OFFLINE);
@@ -64,10 +71,27 @@ public class PinotTableConfigRestletResource {
     }
 
     CombinedConfig combinedConfig = new CombinedConfig(offlineTableConfig, realtimeTableConfig, tableSchema);
-    String serializedConfig = Serializer.serializeToString(combinedConfig);
+    String serializedConfig;
+
+    List<Variant> variants = Variant
+        .mediaTypes(APPLICATION_HOCON, TEXT_JAVA_PROPERTIES, MediaType.TEXT_PLAIN_TYPE)
+        .build();
+
+    Variant variant = request.selectVariant(variants);
+
+    if (variant == null) {
+      return Response.notAcceptable(variants).build();
+    } else if (APPLICATION_HOCON.equals(variant.getMediaType()) ||
+        MediaType.TEXT_PLAIN_TYPE.equals(variant.getMediaType())) {
+      serializedConfig = Serializer.serializeToString(combinedConfig);
+    } else if (TEXT_JAVA_PROPERTIES.equals(variant.getMediaType())) {
+      serializedConfig = Serializer.serializeToPropertiesString(combinedConfig);
+    } else {
+      return Response.notAcceptable(variants).build();
+    }
 
     return Response
-        .ok(serializedConfig)
+        .ok(serializedConfig, variant)
         .header("Content-Disposition", "inline")
         .build();
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org