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]