This is an automated email from the ASF dual-hosted git repository.

jt2594838 pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/dev/1.3 by this push:
     new 476f67f8a83 Fix empty deleteTimeseries requests (#18012) (#18037)
476f67f8a83 is described below

commit 476f67f8a83c7f2a3d58523f7636e1e79d29034c
Author: Caideyipi <[email protected]>
AuthorDate: Fri Jun 26 14:23:47 2026 +0800

    Fix empty deleteTimeseries requests (#18012) (#18037)
    
    (cherry picked from commit cd5c3a31195c0ef69b0bf3ccacfd10257bd43ddb)
---
 .../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 baa30e84131..a394b7a943b 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
@@ -779,6 +779,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 2f69145eb28..dd522959d85 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
@@ -1937,6 +1937,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 61a5abd3865..f727f3b95a0 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
@@ -347,6 +347,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 1cf3f760c6b..76bcaad5026 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
@@ -776,6 +776,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 3d34def409f..9879e65bb4d 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
@@ -1512,6 +1512,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