Skip to content

Commit

Permalink
Merge pull request #225 from tigergraph/jdbc-dev-sync
Browse files Browse the repository at this point in the history
[Automated]JDBC Driver Release 1.3.19
  • Loading branch information
chengjie-qin committed May 25, 2024
2 parents 44ed29e + 94a4e87 commit b79aa2d
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 35 deletions.
5 changes: 5 additions & 0 deletions tools/etl/tg-jdbc-driver/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## Release 1.3.19
* Supported TG Version: 2.4.1+
* Support JSON Web Token (JWT)
* **Note:** TigerGraph 4.1.0 is not backward compatible with tigergraph-jdbc-driver v1.3.18 and prior.

## Release 1.3.18
* Supported TG Version: 2.4.1+
* Fixed the bug that single quotes in the attribute string are removed when upserting vertex or edge.
Expand Down
3 changes: 1 addition & 2 deletions tools/etl/tg-jdbc-driver/tg-jdbc-driver/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.tigergraph</groupId>
<artifactId>tigergraph-jdbc-driver</artifactId>
<version>1.3.18</version>
<version>1.3.19</version>
<packaging>jar</packaging>

<name>TigerGraph JDBC Driver Parent</name>
Expand Down Expand Up @@ -197,7 +197,6 @@
<exclude>META-INF/NOTICE*</exclude>
<exclude>META-INF/ASL2.0</exclude>
<exclude>META-INF/LICENSE*</exclude>
<exclude>META-INF/maven/*/*/*</exclude>
<exclude>META-INF/services/*</exclude>
</excludes>
</filter>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,33 @@
package com.tigergraph.jdbc.restpp;

import com.tigergraph.jdbc.common.Array;
import com.tigergraph.jdbc.common.Connection;
import com.tigergraph.jdbc.common.DatabaseMetaData;
import com.tigergraph.jdbc.common.PreparedStatement;
import com.tigergraph.jdbc.log.TGLoggerFactory;
import com.tigergraph.jdbc.restpp.driver.QueryParser;
import com.tigergraph.jdbc.restpp.driver.RestppResponse;
import com.tigergraph.jdbc.common.Array;
import org.apache.maven.artifact.versioning.ComparableVersion;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InterruptedIOException;
import java.net.ConnectException;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.UnknownHostException;
import java.security.KeyStore;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.List;
import java.util.Properties;
import java.util.Random;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.client.ServiceUnavailableRetryStrategy;
Expand All @@ -25,44 +45,24 @@
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HttpContext;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.entity.StringEntity;
import org.apache.maven.artifact.versioning.ComparableVersion;
import org.apache.spark.SparkFiles;
import org.json.JSONObject;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InterruptedIOException;
import java.net.ConnectException;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.UnknownHostException;
import java.security.KeyStore;
import java.sql.SQLException;
import java.util.Properties;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.Random;
import org.slf4j.Logger;

public class RestppConnection extends Connection {

private static final Logger logger = TGLoggerFactory.getLogger(RestppConnection.class);
private static final String DEFAULT_TG_VERSION = "3.9.0";
private static final String DEFAULT_TG_VERSION = "99.99.99"; // latest

private String host;
private Integer port;
Expand Down Expand Up @@ -474,6 +474,22 @@ private long jitter(long i) {
};
builder.setRetryHandler(transportRetryHandler);
builder.setServiceUnavailableRetryStrategy(protocolRetryStrategy);

// Set UA header
Properties pomProperties = new Properties();
try {
InputStream stream =
RestppConnection.class.getResourceAsStream(
"/META-INF/maven/com.tigergraph/tigergraph-jdbc-driver/pom.properties");
pomProperties.load(stream);
} catch (Exception e) {
// no-op
}
String driverVersion = pomProperties.getProperty("version", "");
BasicHeader userAgentHeader =
new BasicHeader("User-Agent", "tigergraph-jdbc-driver/".concat(driverVersion));
builder.setDefaultHeaders(Arrays.asList(userAgentHeader));

this.httpClient = builder.build();

if (this.token == null
Expand Down Expand Up @@ -608,15 +624,24 @@ private void getToken() throws SQLException {
"Failed to get token: {} The following requests may fail.", result.getErrMsg());
}
} else {
List<JSONObject> jsonList = result.getResults();
for (int i = 0; i < jsonList.size(); i++) {
JSONObject obj = jsonList.get(i);
if (obj.has("token")) {
this.token = obj.getString("token");
logger.debug("Got token: [REDACTED]");
return;
// Start from 4.1.0(JWT), /requesttoken response: {"error":false, "token": "blahblah"}
if (result.getToken() != null && !result.getToken().isEmpty()) {
this.token = result.getToken();
return;
} else {
// Prior to 4.1.0, /requesttoken response: {"error":false, "results": {"token":
// "blahblah"}}
List<JSONObject> jsonList = result.getResults();
for (int i = 0; i < jsonList.size(); i++) {
JSONObject obj = jsonList.get(i);
if (obj.has("token")) {
this.token = obj.getString("token");
return;
}
}
}
logger.error(
"Failed to parse token from /requesttoken endpoint. The following requests may fail.");
}
} catch (Exception e) {
logger.error("Failed to get token", e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public class RestppResponse {
private String errCode;
private String errMsg;
private String content;
private String token; // only for 'POST /requesttoken'
private List<JSONObject> results;

/** For unit test only. */
Expand Down Expand Up @@ -90,6 +91,7 @@ public RestppResponse(HttpResponse response, Boolean panic_on_fail) throws SQLEx
public void parse(String content) {
JSONObject obj;
obj = new JSONObject(content);
this.token = obj.optString("token", "");
this.has_error = obj.optBoolean("error", false);
if (this.has_error) {
this.errMsg = obj.getString("message");
Expand All @@ -110,6 +112,10 @@ public void parse(String content) {
}
}

public String getToken() {
return this.token;
}

public Boolean hasError() {
return this.has_error;
}
Expand Down

0 comments on commit b79aa2d

Please sign in to comment.