Skip to content

Commit f8de038

Browse files
authored
Merge pull request #1846 from ClickHouse/clientv2_fix_statistics
reimplemented in way ClientStats is always not null
2 parents bf3d020 + 50bc7b1 commit f8de038

File tree

2 files changed

+40
-8
lines changed

2 files changed

+40
-8
lines changed

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

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,7 +1083,7 @@ public CompletableFuture<InsertResponse> insert(String tableName, List<?> data,
10831083
}
10841084

10851085

1086-
String operationId = startOperation();
1086+
String operationId = registerOperationMetrics();
10871087
settings.setOperationId(operationId);
10881088
if (useNewImplementation) {
10891089
globalClientStats.get(operationId).start(ClientMetrics.OP_DURATION);
@@ -1225,13 +1225,18 @@ public CompletableFuture<InsertResponse> insert(String tableName,
12251225
InputStream data,
12261226
ClickHouseFormat format,
12271227
InsertSettings settings) {
1228+
12281229
String operationId = (String) settings.getOperationId();
1229-
if (operationId == null) {
1230-
operationId = startOperation();
1231-
settings.setOperationId(operationId);
1230+
ClientStatisticsHolder clientStats = null;
1231+
if (operationId != null) {
1232+
clientStats = globalClientStats.remove(operationId);
1233+
}
1234+
1235+
if (clientStats == null) {
1236+
clientStats = new ClientStatisticsHolder();
12321237
}
1233-
ClientStatisticsHolder clientStats = globalClientStats.remove(operationId);
12341238
clientStats.start(ClientMetrics.OP_DURATION);
1239+
final ClientStatisticsHolder finalClientStats = clientStats;
12351240

12361241
Supplier<InsertResponse> responseSupplier;
12371242
if (useNewImplementation) {
@@ -1280,7 +1285,7 @@ public CompletableFuture<InsertResponse> insert(String tableName,
12801285
continue;
12811286
}
12821287

1283-
OperationMetrics metrics = new OperationMetrics(clientStats);
1288+
OperationMetrics metrics = new OperationMetrics(finalClientStats);
12841289
String summary = HttpAPIClientHelper.getHeaderVal(httpResponse.getFirstHeader(ClickHouseHttpProto.HEADER_SRV_SUMMARY), "{}");
12851290
ProcessParser.parseSummary(summary, metrics);
12861291
String queryId = HttpAPIClientHelper.getHeaderVal(httpResponse.getFirstHeader(ClickHouseHttpProto.HEADER_QUERY_ID), finalSettings.getQueryId(), String::valueOf);
@@ -1333,7 +1338,7 @@ public CompletableFuture<InsertResponse> insert(String tableName,
13331338
} else {
13341339
clickHouseResponse = future.get();
13351340
}
1336-
InsertResponse response = new InsertResponse(clickHouseResponse, clientStats);
1341+
InsertResponse response = new InsertResponse(clickHouseResponse, finalClientStats);
13371342
return response;
13381343
} catch (ExecutionException e) {
13391344
throw new ClientException("Failed to get insert response", e.getCause());
@@ -1762,7 +1767,7 @@ public ClickHouseBinaryFormatReader newBinaryFormatReader(QueryResponse response
17621767
return newBinaryFormatReader(response, null);
17631768
}
17641769

1765-
private String startOperation() {
1770+
private String registerOperationMetrics() {
17661771
String operationId = UUID.randomUUID().toString();
17671772
globalClientStats.put(operationId, new ClientStatisticsHolder());
17681773
return operationId;

client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,4 +230,31 @@ public void insertRawDataSimple(int numberOfRecords) throws Exception {
230230
OperationMetrics metrics = response.getMetrics();
231231
assertEquals((int)response.getWrittenRows(), numberOfRecords );
232232
}
233+
234+
@Test(groups = { "integration" })
235+
public void testInsertMetricsOperationId() throws Exception {
236+
final String tableName = "insert_metrics_test";
237+
final String createSQL = "CREATE TABLE " + tableName +
238+
" (Id UInt32, event_ts Timestamp, name String, p1 Int64, p2 String) ENGINE = MergeTree() ORDER BY ()";
239+
dropTable(tableName);
240+
createTable(createSQL);
241+
242+
ByteArrayOutputStream data = new ByteArrayOutputStream();
243+
PrintWriter writer = new PrintWriter(data);
244+
int numberOfRecords = 3;
245+
for (int i = 0; i < numberOfRecords; i++) {
246+
writer.printf("%d\t%s\t%s\t%d\t%s\n", i, "2021-01-01 00:00:00", "name" + i, i, "p2");
247+
}
248+
writer.flush();
249+
250+
InsertSettings settings = new InsertSettings()
251+
.setQueryId(String.valueOf(UUID.randomUUID()))
252+
.setOperationId(UUID.randomUUID().toString());
253+
InsertResponse response = client.insert(tableName, new ByteArrayInputStream(data.toByteArray()),
254+
ClickHouseFormat.TSV, settings).get(30, TimeUnit.SECONDS);
255+
OperationMetrics metrics = response.getMetrics();
256+
assertEquals((int)response.getWrittenRows(), numberOfRecords );
257+
assertEquals(metrics.getQueryId(), settings.getQueryId());
258+
assertTrue(metrics.getMetric(ClientMetrics.OP_DURATION).getLong() > 0);
259+
}
233260
}

0 commit comments

Comments
 (0)