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 {

Reply via email to