Skip to content

Commit a7b5112

Browse files
[PECOBLR-164] Support connection param SocketTimeout (#777)
- The default value of the param is kept as 900 seconds (same as earlier value and default in databricks-sdk-java) - Set the param in thrift, dbfs, and sql-exec clients
1 parent 3d37760 commit a7b5112

File tree

6 files changed

+19
-9
lines changed

6 files changed

+19
-9
lines changed

src/main/java/com/databricks/jdbc/api/impl/DatabricksConnection.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ public class DatabricksConnection implements IDatabricksConnection, IDatabricksC
4444
public DatabricksConnection(IDatabricksConnectionContext connectionContext)
4545
throws DatabricksSQLException {
4646
this.connectionContext = connectionContext;
47-
this.session = new DatabricksSession(connectionContext);
4847
DatabricksThreadContextHolder.setConnectionContext(connectionContext);
48+
this.session = new DatabricksSession(connectionContext);
4949
}
5050

5151
@VisibleForTesting

src/main/java/com/databricks/jdbc/api/impl/DatabricksConnectionContext.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,12 @@ public int getRowsFetchedPerBlock() {
824824
return maxRows;
825825
}
826826

827+
/** {@inheritDoc} */
828+
@Override
829+
public int getSocketTimeout() {
830+
return Integer.parseInt(getParameter(DatabricksJdbcUrlParams.SOCKET_TIMEOUT));
831+
}
832+
827833
private static boolean nullOrEmptyString(String s) {
828834
return s == null || s.isEmpty();
829835
}

src/main/java/com/databricks/jdbc/api/internal/IDatabricksConnectionContext.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,4 +257,7 @@ public interface IDatabricksConnectionContext {
257257

258258
/** Returns maximum number of rows that a query returns at a time. */
259259
int getRowsFetchedPerBlock();
260+
261+
/** Returns the socket timeout in seconds for HTTP connections. */
262+
int getSocketTimeout();
260263
}

src/main/java/com/databricks/jdbc/common/DatabricksJdbcUrlParams.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,8 @@ public enum DatabricksJdbcUrlParams {
108108
DEFAULT_STRING_COLUMN_LENGTH(
109109
"DefaultStringColumnLength",
110110
"Maximum number of characters that can be contained in STRING columns",
111-
"255");
111+
"255"),
112+
SOCKET_TIMEOUT("socketTimeout", "Socket timeout in seconds", "900");
112113

113114
private final String paramName;
114115
private final String defaultValue;

src/main/java/com/databricks/jdbc/dbclient/impl/common/ClientConfigurator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public ClientConfigurator(IDatabricksConnectionContext connectionContext) {
4343
this.connectionContext = connectionContext;
4444
this.databricksConfig = new DatabricksConfig();
4545
CommonsHttpClient.Builder httpClientBuilder = new CommonsHttpClient.Builder();
46+
httpClientBuilder.withTimeoutSeconds(connectionContext.getSocketTimeout());
4647
setupProxyConfig(httpClientBuilder);
4748
setupConnectionManager(httpClientBuilder);
4849
this.databricksConfig.setHttpClient(httpClientBuilder.build());

src/main/java/com/databricks/jdbc/dbclient/impl/http/DatabricksHttpClient.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ public class DatabricksHttpClient implements IDatabricksHttpClient, Closeable {
4545
private static final JdbcLogger LOGGER = JdbcLoggerFactory.getLogger(DatabricksHttpClient.class);
4646
private static final int DEFAULT_MAX_HTTP_CONNECTIONS = 1000;
4747
private static final int DEFAULT_MAX_HTTP_CONNECTIONS_PER_ROUTE = 1000;
48-
private static final int DEFAULT_HTTP_CONNECTION_TIMEOUT = 60 * 1000; // ms
49-
private static final int DEFAULT_HTTP_CLIENT_SOCKET_TIMEOUT = 300 * 1000; // ms
5048
private final PoolingHttpClientConnectionManager connectionManager;
5149
private final CloseableHttpClient httpClient;
5250
private IdleConnectionEvictor idleConnectionEvictor;
@@ -134,11 +132,12 @@ private PoolingHttpClientConnectionManager initializeConnectionManager(
134132
return connectionManager;
135133
}
136134

137-
private RequestConfig makeRequestConfig() {
135+
private RequestConfig makeRequestConfig(int timeoutSeconds) {
136+
int timeoutMillis = timeoutSeconds * 1000;
138137
return RequestConfig.custom()
139-
.setConnectionRequestTimeout(DEFAULT_HTTP_CONNECTION_TIMEOUT)
140-
.setConnectTimeout(DEFAULT_HTTP_CONNECTION_TIMEOUT)
141-
.setSocketTimeout(DEFAULT_HTTP_CLIENT_SOCKET_TIMEOUT)
138+
.setConnectionRequestTimeout(timeoutMillis)
139+
.setConnectTimeout(timeoutMillis)
140+
.setSocketTimeout(timeoutMillis)
142141
.build();
143142
}
144143

@@ -152,7 +151,7 @@ private CloseableHttpClient makeClosableHttpClient(
152151
HttpClientBuilder.create()
153152
.setConnectionManager(connectionManager)
154153
.setUserAgent(UserAgentManager.getUserAgentString())
155-
.setDefaultRequestConfig(makeRequestConfig())
154+
.setDefaultRequestConfig(makeRequestConfig(connectionContext.getSocketTimeout()))
156155
.setRetryHandler(retryHandler)
157156
.addInterceptorFirst(retryHandler);
158157
setupProxy(connectionContext, builder);

0 commit comments

Comments
 (0)