Skip to content

Commit 7fe1d31

Browse files
SQL: Add project routing support to JDBC (elastic#138756)
1 parent bec10d7 commit 7fe1d31

File tree

11 files changed

+76
-17
lines changed

11 files changed

+76
-17
lines changed

docs/changelog/138756.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 138756
2+
summary: Add project routing support to JDBC
3+
area: SQL
4+
type: enhancement
5+
issues: []

x-pack/plugin/sql/jdbc/src/main/java/org/elasticsearch/xpack/sql/jdbc/JdbcHttpClient.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ Cursor query(String sql, List<SqlTypedParamValue> params, RequestMeta meta) thro
7575
conCfg.fieldMultiValueLeniency(),
7676
conCfg.indexIncludeFrozen(),
7777
conCfg.binaryCommunication(),
78-
conCfg.allowPartialSearchResults()
78+
conCfg.allowPartialSearchResults(),
79+
conCfg.projectRouting()
7980
);
8081
ResponseWithWarnings<SqlQueryResponse> response = httpClient.query(sqlRequest);
8182
return new DefaultCursor(
@@ -99,7 +100,8 @@ Tuple<String, List<List<Object>>> nextPage(String cursor, RequestMeta meta) thro
99100
TimeValue.timeValueMillis(meta.pageTimeoutInMs()),
100101
new RequestInfo(Mode.JDBC),
101102
conCfg.binaryCommunication(),
102-
conCfg.allowPartialSearchResults()
103+
conCfg.allowPartialSearchResults(),
104+
conCfg.projectRouting()
103105
);
104106
SqlQueryResponse response = httpClient.query(sqlRequest).response();
105107
return new Tuple<>(response.cursor(), response.rows());

x-pack/plugin/sql/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/JdbcConfigurationTests.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,12 @@ public void testDebugFlushAlways() throws Exception {
116116
assertThat(ci.flushAlways(), is(false));
117117
}
118118

119+
public void testProjectRouting() throws Exception {
120+
JdbcConfiguration ci = ci(jdbcPrefix() + "a:1/?project.routing=foo");
121+
assertThat(ci.baseUri().toString(), is("http://a:1/"));
122+
assertThat(ci.projectRouting(), is("foo"));
123+
}
124+
119125
public void testTypeInParam() throws Exception {
120126
Exception e = expectThrows(JdbcSQLException.class, () -> ci(jdbcPrefix() + "a:1/foo/bar/tar?debug=true&debug.out=jdbc.out"));
121127
assertEquals("Unknown parameter [debug.out]; did you mean [debug.output]", e.getMessage());

x-pack/plugin/sql/sql-action/src/test/java/org/elasticsearch/xpack/sql/action/TestSqlQueryRequest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
8787
ProtoShim.toProto(this.waitForCompletionTimeout()),
8888
this.keepOnCompletion(),
8989
ProtoShim.toProto(this.keepAlive()),
90-
this.allowPartialSearchResults()
90+
this.allowPartialSearchResults(),
91+
null
9192
);
9293
return SqlTestUtils.toXContentBuilder(builder, this, protoInstance);
9394
}

x-pack/plugin/sql/sql-action/src/test/java/org/elasticsearch/xpack/sql/action/TestSqlTranslateRequest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
6262
null,
6363
false,
6464
null,
65-
false
65+
false,
66+
null
6667
);
6768
return SqlTestUtils.toXContentBuilder(builder, this, protoInstance);
6869
}

x-pack/plugin/sql/sql-client/src/main/java/org/elasticsearch/xpack/sql/client/ConnectionConfiguration.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ public class ConnectionConfiguration {
7373
public static final String ALLOW_PARTIAL_SEARCH_RESULTS = "allow.partial.search.results";
7474
public static final String ALLOW_PARTIAL_SEARCH_RESULTS_DEFAULT = "false";
7575

76+
// CPS project routing
77+
public static final String PROJECT_ROUTING = "project.routing";
78+
7679
protected static final Set<String> OPTION_NAMES = new LinkedHashSet<>(
7780
Arrays.asList(
7881
PROPERTIES_VALIDATION,
@@ -85,7 +88,8 @@ public class ConnectionConfiguration {
8588
AUTH_USER,
8689
AUTH_PASS,
8790
CATALOG,
88-
ALLOW_PARTIAL_SEARCH_RESULTS
91+
ALLOW_PARTIAL_SEARCH_RESULTS,
92+
PROJECT_ROUTING
8993
)
9094
);
9195

@@ -116,6 +120,8 @@ public class ConnectionConfiguration {
116120

117121
private final boolean allowPartialSearchResults;
118122

123+
private final String projectRouting;
124+
119125
@SuppressWarnings("this-escape")
120126
public ConnectionConfiguration(URI baseURI, String connectionString, Properties props) throws ClientException {
121127
this.connectionString = connectionString;
@@ -157,6 +163,8 @@ public ConnectionConfiguration(URI baseURI, String connectionString, Properties
157163
settings.getProperty(ALLOW_PARTIAL_SEARCH_RESULTS, ALLOW_PARTIAL_SEARCH_RESULTS_DEFAULT),
158164
Boolean::parseBoolean
159165
);
166+
167+
projectRouting = settings.getProperty(PROJECT_ROUTING);
160168
}
161169

162170
public ConnectionConfiguration(
@@ -173,7 +181,8 @@ public ConnectionConfiguration(
173181
String pass,
174182
SslConfig sslConfig,
175183
ProxyConfig proxyConfig,
176-
boolean allowPartialSearchResults
184+
boolean allowPartialSearchResults,
185+
String projectRouting
177186
) throws ClientException {
178187
this.validateProperties = validateProperties;
179188
this.binaryCommunication = binaryCommunication;
@@ -194,6 +203,7 @@ public ConnectionConfiguration(
194203
this.baseURI = baseURI;
195204

196205
this.allowPartialSearchResults = allowPartialSearchResults;
206+
this.projectRouting = projectRouting;
197207
}
198208

199209
private static URI normalizeSchema(URI uri, String connectionString, boolean isSSLEnabled) {
@@ -311,4 +321,8 @@ public String connectionString() {
311321
public boolean allowPartialSearchResults() {
312322
return allowPartialSearchResults;
313323
}
324+
325+
public String projectRouting() {
326+
return projectRouting;
327+
}
314328
}

x-pack/plugin/sql/sql-client/src/main/java/org/elasticsearch/xpack/sql/client/HttpClient.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,21 @@ public SqlQueryResponse basicQuery(String query, int fetchSize) throws SQLExcept
8585
}
8686

8787
public SqlQueryResponse basicQuery(String query, int fetchSize, boolean fieldMultiValueLeniency) throws SQLException {
88-
return basicQuery(query, fetchSize, fieldMultiValueLeniency, cfg.allowPartialSearchResults());
88+
return basicQuery(query, fetchSize, fieldMultiValueLeniency, cfg.allowPartialSearchResults(), cfg.projectRouting());
8989
}
9090

9191
public SqlQueryResponse basicQuery(String query, int fetchSize, boolean fieldMultiValueLeniency, boolean allowPartialSearchResults)
9292
throws SQLException {
93+
return basicQuery(query, fetchSize, fieldMultiValueLeniency, allowPartialSearchResults, cfg.projectRouting());
94+
}
95+
96+
public SqlQueryResponse basicQuery(
97+
String query,
98+
int fetchSize,
99+
boolean fieldMultiValueLeniency,
100+
boolean allowPartialSearchResults,
101+
String projectRouting
102+
) throws SQLException {
93103
// TODO allow customizing the time zone - this is what session set/reset/get should be about
94104
// method called only from CLI
95105
SqlQueryRequest sqlRequest = new SqlQueryRequest(
@@ -106,7 +116,8 @@ public SqlQueryResponse basicQuery(String query, int fetchSize, boolean fieldMul
106116
fieldMultiValueLeniency,
107117
false,
108118
cfg.binaryCommunication(),
109-
allowPartialSearchResults
119+
allowPartialSearchResults,
120+
projectRouting
110121
);
111122
return query(sqlRequest).response();
112123
}
@@ -123,7 +134,8 @@ public SqlQueryResponse nextPage(String cursor) throws SQLException {
123134
TimeValue.timeValueMillis(cfg.pageTimeout()),
124135
new RequestInfo(Mode.CLI),
125136
cfg.binaryCommunication(),
126-
cfg.allowPartialSearchResults()
137+
cfg.allowPartialSearchResults(),
138+
cfg.projectRouting()
127139
);
128140
return post(CoreProtocol.SQL_QUERY_REST_ENDPOINT, sqlRequest, Payloads::parseQueryResponse).response();
129141
}
@@ -179,7 +191,8 @@ private boolean head(String path, long timeoutInMs) throws SQLException {
179191
cfg.authPass(),
180192
cfg.sslConfig(),
181193
cfg.proxyConfig(),
182-
CoreProtocol.ALLOW_PARTIAL_SEARCH_RESULTS
194+
CoreProtocol.ALLOW_PARTIAL_SEARCH_RESULTS,
195+
cfg.projectRouting()
183196
);
184197
try {
185198
return java.security.AccessController.doPrivileged(

x-pack/plugin/sql/sql-client/src/test/java/org/elasticsearch/xpack/sql/client/HttpClientRequestTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ private void assertBinaryRequestForDrivers(XContentType xContentType) throws URI
175175
randomBoolean(),
176176
randomBoolean(),
177177
isBinary,
178-
randomBoolean()
178+
randomBoolean(),
179+
null
179180
);
180181

181182
prepareMockResponse();

x-pack/plugin/sql/sql-proto/src/main/java/org/elasticsearch/xpack/sql/proto/Payloads.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import static org.elasticsearch.xpack.sql.proto.CoreProtocol.MODE_NAME;
4242
import static org.elasticsearch.xpack.sql.proto.CoreProtocol.PAGE_TIMEOUT_NAME;
4343
import static org.elasticsearch.xpack.sql.proto.CoreProtocol.PARAMS_NAME;
44+
import static org.elasticsearch.xpack.sql.proto.CoreProtocol.PROJECT_ROUTING_NAME;
4445
import static org.elasticsearch.xpack.sql.proto.CoreProtocol.QUERY_NAME;
4546
import static org.elasticsearch.xpack.sql.proto.CoreProtocol.REQUEST_TIMEOUT_NAME;
4647
import static org.elasticsearch.xpack.sql.proto.CoreProtocol.ROWS_NAME;
@@ -242,6 +243,9 @@ public static void generate(
242243
if (request.allowPartialSearchResults()) {
243244
generator.writeBooleanField(ALLOW_PARTIAL_SEARCH_RESULTS_NAME, request.allowPartialSearchResults());
244245
}
246+
if (request.projectRouting() != null) {
247+
generator.writeStringField(PROJECT_ROUTING_NAME, request.projectRouting());
248+
}
245249

246250
if (extraFields != null) {
247251
extraFields.accept(generator);

x-pack/plugin/sql/sql-proto/src/main/java/org/elasticsearch/xpack/sql/proto/SqlQueryRequest.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class SqlQueryRequest extends AbstractSqlRequest {
3939
private final TimeValue keepAlive;
4040

4141
private final boolean allowPartialSearchResults;
42+
private final String projectRouting;
4243

4344
public SqlQueryRequest(
4445
String query,
@@ -57,7 +58,8 @@ public SqlQueryRequest(
5758
TimeValue waitForCompletionTimeout,
5859
boolean keepOnCompletion,
5960
TimeValue keepAlive,
60-
boolean allowPartialSearchResults
61+
boolean allowPartialSearchResults,
62+
String projectRouting
6163
) {
6264
super(requestInfo);
6365
this.query = query;
@@ -76,6 +78,7 @@ public SqlQueryRequest(
7678
this.keepOnCompletion = keepOnCompletion;
7779
this.keepAlive = keepAlive;
7880
this.allowPartialSearchResults = allowPartialSearchResults;
81+
this.projectRouting = projectRouting;
7982
}
8083

8184
public SqlQueryRequest(
@@ -92,7 +95,8 @@ public SqlQueryRequest(
9295
boolean fieldMultiValueLeniency,
9396
boolean indexIncludeFrozen,
9497
Boolean binaryCommunication,
95-
boolean allowPartialSearchResults
98+
boolean allowPartialSearchResults,
99+
String projectRouting
96100
) {
97101
this(
98102
query,
@@ -111,7 +115,8 @@ public SqlQueryRequest(
111115
CoreProtocol.DEFAULT_WAIT_FOR_COMPLETION_TIMEOUT,
112116
CoreProtocol.DEFAULT_KEEP_ON_COMPLETION,
113117
CoreProtocol.DEFAULT_KEEP_ALIVE,
114-
allowPartialSearchResults
118+
allowPartialSearchResults,
119+
projectRouting
115120
);
116121
}
117122

@@ -121,7 +126,8 @@ public SqlQueryRequest(
121126
TimeValue pageTimeout,
122127
RequestInfo requestInfo,
123128
boolean binaryCommunication,
124-
boolean allowPartialSearchResults
129+
boolean allowPartialSearchResults,
130+
String projectRouting
125131
) {
126132
this(
127133
"",
@@ -137,7 +143,8 @@ public SqlQueryRequest(
137143
CoreProtocol.FIELD_MULTI_VALUE_LENIENCY,
138144
CoreProtocol.INDEX_INCLUDE_FROZEN,
139145
binaryCommunication,
140-
allowPartialSearchResults
146+
allowPartialSearchResults,
147+
projectRouting
141148
);
142149
}
143150

@@ -227,6 +234,10 @@ public TimeValue keepAlive() {
227234
return keepAlive;
228235
}
229236

237+
public String projectRouting() {
238+
return projectRouting;
239+
}
240+
230241
public boolean allowPartialSearchResults() {
231242
return allowPartialSearchResults;
232243
}

0 commit comments

Comments
 (0)