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);

Reply via email to