This is an automated email from the ASF dual-hosted git repository.
yongzao pushed a commit to branch object_type_crz
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/object_type_crz by this push:
new 47d5ed00663 pass easy test
47d5ed00663 is described below
commit 47d5ed00663bb7730a592692b47a696a2f246c0a
Author: Yongzao <[email protected]>
AuthorDate: Thu Jul 10 18:44:27 2025 +0800
pass easy test
---
.../org/apache/iotdb/TableModelSessionPoolExample.java | 15 +++++++++++++++
.../java/org/apache/iotdb/isession/ITableSession.java | 13 +++++++++++++
.../src/main/java/org/apache/iotdb/session/Session.java | 8 ++++++++
.../java/org/apache/iotdb/session/SessionConnection.java | 12 ++++++++++++
.../main/java/org/apache/iotdb/session/TableSession.java | 10 ++++++++++
.../apache/iotdb/session/pool/TableSessionWrapper.java | 9 +++++++++
6 files changed, 67 insertions(+)
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 a8d3c8b382b..87038649a1b 100644
---
a/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java
+++
b/example/session/src/main/java/org/apache/iotdb/TableModelSessionPoolExample.java
@@ -134,6 +134,21 @@ public class TableModelSessionPoolExample {
tablet.reset();
}
+ // query device leader
+ String correctURL =
+ session.getDeviceLeaderURL("test2", Arrays.asList("test1", "1", "5",
"3"), 66);
+ System.out.println("Correct device leader URL: " + correctURL);
+ String errorDbURL =
+ session.getDeviceLeaderURL("test3", Arrays.asList("test1", "1", "5",
"3"), 66);
+ System.out.println("Error dbName device leader URL: " + errorDbURL);
+ String errorDeviceURL =
+ session.getDeviceLeaderURL("test2", Arrays.asList("test1", "1",
"5"), 66);
+ System.out.println("Error deviceId device leader URL: " +
errorDeviceURL);
+ String errorTimeURL =
+ session.getDeviceLeaderURL(
+ "test2", Arrays.asList("test1", "1", "5", "3"),
6666666666666666L);
+ System.out.println("Error time device leader URL: " + errorTimeURL);
+
// query table data
try (SessionDataSet dataSet =
session.executeQueryStatement(
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 75a37f83847..5454bac5bad 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
@@ -24,6 +24,8 @@ import org.apache.iotdb.rpc.StatementExecutionException;
import org.apache.tsfile.write.record.Tablet;
+import java.util.List;
+
/**
* This interface defines a session for interacting with IoTDB tables. It
supports operations such
* as data insertion, executing queries, and closing the session.
Implementations of this interface
@@ -46,6 +48,17 @@ public interface ITableSession extends AutoCloseable {
*/
void insert(Tablet tablet) throws StatementExecutionException,
IoTDBConnectionException;
+ /**
+ * Retrieves the DataNode URL of the device leader for a given database and
a deviceID.
+ *
+ * @param dbName the name of the database.
+ * @param deviceId a list of string for constructing the specified deviceID.
+ * @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)
+ throws IoTDBConnectionException, StatementExecutionException;
+
/**
* Executes a non-query SQL statement, such as a DDL or DML command.
*
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 1890721a9b3..ee1b39f09bc 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
@@ -56,6 +56,8 @@ import org.apache.iotdb.service.rpc.thrift.TSQueryTemplateReq;
import org.apache.iotdb.service.rpc.thrift.TSQueryTemplateResp;
import org.apache.iotdb.service.rpc.thrift.TSSetSchemaTemplateReq;
import org.apache.iotdb.service.rpc.thrift.TSUnsetSchemaTemplateReq;
+import org.apache.iotdb.service.rpc.thrift.TTableDeviceLeaderReq;
+import org.apache.iotdb.service.rpc.thrift.TTableDeviceLeaderResp;
import org.apache.iotdb.session.template.MeasurementNode;
import org.apache.iotdb.session.template.TemplateQueryType;
import org.apache.iotdb.session.util.SessionUtils;
@@ -2778,6 +2780,12 @@ public class Session implements ISession {
}
}
+ public TTableDeviceLeaderResp fetchDeviceLeader(String dbName, List<String>
deviceId, long time)
+ throws IoTDBConnectionException, StatementExecutionException {
+ TTableDeviceLeaderReq req = new TTableDeviceLeaderReq(dbName, deviceId,
time);
+ return getDefaultSessionConnection().fetchDeviceLeader(req);
+ }
+
private void insertRelationalTabletWithLeaderCache(Tablet tablet)
throws IoTDBConnectionException, StatementExecutionException {
Map<SessionConnection, Tablet> relationalTabletGroup = new HashMap<>();
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 477eba234eb..eae7150b2e8 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
@@ -65,6 +65,8 @@ import org.apache.iotdb.service.rpc.thrift.TSRawDataQueryReq;
import org.apache.iotdb.service.rpc.thrift.TSSetSchemaTemplateReq;
import org.apache.iotdb.service.rpc.thrift.TSSetTimeZoneReq;
import org.apache.iotdb.service.rpc.thrift.TSUnsetSchemaTemplateReq;
+import org.apache.iotdb.service.rpc.thrift.TTableDeviceLeaderReq;
+import org.apache.iotdb.service.rpc.thrift.TTableDeviceLeaderResp;
import org.apache.iotdb.session.util.SessionUtils;
import org.apache.thrift.TException;
@@ -1225,6 +1227,16 @@ public class SessionConnection {
return execResp;
}
+ protected TTableDeviceLeaderResp fetchDeviceLeader(TTableDeviceLeaderReq req)
+ throws StatementExecutionException {
+ final TTableDeviceLeaderResp resp =
+ callWithRetryAndReconnect(
+ () -> client.fetchDeviceLeader(req),
TTableDeviceLeaderResp::getStatus)
+ .getResult();
+ RpcUtils.verifySuccess(resp.getStatus());
+ return resp;
+ }
+
private <T> RetryResult<T> callWithReconnect(TFunction<T> supplier)
throws IoTDBConnectionException {
T ret;
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 059fdea3469..34222e671da 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
@@ -23,9 +23,12 @@ import org.apache.iotdb.isession.ITableSession;
import org.apache.iotdb.isession.SessionDataSet;
import org.apache.iotdb.rpc.IoTDBConnectionException;
import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.service.rpc.thrift.TTableDeviceLeaderResp;
import org.apache.tsfile.write.record.Tablet;
+import java.util.List;
+
public class TableSession implements ITableSession {
private final Session session;
@@ -39,6 +42,13 @@ public class TableSession implements ITableSession {
session.insertRelationalTablet(tablet);
}
+ @Override
+ public String getDeviceLeaderURL(String dbName, List<String> deviceId, long
time)
+ throws IoTDBConnectionException, StatementExecutionException {
+ TTableDeviceLeaderResp resp = session.fetchDeviceLeader(dbName, deviceId,
time);
+ return resp.getIp() + ":" + resp.getPort();
+ }
+
@Override
public void executeNonQueryStatement(String sql)
throws IoTDBConnectionException, StatementExecutionException {
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 761bb3a40d3..ea389740ca1 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
@@ -23,12 +23,14 @@ import org.apache.iotdb.isession.ITableSession;
import org.apache.iotdb.isession.SessionDataSet;
import org.apache.iotdb.rpc.IoTDBConnectionException;
import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.service.rpc.thrift.TTableDeviceLeaderResp;
import org.apache.iotdb.session.Session;
import org.apache.tsfile.write.record.Tablet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -67,6 +69,13 @@ public class TableSessionWrapper implements ITableSession {
}
}
+ @Override
+ public String getDeviceLeaderURL(String dbName, List<String> deviceId, long
time)
+ throws IoTDBConnectionException, StatementExecutionException {
+ TTableDeviceLeaderResp resp = session.fetchDeviceLeader(dbName, deviceId,
time);
+ return resp.getIp() + ":" + resp.getPort();
+ }
+
@Override
public SessionDataSet executeQueryStatement(String sql)
throws StatementExecutionException, IoTDBConnectionException {