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

siddteotia pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 63d53d57e5 Allow broker list to be passed to JDBC (#9037)
63d53d57e5 is described below

commit 63d53d57e5056485c267194aca88845c68d437dd
Author: Kartik Khare <[email protected]>
AuthorDate: Mon Jul 11 23:42:34 2022 +0530

    Allow broker list to be passed to JDBC (#9037)
    
    Co-authored-by: Kartik Khare <[email protected]>
---
 .../org/apache/pinot/client/PinotConnection.java   | 17 +++++-----
 .../java/org/apache/pinot/client/PinotDriver.java  |  6 +++-
 .../org/apache/pinot/client/utils/Constants.java   |  2 +-
 .../org/apache/pinot/client/utils/DriverUtils.java |  4 +--
 .../tests/OfflineClusterIntegrationTest.java       | 37 ++++++++++++++++++++++
 5 files changed, 52 insertions(+), 14 deletions(-)

diff --git 
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotConnection.java
 
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotConnection.java
index a20931d831..c71019bac5 100644
--- 
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotConnection.java
+++ 
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotConnection.java
@@ -23,6 +23,7 @@ import java.sql.DatabaseMetaData;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Properties;
 import org.apache.pinot.client.base.AbstractBaseConnection;
@@ -39,14 +40,7 @@ public class PinotConnection extends AbstractBaseConnection {
   private boolean _closed;
   private String _controllerURL;
   private PinotControllerTransport _controllerTransport;
-
-  PinotConnection(String controllerURL, PinotClientTransport transport, String 
tenant) {
-    this(new Properties(), controllerURL, transport, tenant, null);
-  }
-
-  PinotConnection(Properties properties, String controllerURL, 
PinotClientTransport transport, String tenant) {
-    this(properties, controllerURL, transport, tenant, null);
-  }
+  public static final String BROKER_LIST = "brokers";
 
   PinotConnection(String controllerURL, PinotClientTransport transport, String 
tenant,
       PinotControllerTransport controllerTransport) {
@@ -62,7 +56,12 @@ public class PinotConnection extends AbstractBaseConnection {
     } else {
       _controllerTransport = controllerTransport;
     }
-    List<String> brokers = getBrokerList(controllerURL, tenant);
+    List<String> brokers;
+    if (properties.containsKey(BROKER_LIST)) {
+      brokers = Arrays.asList(properties.getProperty(BROKER_LIST).split(";"));
+    } else {
+      brokers = getBrokerList(controllerURL, tenant);
+    }
     _session = new org.apache.pinot.client.Connection(properties, brokers, 
transport);
   }
 
diff --git 
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotDriver.java
 
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotDriver.java
index a01252b166..af08dd7ed5 100644
--- 
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotDriver.java
+++ 
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotDriver.java
@@ -82,6 +82,10 @@ public class PinotDriver implements Driver {
       throws SQLException {
     try {
       LOGGER.info("Initiating connection to database for url: " + url);
+
+      Map<String, String> urlParams = DriverUtils.getURLParams(url);
+      info.putAll(urlParams);
+
       JsonAsyncHttpPinotClientTransportFactory factory = new 
JsonAsyncHttpPinotClientTransportFactory();
       PinotControllerTransportFactory pinotControllerTransportFactory = new 
PinotControllerTransportFactory();
 
@@ -101,7 +105,7 @@ public class PinotDriver implements Driver {
 
       Map<String, String> headers = getHeadersFromProperties(info);
 
-      DriverUtils.handleAuth(url, info, headers);
+      DriverUtils.handleAuth(info, headers);
 
       if (!headers.isEmpty()) {
         factory.setHeaders(headers);
diff --git 
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/Constants.java
 
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/Constants.java
index c3d81d1c14..c265797022 100644
--- 
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/Constants.java
+++ 
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/Constants.java
@@ -25,7 +25,7 @@ public class Constants {
   public static final String DRIVER_NAME = "APACHE_PINOT_DRIVER";
   public static final String DRIVER_VERSION = "1.0";
   public static final String PRODUCT_NAME = "APACHE_PINOT";
-  public static final String PINOT_VERSION = "0.5"; //This needs to be changed 
as per the project maven version
+  public static final String PINOT_VERSION = "0.10"; //This needs to be 
changed as per the project maven version
 
   public static final String[] CATALOG_COLUMNS = {"TABLE_CAT"};
   public static final String[] CATALOG_COLUMNS_DTYPES = {"STRING"};
diff --git 
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/DriverUtils.java
 
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/DriverUtils.java
index 3303bc2463..d995342be6 100644
--- 
a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/DriverUtils.java
+++ 
b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/DriverUtils.java
@@ -68,10 +68,8 @@ public class DriverUtils {
     return TlsUtils.getSslContext();
   }
 
-  public static void handleAuth(String url, Properties info, Map<String, 
String> headers)
+  public static void handleAuth(Properties info, Map<String, String> headers)
       throws SQLException {
-    Map<String, String> urlParams = DriverUtils.getURLParams(url);
-    info.putAll(urlParams);
 
     if (info.contains(USER_PROPERTY) && !headers.containsKey(AUTH_HEADER)) {
       String username = info.getProperty(USER_PROPERTY);
diff --git 
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
 
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
index cec15e818b..48575d9471 100644
--- 
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
+++ 
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/OfflineClusterIntegrationTest.java
@@ -24,6 +24,8 @@ import com.google.common.collect.ImmutableList;
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
+import java.sql.ResultSet;
+import java.sql.Statement;
 import java.sql.Timestamp;
 import java.time.Duration;
 import java.time.Instant;
@@ -33,6 +35,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
@@ -44,6 +47,8 @@ import org.apache.http.HttpStatus;
 import org.apache.http.NameValuePair;
 import org.apache.http.message.BasicHeader;
 import org.apache.http.message.BasicNameValuePair;
+import org.apache.pinot.client.PinotConnection;
+import org.apache.pinot.client.PinotDriver;
 import org.apache.pinot.common.exception.HttpErrorStatusException;
 import org.apache.pinot.common.exception.QueryException;
 import org.apache.pinot.common.metadata.segment.SegmentZKMetadata;
@@ -73,6 +78,7 @@ import org.apache.pinot.spi.utils.NetUtils;
 import org.apache.pinot.spi.utils.builder.TableConfigBuilder;
 import org.apache.pinot.spi.utils.builder.TableNameBuilder;
 import org.apache.pinot.util.TestUtils;
+import org.testng.Assert;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
@@ -2327,4 +2333,35 @@ public class OfflineClusterIntegrationTest extends 
BaseClusterIntegrationTestSet
     assertEquals(response.get(COLUMN_CARDINALITY_MAP_KEY).size(), 
numTotalColumn);
     assertEquals(response.get(MAX_NUM_MULTI_VALUES_MAP_KEY).size(), 
numMVColumn);
   }
+
+
+  @Test
+  public void testJDBCClient()
+      throws Exception {
+    String query = "SELECT count(*) FROM " + getTableName();
+    java.sql.Connection connection = 
getJDBCConnectionFromController(DEFAULT_CONTROLLER_PORT);
+    Statement statement = connection.createStatement();
+    ResultSet resultSet = statement.executeQuery(query);
+    resultSet.first();
+    Assert.assertTrue(resultSet.getLong(1) > 0);
+
+    connection = getJDBCConnectionFromBrokers(RANDOM.nextInt(), 
DEFAULT_BROKER_PORT);
+    statement = connection.createStatement();
+    resultSet = statement.executeQuery(query);
+    resultSet.first();
+    Assert.assertTrue(resultSet.getLong(1) > 0);
+  }
+
+  private java.sql.Connection getJDBCConnectionFromController(int 
controllerPort) throws Exception {
+    PinotDriver pinotDriver = new PinotDriver();
+    Properties jdbcProps = new Properties();
+    return pinotDriver.connect("jdbc:pinot://localhost:" + controllerPort, 
jdbcProps);
+  }
+
+  private java.sql.Connection getJDBCConnectionFromBrokers(int controllerPort, 
int brokerPort) throws Exception {
+    PinotDriver pinotDriver = new PinotDriver();
+    Properties jdbcProps = new Properties();
+    jdbcProps.put(PinotConnection.BROKER_LIST, "localhost:" + brokerPort);
+    return pinotDriver.connect("jdbc:pinot://localhost:" + controllerPort, 
jdbcProps);
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to