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