Skip to content

Commit 978878b

Browse files
authored
Merge pull request #296 from databricks/bhu1rdb/httpclient
Implemented default HTTP client with SSL disabled to send metrics
2 parents 078f53f + c895f5a commit 978878b

File tree

2 files changed

+48
-3
lines changed

2 files changed

+48
-3
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.databricks.jdbc.commons.util;
2+
3+
import java.security.SecureRandom;
4+
import java.security.cert.X509Certificate;
5+
import javax.net.ssl.SSLContext;
6+
import javax.net.ssl.TrustManager;
7+
import javax.net.ssl.X509TrustManager;
8+
import org.apache.http.conn.ClientConnectionManager;
9+
import org.apache.http.conn.scheme.Scheme;
10+
import org.apache.http.conn.scheme.SchemeRegistry;
11+
import org.apache.http.conn.ssl.SSLSocketFactory;
12+
import org.apache.http.impl.client.DefaultHttpClient;
13+
14+
public class DefaultHttpClientUtil {
15+
public static DefaultHttpClient getDefaultHttpClient() throws Exception {
16+
DefaultHttpClient httpClient = new DefaultHttpClient();
17+
SSLContext ssl_ctx = SSLContext.getInstance("TLS");
18+
TrustManager[] certs =
19+
new TrustManager[] {
20+
new X509TrustManager() {
21+
public X509Certificate[] getAcceptedIssuers() {
22+
return null;
23+
}
24+
25+
public void checkClientTrusted(X509Certificate[] certs, String t) {}
26+
27+
public void checkServerTrusted(X509Certificate[] certs, String t) {}
28+
}
29+
};
30+
ssl_ctx.init(null, certs, new SecureRandom());
31+
SSLSocketFactory ssf =
32+
new SSLSocketFactory(ssl_ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
33+
ClientConnectionManager ccm = httpClient.getConnectionManager();
34+
SchemeRegistry sr = ccm.getSchemeRegistry();
35+
sr.register(new Scheme("https", 443, ssf));
36+
return new DefaultHttpClient(ccm, httpClient.getParams());
37+
}
38+
}

src/main/java/com/databricks/jdbc/telemetry/DatabricksMetrics.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.databricks.jdbc.telemetry;
22

33
import com.databricks.jdbc.client.DatabricksHttpException;
4-
import com.databricks.jdbc.client.http.DatabricksHttpClient;
4+
import com.databricks.jdbc.commons.util.DefaultHttpClientUtil;
55
import com.databricks.jdbc.core.DatabricksSQLException;
66
import com.databricks.jdbc.driver.IDatabricksConnectionContext;
77
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -15,6 +15,7 @@
1515
import org.apache.http.client.methods.HttpPost;
1616
import org.apache.http.client.methods.HttpUriRequest;
1717
import org.apache.http.client.utils.URIBuilder;
18+
import org.apache.http.impl.client.DefaultHttpClient;
1819
import org.apache.http.util.EntityUtils;
1920

2021
// TODO (Bhuvan) Flush out metrics once the driver connection is closed
@@ -30,7 +31,7 @@ public class DatabricksMetrics {
3031
private final String METRICS_TYPE = "metrics_type";
3132
private Boolean hasInitialExportOccurred = false;
3233
private String workspaceId = null;
33-
private DatabricksHttpClient telemetryClient = null;
34+
private DefaultHttpClient telemetryClient = null;
3435

3536
private void setWorkspaceId(String workspaceId) {
3637
this.workspaceId = workspaceId;
@@ -67,7 +68,13 @@ public DatabricksMetrics(IDatabricksConnectionContext context) throws Databricks
6768
}
6869
String resourceId = context.getComputeResource().getWorkspaceId();
6970
setWorkspaceId(resourceId);
70-
telemetryClient = DatabricksHttpClient.getInstance(context);
71+
// TODO: Bhuvan: Replace telemetry client with DatabricksHttpClient when non-SSL variation is
72+
// implemented
73+
try {
74+
telemetryClient = DefaultHttpClientUtil.getDefaultHttpClient();
75+
} catch (Exception e) {
76+
throw new DatabricksSQLException("Failed to create telemetry client");
77+
}
7178
scheduleExportMetrics();
7279
}
7380

0 commit comments

Comments
 (0)