Repository navigation
Open
Labels
Type: enhancementNew feature or requestNew feature or request
Description
Describe the enhancement requested
Describe the enhancement requested
The Flight SQL JDBC driver can use the JVM proxy settings (https.proxyHost, https.proxyPort, http.nonProxyHosts, …). This support recently added with #1027 apply to the whole JVM. They are awkward in these situations:
- Several JDBC connections in the same JVM need different proxies, or some need none.
- The application runs in a tool or server where the JVM flags can't be changed, such as a BI tool or a JDBC client IDE.
- The proxy needs credentials. The JVM properties don't cover proxy authentication for grpc.
I propose connection properties that, when enabled, take precedence over the JVM settings.
Proposed properties
| Property | Type | Default | Description |
|---|---|---|---|
useProxy |
boolean | false |
Enables the proxy properties below. When false, they are ignored and the current behavior (JVM settings) is unchanged. |
proxyHost |
string | none | Proxy host. Required when useProxy=true, unless nonProxyHosts is *. |
proxyPort |
int | none | Proxy port (1–65535). Required when proxyHost is set. |
proxyUser |
string | none | User for proxy authentication. |
proxyPassword |
string | none | Password for proxy authentication. It must be set together with proxyUser. |
proxyProtocol |
string | http |
Protocol used to connect to the proxy. Other values are rejected with a SQLException. |
nonProxyHosts |
string | none | |-separated host patterns that bypass the proxy. * is a wildcard and a leading . matches subdomains. A value of * means direct connections for all hosts. |
Example:
jdbc:arrow-flight-sql://flight.example.com:443?useEncryption=true&useProxy=true&proxyHost=proxy.corp&proxyPort=3128&proxyUser=me&proxyPassword=secret&nonProxyHosts=localhost|*.internal
Implementation
- Add the properties to ArrowFlightConnectionProperty. They must not be sent as call headers.
- Add a FlightProxyDetector that implements gRPC's ProxyDetector. It returns an HttpConnectProxiedSocketAddress, with credentials when they are set, or null for hosts that match nonProxyHosts.
- Add ArrowFlightSqlClientHandler.Builder#withProxyDetector. It calls NettyChannelBuilder.proxyDetector(...) only when a detector is set, and it is retained when the builder is copied.
- Validate the configuration when the connection is created. Invalid configurations throw SQLException with a clear message.
- Add a unit test for the detector.
Status
With the help of Claude we have already implemented this in a fork, including the tests. If the proposal is acceptable, we can open open a PR. We would adjust the property names.
Metadata
Metadata
Assignees
Labels
Type: enhancementNew feature or requestNew feature or request
Activity