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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
