Skip to content

Commit 2916f47

Browse files
authored
Merge pull request #2888 from ClickHouse/06/22/26/move_multipart_logic_to_transport
[client-v2] moved query send params in multipart body to transport layer
2 parents 83ba9a4 + 8f885fa commit 2916f47

2 files changed

Lines changed: 23 additions & 28 deletions

File tree

client-v2/src/main/java/com/clickhouse/client/api/Client.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1670,15 +1670,9 @@ public CompletableFuture<QueryResponse> query(String sqlQuery, Map<String, Objec
16701670
for (int i = 0; i <= retries; i++) {
16711671
ClassicHttpResponse httpResponse = null;
16721672
try {
1673-
boolean useMultipart = ClientConfigProperties.HTTP_SEND_PARAMS_IN_BODY.getOrDefault(requestSettings.getAllSettings());
1674-
if (queryParams != null && useMultipart) {
1675-
httpResponse = httpClientHelper.executeMultiPartRequest(selectedEndpoint,
1676-
requestSettings.getAllSettings(), sqlQuery);
1677-
} else {
1678-
httpResponse = httpClientHelper.executeRequest(selectedEndpoint,
1673+
httpResponse = httpClientHelper.executeRequest(selectedEndpoint,
16791674
requestSettings.getAllSettings(),
16801675
sqlQuery);
1681-
}
16821676
// Check response
16831677
if (httpResponse.getCode() == HttpStatus.SC_SERVICE_UNAVAILABLE) {
16841678
LOG.warn("Failed to get response. Server returned {}. Retrying. (Duration: {})", httpResponse.getCode(), durationSince(startTime));

client-v2/src/main/java/com/clickhouse/client/api/internal/HttpAPIClientHelper.java

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -516,35 +516,36 @@ private HttpPost createPostRequest(URI uri, Map<String, Object> requestConfig) {
516516
public ClassicHttpResponse executeRequest(Endpoint server, Map<String, Object> requestConfig,
517517
String body) throws Exception {
518518

519-
final URI uri = createRequestURI(server, requestConfig, true);
520-
final HttpPost req = createPostRequest(uri, requestConfig);
521-
final String contentEncoding = req.containsHeader(HttpHeaders.CONTENT_ENCODING) ? req.getHeader(HttpHeaders.CONTENT_ENCODING).getValue() : null;
522-
523-
HttpEntity httpEntity = new ByteArrayEntity(body.getBytes(StandardCharsets.UTF_8.name()), CONTENT_TYPE, contentEncoding);
524-
req.setEntity(wrapRequestEntity(httpEntity, requestConfig));
525-
526-
return doPostRequest(requestConfig, req);
527-
}
528-
529-
public ClassicHttpResponse executeMultiPartRequest(Endpoint server, Map<String, Object> requestConfig, String sqlQuery) throws Exception {
519+
boolean useMultipart = ClientConfigProperties.HTTP_SEND_PARAMS_IN_BODY.<Boolean>getOrDefault(requestConfig) &&
520+
requestConfig.containsKey(HttpAPIClientHelper.KEY_STATEMENT_PARAMS);
530521

531-
requestConfig.put(ClientConfigProperties.COMPRESS_CLIENT_REQUEST.getKey(), false);
522+
// adjust configuration
523+
if (useMultipart) {
524+
requestConfig.put(ClientConfigProperties.COMPRESS_CLIENT_REQUEST.getKey(), false); // turn-off client-req compression
525+
}
532526

533-
final URI uri = createRequestURI(server, requestConfig, false);
527+
// create configuration dependent objects
528+
final URI uri = createRequestURI(server, requestConfig, !useMultipart);
534529
final HttpPost req = createPostRequest(uri, requestConfig);
535530

536-
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
537-
addStatementParams(requestConfig, multipartEntityBuilder::addTextBody);
538-
multipartEntityBuilder.addTextBody(ClickHouseHttpProto.QPARAM_QUERY_STMT, sqlQuery);
539-
531+
if (useMultipart) {
532+
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
533+
addStatementParams(requestConfig, multipartEntityBuilder::addTextBody);
534+
multipartEntityBuilder.addTextBody(ClickHouseHttpProto.QPARAM_QUERY_STMT, body);
540535

541-
HttpEntity httpEntity = multipartEntityBuilder.build();
542-
req.setHeader(HttpHeaders.CONTENT_TYPE, httpEntity.getContentType()); // set proper content type with generated boundary value
543-
req.setEntity(wrapRequestEntity(httpEntity, requestConfig));
536+
HttpEntity httpEntity = multipartEntityBuilder.build();
537+
req.setHeader(HttpHeaders.CONTENT_TYPE, httpEntity.getContentType()); // set proper content type with generated boundary value
538+
req.setEntity(wrapRequestEntity(httpEntity, requestConfig));
544539

545-
return doPostRequest(requestConfig, req);
540+
} else {
541+
final String contentEncoding = req.containsHeader(HttpHeaders.CONTENT_ENCODING) ? req.getHeader(HttpHeaders.CONTENT_ENCODING).getValue() : null;
546542

543+
HttpEntity httpEntity = new ByteArrayEntity(body.getBytes(StandardCharsets.UTF_8.name()), CONTENT_TYPE, contentEncoding);
544+
req.setEntity(wrapRequestEntity(httpEntity, requestConfig));
545+
}
547546

547+
// execute
548+
return doPostRequest(requestConfig, req);
548549
}
549550

550551
public ClassicHttpResponse executeRequest(Endpoint server, Map<String, Object> requestConfig,

0 commit comments

Comments
 (0)