This is an automated email from the ASF dual-hosted git repository.
jt2594838 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new cd5c3a31195 Fix empty deleteTimeseries requests (#18012)
cd5c3a31195 is described below
commit cd5c3a31195c0ef69b0bf3ccacfd10257bd43ddb
Author: Caideyipi <[email protected]>
AuthorDate: Thu Jun 25 18:46:48 2026 +0800
Fix empty deleteTimeseries requests (#18012)
---
.../main/java/org/apache/iotdb/session/SessionConnection.java | 3 +++
.../main/java/org/apache/iotdb/session/pool/SessionPool.java | 3 +++
.../java/org/apache/iotdb/session/SessionConnectionTest.java | 8 ++++++++
.../java/org/apache/iotdb/session/pool/SessionPoolTest.java | 11 +++++++++++
.../iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java | 3 +++
5 files changed, 28 insertions(+)
diff --git
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/SessionConnection.java
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/SessionConnection.java
index 468b59abb0c..65c7f55c41f 100644
---
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/SessionConnection.java
+++
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/SessionConnection.java
@@ -864,6 +864,9 @@ public class SessionConnection {
protected void deleteTimeseries(List<String> paths)
throws IoTDBConnectionException, StatementExecutionException {
+ if (paths.isEmpty()) {
+ return;
+ }
callWithRetryAndVerify(() -> client.deleteTimeseries(sessionId, paths));
}
diff --git
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java
index 8136b2be68f..6a4107f5c0d 100644
---
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java
+++
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java
@@ -2013,6 +2013,9 @@ public class SessionPool implements ISessionPool {
@Override
public void deleteTimeseries(List<String> paths)
throws IoTDBConnectionException, StatementExecutionException {
+ if (paths.isEmpty()) {
+ return;
+ }
ISession session = getSession();
try {
session.deleteTimeseries(paths);
diff --git
a/iotdb-client/session/src/test/java/org/apache/iotdb/session/SessionConnectionTest.java
b/iotdb-client/session/src/test/java/org/apache/iotdb/session/SessionConnectionTest.java
index a10d9b1d6f4..fea78466a78 100644
---
a/iotdb-client/session/src/test/java/org/apache/iotdb/session/SessionConnectionTest.java
+++
b/iotdb-client/session/src/test/java/org/apache/iotdb/session/SessionConnectionTest.java
@@ -351,6 +351,14 @@ public class SessionConnectionTest {
sessionConnection.deleteTimeseries(Arrays.asList("root.sg1.d1.s1"));
}
+ @Test
+ public void testDeleteEmptyTimeseries()
+ throws IoTDBConnectionException, StatementExecutionException, TException
{
+ sessionConnection.deleteTimeseries(Collections.emptyList());
+
+ Mockito.verify(client, Mockito.never()).deleteTimeseries(anyLong(), any());
+ }
+
@Test
public void testDeleteData() throws IoTDBConnectionException,
StatementExecutionException {
sessionConnection.deleteData(new TSDeleteDataReq());
diff --git
a/iotdb-client/session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java
b/iotdb-client/session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java
index ce48172af2b..d08625cb978 100644
---
a/iotdb-client/session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java
+++
b/iotdb-client/session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java
@@ -777,6 +777,17 @@ public class SessionPoolTest {
((ConcurrentLinkedDeque<ISession>)
Whitebox.getInternalState(sessionPool, "queue")).size());
}
+ @Test
+ public void testDeleteEmptyTimeseriesList()
+ throws IoTDBConnectionException, StatementExecutionException {
+ sessionPool.deleteTimeseries(Collections.emptyList());
+
+ Mockito.verify(session,
Mockito.never()).deleteTimeseries(Mockito.<List<String>>any());
+ assertEquals(
+ 1,
+ ((ConcurrentLinkedDeque<ISession>)
Whitebox.getInternalState(sessionPool, "queue")).size());
+ }
+
@Test
public void testDeleteData() throws IoTDBConnectionException,
StatementExecutionException {
String path = "root.device1.temperature";
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index 54ac31ce7f7..6b0350287fb 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -2026,6 +2026,9 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
return getNotLoggedInStatus();
}
+ if (path.isEmpty()) {
+ return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS);
+ }
// Step 1: transfer from DeleteStorageGroupsReq to Statement
DeleteTimeSeriesStatement statement =
StatementGenerator.createDeleteTimeSeriesStatement(path);