This is an automated email from the ASF dual-hosted git repository. kishoreg pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push: new d1b4586 New endpoint to get routing table for sql query (#5791) d1b4586 is described below commit d1b458644e505f07c919e7eb983feb9dafcd0061 Author: Oğuzhan Mangır <oguzhan.mangi...@gmail.com> AuthorDate: Tue Aug 4 06:05:32 2020 +0300 New endpoint to get routing table for sql query (#5791) * Add new endpoint to get routing table for sql query * Add integration test for routing table sql endpoint --- .../broker/api/resources/PinotBrokerDebug.java | 25 ++++++++++++++++++---- .../tests/HybridClusterIntegrationTest.java | 15 ++++++++++++- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/pinot-broker/src/main/java/org/apache/pinot/broker/api/resources/PinotBrokerDebug.java b/pinot-broker/src/main/java/org/apache/pinot/broker/api/resources/PinotBrokerDebug.java index 1743dee..cb6f71a 100644 --- a/pinot-broker/src/main/java/org/apache/pinot/broker/api/resources/PinotBrokerDebug.java +++ b/pinot-broker/src/main/java/org/apache/pinot/broker/api/resources/PinotBrokerDebug.java @@ -42,13 +42,15 @@ import org.apache.pinot.core.transport.ServerInstance; import org.apache.pinot.pql.parsers.Pql2Compiler; import org.apache.pinot.spi.config.table.TableType; import org.apache.pinot.spi.utils.builder.TableNameBuilder; +import org.apache.pinot.sql.parsers.CalciteSqlCompiler; @Api(tags = "Debug") @Path("/") // TODO: Add APIs to return the RoutingTable (with unavailable segments) public class PinotBrokerDebug { - private static final Pql2Compiler COMPILER = new Pql2Compiler(); + private static final Pql2Compiler PQL_COMPILER = new Pql2Compiler(); + private static final CalciteSqlCompiler CALCITE_COMPILER = new CalciteSqlCompiler(); @Inject private RoutingManager _routingManager; @@ -82,7 +84,7 @@ public class PinotBrokerDebug { if (tableType != TableType.REALTIME) { String offlineTableName = TableNameBuilder.OFFLINE.tableNameWithType(tableName); RoutingTable routingTable = - _routingManager.getRoutingTable(COMPILER.compileToBrokerRequest("SELECT * FROM " + offlineTableName)); + _routingManager.getRoutingTable(PQL_COMPILER.compileToBrokerRequest("SELECT * FROM " + offlineTableName)); if (routingTable != null) { result.put(offlineTableName, routingTable.getServerInstanceToSegmentsMap()); } @@ -90,7 +92,7 @@ public class PinotBrokerDebug { if (tableType != TableType.OFFLINE) { String realtimeTableName = TableNameBuilder.REALTIME.tableNameWithType(tableName); RoutingTable routingTable = - _routingManager.getRoutingTable(COMPILER.compileToBrokerRequest("SELECT * FROM " + realtimeTableName)); + _routingManager.getRoutingTable(PQL_COMPILER.compileToBrokerRequest("SELECT * FROM " + realtimeTableName)); if (routingTable != null) { result.put(realtimeTableName, routingTable.getServerInstanceToSegmentsMap()); } @@ -109,11 +111,26 @@ public class PinotBrokerDebug { @ApiResponses(value = {@ApiResponse(code = 200, message = "Routing table"), @ApiResponse(code = 404, message = "Routing not found"), @ApiResponse(code = 500, message = "Internal server error")}) public Map<ServerInstance, List<String>> getRoutingTableForQuery( @ApiParam(value = "Pql query (table name should have type suffix)") @QueryParam("pql") String pql) { - RoutingTable routingTable = _routingManager.getRoutingTable(COMPILER.compileToBrokerRequest(pql)); + RoutingTable routingTable = _routingManager.getRoutingTable(PQL_COMPILER.compileToBrokerRequest(pql)); if (routingTable != null) { return routingTable.getServerInstanceToSegmentsMap(); } else { throw new WebApplicationException("Cannot find routing for query: " + pql, Response.Status.NOT_FOUND); } } + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/debug/routingTable/sql") + @ApiOperation(value = "Get the routing table for a SQL query") + @ApiResponses(value = {@ApiResponse(code = 200, message = "Routing table"), @ApiResponse(code = 404, message = "Routing not found"), @ApiResponse(code = 500, message = "Internal server error")}) + public Map<ServerInstance, List<String>> getRoutingTableForSQLQuery( + @ApiParam(value = "SQL query (table name should have type suffix)") @QueryParam("query") String query) { + RoutingTable routingTable = _routingManager.getRoutingTable(CALCITE_COMPILER.compileToBrokerRequest(query)); + if (routingTable != null) { + return routingTable.getServerInstanceToSegmentsMap(); + } else { + throw new WebApplicationException("Cannot find routing for query: " + query, Response.Status.NOT_FOUND); + } + } } diff --git a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/HybridClusterIntegrationTest.java b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/HybridClusterIntegrationTest.java index fcbc1c5..d7eb42c 100644 --- a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/HybridClusterIntegrationTest.java +++ b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/HybridClusterIntegrationTest.java @@ -20,7 +20,7 @@ package org.apache.pinot.integration.tests; import java.io.File; import java.io.FileNotFoundException; -import java.util.ArrayList; +import java.net.URLEncoder; import java.util.List; import java.util.Map; @@ -185,6 +185,19 @@ public class HybridClusterIntegrationTest extends BaseClusterIntegrationTestSet } @Test + public void testBrokerDebugRoutingTableSQL() + throws Exception { + String tableName = getTableName(); + String offlineTableName = TableNameBuilder.OFFLINE.tableNameWithType(tableName); + String realtimeTableName = TableNameBuilder.REALTIME.tableNameWithType(tableName); + String encodedSQL; + encodedSQL = URLEncoder.encode("select * from " + realtimeTableName, "UTF-8"); + Assert.assertNotNull(getDebugInfo("debug/routingTable/sql?query=" + encodedSQL)); + encodedSQL = URLEncoder.encode("select * from " + offlineTableName, "UTF-8"); + Assert.assertNotNull(getDebugInfo("debug/routingTable/sql?query=" + encodedSQL)); + } + + @Test @Override public void testHardcodedQueries() throws Exception { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org