This is an automated email from the ASF dual-hosted git repository.
yongzao pushed a commit to branch object_type
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/object_type by this push:
new 0c064ea7b6b Support null tag for device fetch leader interface (#15909)
0c064ea7b6b is described below
commit 0c064ea7b6b80ca0134c7c54c794380802167117
Author: Yongzao <[email protected]>
AuthorDate: Thu Jul 10 19:33:19 2025 +0800
Support null tag for device fetch leader interface (#15909)
---
.../org/apache/iotdb/TableModelSessionPoolExample.java | 15 ++++++++++-----
.../java/org/apache/iotdb/isession/ITableSession.java | 3 ++-
.../src/main/java/org/apache/iotdb/session/Session.java | 5 +++--
.../main/java/org/apache/iotdb/session/TableSession.java | 5 +++--
.../apache/iotdb/session/pool/TableSessionWrapper.java | 5 +++--
.../db/protocol/thrift/impl/ClientRPCServiceImpl.java | 9 ++++++---
.../thrift-datanode/src/main/thrift/client.thrift | 3 ++-
7 files changed, 29 insertions(+), 16 deletions(-)
diff --git
a/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java
b/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java
index 87038649a1b..03e2a14c046 100644
---
a/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java
+++
b/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java
@@ -119,7 +119,7 @@ public class TableModelSessionPoolExample {
int rowIndex = tablet.getRowSize();
tablet.addTimestamp(rowIndex, timestamp);
tablet.addValue("region_id", rowIndex, "1");
- tablet.addValue("plant_id", rowIndex, "5");
+ tablet.addValue("plant_id", rowIndex, null);
tablet.addValue("device_id", rowIndex, "3");
tablet.addValue("model", rowIndex, "A");
tablet.addValue("temperature", rowIndex, 37.6F);
@@ -135,18 +135,23 @@ public class TableModelSessionPoolExample {
}
// query device leader
+ List<Boolean> isSetTag = Arrays.asList(true, true, false, true);
String correctURL =
- session.getDeviceLeaderURL("test2", Arrays.asList("test1", "1", "5",
"3"), 66);
+ session.getDeviceLeaderURL("test2", Arrays.asList("test1", "1",
"3"), isSetTag, 66);
System.out.println("Correct device leader URL: " + correctURL);
String errorDbURL =
- session.getDeviceLeaderURL("test3", Arrays.asList("test1", "1", "5",
"3"), 66);
+ session.getDeviceLeaderURL("test3", Arrays.asList("test1", "1",
"3"), isSetTag, 66);
System.out.println("Error dbName device leader URL: " + errorDbURL);
String errorDeviceURL =
- session.getDeviceLeaderURL("test2", Arrays.asList("test1", "1",
"5"), 66);
+ session.getDeviceLeaderURL("test2", Arrays.asList("test1", "3",
"1"), isSetTag, 66);
System.out.println("Error deviceId device leader URL: " +
errorDeviceURL);
+ List<Boolean> falseTagList = Arrays.asList(false, true, true, true);
+ String errorTagURL =
+ session.getDeviceLeaderURL("test2", Arrays.asList("test1", "1",
"3"), falseTagList, 66);
+ System.out.println("Error tag device leader URL: " + errorTagURL);
String errorTimeURL =
session.getDeviceLeaderURL(
- "test2", Arrays.asList("test1", "1", "5", "3"),
6666666666666666L);
+ "test2", Arrays.asList("test1", "1", "3"), isSetTag,
6666666666666666L);
System.out.println("Error time device leader URL: " + errorTimeURL);
// query table data
diff --git
a/iotdb-client/isession/src/main/java/org/apache/iotdb/isession/ITableSession.java
b/iotdb-client/isession/src/main/java/org/apache/iotdb/isession/ITableSession.java
index 5454bac5bad..bda14441f4d 100644
---
a/iotdb-client/isession/src/main/java/org/apache/iotdb/isession/ITableSession.java
+++
b/iotdb-client/isession/src/main/java/org/apache/iotdb/isession/ITableSession.java
@@ -53,10 +53,11 @@ public interface ITableSession extends AutoCloseable {
*
* @param dbName the name of the database.
* @param deviceId a list of string for constructing the specified deviceID.
+ * @param isSetTag a true indicating the deviceID is set, false otherwise.
* @param time the time at which partition the device leader is queried.
* @return the DataNode URL <ip:port> of the device leader as a String.
*/
- String getDeviceLeaderURL(String dbName, List<String> deviceId, long time)
+ String getDeviceLeaderURL(String dbName, List<String> deviceId,
List<Boolean> isSetTag, long time)
throws IoTDBConnectionException, StatementExecutionException;
/**
diff --git
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
index ee1b39f09bc..e933ab6e078 100644
--- a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -2780,9 +2780,10 @@ public class Session implements ISession {
}
}
- public TTableDeviceLeaderResp fetchDeviceLeader(String dbName, List<String>
deviceId, long time)
+ public TTableDeviceLeaderResp fetchDeviceLeader(
+ String dbName, List<String> deviceId, List<Boolean> isSetTag, long time)
throws IoTDBConnectionException, StatementExecutionException {
- TTableDeviceLeaderReq req = new TTableDeviceLeaderReq(dbName, deviceId,
time);
+ TTableDeviceLeaderReq req = new TTableDeviceLeaderReq(dbName, deviceId,
isSetTag, time);
return getDefaultSessionConnection().fetchDeviceLeader(req);
}
diff --git
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/TableSession.java
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/TableSession.java
index 34222e671da..2a83b533efa 100644
---
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/TableSession.java
+++
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/TableSession.java
@@ -43,9 +43,10 @@ public class TableSession implements ITableSession {
}
@Override
- public String getDeviceLeaderURL(String dbName, List<String> deviceId, long
time)
+ public String getDeviceLeaderURL(
+ String dbName, List<String> deviceId, List<Boolean> isSetTag, long time)
throws IoTDBConnectionException, StatementExecutionException {
- TTableDeviceLeaderResp resp = session.fetchDeviceLeader(dbName, deviceId,
time);
+ TTableDeviceLeaderResp resp = session.fetchDeviceLeader(dbName, deviceId,
isSetTag, time);
return resp.getIp() + ":" + resp.getPort();
}
diff --git
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/pool/TableSessionWrapper.java
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/pool/TableSessionWrapper.java
index ea389740ca1..559040b3752 100644
---
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/pool/TableSessionWrapper.java
+++
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/pool/TableSessionWrapper.java
@@ -70,9 +70,10 @@ public class TableSessionWrapper implements ITableSession {
}
@Override
- public String getDeviceLeaderURL(String dbName, List<String> deviceId, long
time)
+ public String getDeviceLeaderURL(
+ String dbName, List<String> deviceId, List<Boolean> isSetTag, long time)
throws IoTDBConnectionException, StatementExecutionException {
- TTableDeviceLeaderResp resp = session.fetchDeviceLeader(dbName, deviceId,
time);
+ TTableDeviceLeaderResp resp = session.fetchDeviceLeader(dbName, deviceId,
isSetTag, time);
return resp.getIp() + ":" + resp.getPort();
}
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 35a033cbd67..7e05bc2f212 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
@@ -3096,9 +3096,12 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
@Override
public TTableDeviceLeaderResp fetchDeviceLeader(TTableDeviceLeaderReq req)
throws TException {
- IDeviceID deviceID =
- Factory.DEFAULT_FACTORY.create(
- req.getDeviceId().toArray(new String[req.getDeviceIdSize()]));
+ int start_index = 0;
+ String[] trueSegments = new String[req.getIsSetTagSize()];
+ for (int i = 0; i < req.getIsSetTagSize(); i++) {
+ trueSegments[i] = req.getIsSetTag().get(i) ?
req.getDeviceId().get(start_index++) : null;
+ }
+ IDeviceID deviceID = Factory.DEFAULT_FACTORY.create(trueSegments);
TTimePartitionSlot timePartitionSlot =
TimePartitionUtils.getTimePartitionSlot(req.getTime());
DataPartitionQueryParam queryParam =
new DataPartitionQueryParam(deviceID,
Collections.singletonList(timePartitionSlot));
diff --git a/iotdb-protocol/thrift-datanode/src/main/thrift/client.thrift
b/iotdb-protocol/thrift-datanode/src/main/thrift/client.thrift
index 1420b80d043..ddcf8a002f7 100644
--- a/iotdb-protocol/thrift-datanode/src/main/thrift/client.thrift
+++ b/iotdb-protocol/thrift-datanode/src/main/thrift/client.thrift
@@ -551,7 +551,8 @@ struct TSConnectionInfoResp {
struct TTableDeviceLeaderReq {
1: required string dbName
2: required list<string> deviceId
- 3: required i64 time
+ 3: required list<bool> isSetTag
+ 4: required i64 time
}
struct TTableDeviceLeaderResp {