Skip to content

Commit d737f4b

Browse files
authored
Stabilize ZSTD compressor level pipe IT (#17917)
* Strictly isolate pipe tree and table visibility * Add pipe visibility unit test coverage * Add pipe static meta visibility edge tests * Add pipe table visibility filter test * Fix table pipe RPC visibility in ITs * Fix zstd compressor level IT assertion * it-fix * Update IoTDBPipeSinkCompressionIT.java * Stabilize zstd compressor level pipe IT * Keep only zstd compression pipe IT changes
1 parent bd952e1 commit d737f4b

2 files changed

Lines changed: 78 additions & 106 deletions

File tree

‎integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/tablemodel/manual/enhanced/IoTDBPipeSinkCompressionIT.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,9 @@ public void testZstdCompressorLevel() throws Exception {
336336
}
337337

338338
final List<TShowPipeInfo> showPipeResult =
339-
client.showPipe(new TShowPipeReq().setUserName(SessionConfig.DEFAULT_USER)).pipeInfoList;
339+
client.showPipe(
340+
new TShowPipeReq().setIsTableModel(true).setUserName(SessionConfig.DEFAULT_USER))
341+
.pipeInfoList;
340342
showPipeResult.removeIf(i -> i.getId().startsWith("__consensus"));
341343
Assert.assertEquals(
342344
3,

‎integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/enhanced/IoTDBPipeSinkCompressionIT.java‎

Lines changed: 75 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -223,105 +223,17 @@ public void testZstdCompressorLevel() throws Exception {
223223

224224
try (final SyncConfigNodeIServiceClient client =
225225
(SyncConfigNodeIServiceClient) senderEnv.getLeaderConfigNodeConnection()) {
226-
TestUtils.executeNonQueries(
227-
senderEnv,
228-
Arrays.asList(
229-
"insert into root.db.d1(time, s1) values (1, 1)",
230-
"insert into root.db.d1(time, s2) values (1, 1)",
231-
"insert into root.db.d1(time, s3) values (1, 1)",
232-
"insert into root.db.d1(time, s4) values (1, 1)",
233-
"insert into root.db.d1(time, s5) values (1, 1)",
234-
"flush"),
235-
null);
236-
237-
// Create 5 pipes with different zstd compression levels, p4 and p5 should fail.
238-
239-
try (final Connection connection = senderEnv.getConnection();
240-
final Statement statement = connection.createStatement()) {
241-
statement.execute(
242-
String.format(
243-
"create pipe p1"
244-
+ " with source ('source.pattern'='root.db.d1.s1')"
245-
+ " with sink ("
246-
+ "'sink.ip'='%s',"
247-
+ "'sink.port'='%s',"
248-
+ "'sink.compressor'='zstd, zstd',"
249-
+ "'sink.compressor.zstd.level'='3')",
250-
receiverIp, receiverPort));
251-
} catch (SQLException e) {
252-
e.printStackTrace();
253-
fail(e.getMessage());
254-
}
255-
256-
try (final Connection connection = senderEnv.getConnection();
257-
final Statement statement = connection.createStatement()) {
258-
statement.execute(
259-
String.format(
260-
"create pipe p2"
261-
+ " with source ('source.pattern'='root.db.d1.s2')"
262-
+ " with sink ("
263-
+ "'sink.ip'='%s',"
264-
+ "'sink.port'='%s',"
265-
+ "'sink.compressor'='zstd, zstd',"
266-
+ "'sink.compressor.zstd.level'='22')",
267-
receiverIp, receiverPort));
268-
} catch (SQLException e) {
269-
e.printStackTrace();
270-
fail(e.getMessage());
271-
}
272-
273-
try (final Connection connection = senderEnv.getConnection();
274-
final Statement statement = connection.createStatement()) {
275-
statement.execute(
276-
String.format(
277-
"create pipe p3"
278-
+ " with source ('source.pattern'='root.db.d1.s3')"
279-
+ " with sink ("
280-
+ "'sink.ip'='%s',"
281-
+ "'sink.port'='%s',"
282-
+ "'sink.compressor'='zstd, zstd',"
283-
+ "'sink.compressor.zstd.level'='-131072')",
284-
receiverIp, receiverPort));
285-
} catch (SQLException e) {
286-
e.printStackTrace();
287-
fail(e.getMessage());
288-
}
289-
290-
try (final Connection connection = senderEnv.getConnection();
291-
final Statement statement = connection.createStatement()) {
292-
statement.execute(
293-
String.format(
294-
"create pipe p4"
295-
+ " with source ('source.pattern'='root.db.d1.s4')"
296-
+ " with sink ("
297-
+ "'sink.ip'='%s',"
298-
+ "'sink.port'='%s',"
299-
+ "'sink.compressor'='zstd, zstd',"
300-
+ "'sink.compressor.zstd.level'='-131073')",
301-
receiverIp, receiverPort));
302-
fail();
303-
} catch (SQLException e) {
304-
// Make sure the error message in IoTDBConnector.java is returned
305-
Assert.assertTrue(e.getMessage().contains("Zstd compression level should be in the range"));
306-
}
307-
308-
try (final Connection connection = senderEnv.getConnection();
309-
final Statement statement = connection.createStatement()) {
310-
statement.execute(
311-
String.format(
312-
"create pipe p5"
313-
+ " with source ('source.pattern'='root.db.d1.s5')"
314-
+ " with sink ("
315-
+ "'sink.ip'='%s',"
316-
+ "'sink.port'='%s',"
317-
+ "'sink.compressor'='zstd, zstd',"
318-
+ "'sink.compressor.zstd.level'='23')",
319-
receiverIp, receiverPort));
320-
fail();
321-
} catch (SQLException e) {
322-
// Make sure the error message in IoTDBConnector.java is returned
323-
Assert.assertTrue(e.getMessage().contains("Zstd compression level should be in the range"));
324-
}
226+
// Create legal zstd level pipes one by one, so the assertion identifies the exact level
227+
// that fails and avoids concurrent historical TsFile splitting for this level test.
228+
createZstdPipeAndAssertData(
229+
"p1", "root.db.d1.s1", "3", receiverIp, receiverPort, "s1", handleFailure);
230+
createZstdPipeAndAssertData(
231+
"p2", "root.db.d1.s2", "22", receiverIp, receiverPort, "s2", handleFailure);
232+
createZstdPipeAndAssertData(
233+
"p3", "root.db.d1.s3", "-131072", receiverIp, receiverPort, "s3", handleFailure);
234+
235+
assertCreateZstdPipeFailed("p4", "root.db.d1.s4", "-131073", receiverIp, receiverPort);
236+
assertCreateZstdPipeFailed("p5", "root.db.d1.s5", "23", receiverIp, receiverPort);
325237

326238
final List<TShowPipeInfo> showPipeResult =
327239
client.showPipe(new TShowPipeReq().setUserName(SessionConfig.DEFAULT_USER)).pipeInfoList;
@@ -331,13 +243,71 @@ public void testZstdCompressorLevel() throws Exception {
331243
showPipeResult.stream()
332244
.filter(info -> !info.id.startsWith(PipeStaticMeta.SYSTEM_PIPE_PREFIX))
333245
.count());
246+
}
247+
}
334248

335-
TestUtils.assertDataEventuallyOnEnv(
336-
receiverEnv,
337-
"count timeseries root.db.**",
338-
"count(timeseries),",
339-
Collections.singleton("3,"),
340-
handleFailure);
249+
private void createZstdPipeAndAssertData(
250+
final String pipeName,
251+
final String sourcePattern,
252+
final String zstdLevel,
253+
final String receiverIp,
254+
final int receiverPort,
255+
final String measurement,
256+
final Consumer<String> handleFailure) {
257+
TestUtils.executeNonQueries(
258+
senderEnv,
259+
Arrays.asList(
260+
String.format("insert into root.db.d1(time, %s) values (1, 1)", measurement), "flush"),
261+
null);
262+
263+
try {
264+
createZstdPipe(pipeName, sourcePattern, zstdLevel, receiverIp, receiverPort);
265+
} catch (final SQLException e) {
266+
e.printStackTrace();
267+
fail(e.getMessage());
268+
}
269+
270+
TestUtils.assertDataEventuallyOnEnv(
271+
receiverEnv,
272+
String.format("select count(%s) from root.db.d1", measurement),
273+
String.format("count(root.db.d1.%s),", measurement),
274+
Collections.singleton("1,"),
275+
handleFailure);
276+
}
277+
278+
private void assertCreateZstdPipeFailed(
279+
final String pipeName,
280+
final String sourcePattern,
281+
final String zstdLevel,
282+
final String receiverIp,
283+
final int receiverPort) {
284+
try {
285+
createZstdPipe(pipeName, sourcePattern, zstdLevel, receiverIp, receiverPort);
286+
fail();
287+
} catch (final SQLException e) {
288+
Assert.assertTrue(e.getMessage().contains("Zstd compression level should be in the range"));
289+
}
290+
}
291+
292+
private void createZstdPipe(
293+
final String pipeName,
294+
final String sourcePattern,
295+
final String zstdLevel,
296+
final String receiverIp,
297+
final int receiverPort)
298+
throws SQLException {
299+
try (final Connection connection = senderEnv.getConnection();
300+
final Statement statement = connection.createStatement()) {
301+
statement.execute(
302+
String.format(
303+
"create pipe %s"
304+
+ " with source ('source.pattern'='%s')"
305+
+ " with sink ("
306+
+ "'sink.ip'='%s',"
307+
+ "'sink.port'='%s',"
308+
+ "'sink.compressor'='zstd, zstd',"
309+
+ "'sink.compressor.zstd.level'='%s')",
310+
pipeName, sourcePattern, receiverIp, receiverPort, zstdLevel));
341311
}
342312
}
343313
}

0 commit comments

Comments
 (0)