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

shuwenwei pushed a commit to branch showAvailableUrls
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit a5cd41ec819de9c7785f94db6d193573450c6e98
Author: shuwenwei <[email protected]>
AuthorDate: Thu Sep 18 18:57:34 2025 +0800

    modify client
---
 .../org/apache/iotdb/session/NodesSupplier.java    | 50 +++++++++++++---------
 .../org/apache/iotdb/db/qp/sql/IdentifierParser.g4 |  2 +
 .../security/TreeAccessCheckVisitor.java           |  7 +++
 .../metadata/ShowAvailableUrlsStatement.java       | 12 ------
 .../db/relational/grammar/sql/RelationalSql.g4     |  4 +-
 5 files changed, 41 insertions(+), 34 deletions(-)

diff --git 
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/NodesSupplier.java
 
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/NodesSupplier.java
index 9284171eade..bf2506ecd44 100644
--- 
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/NodesSupplier.java
+++ 
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/NodesSupplier.java
@@ -41,6 +41,7 @@ public class NodesSupplier implements INodeSupplier, Runnable 
{
 
   private static final long UPDATE_PERIOD_IN_S = 60;
   private static final String SHOW_DATA_NODES_COMMAND = "SHOW DATANODES";
+  private static final String SHOW_AVAILABLE_URLS_COMMAND = "SHOW AVAILABLE 
URLS";
 
   private static final String STATUS_COLUMN_NAME = "Status";
 
@@ -228,28 +229,37 @@ public class NodesSupplier implements INodeSupplier, 
Runnable {
 
   private boolean updateDataNodeList() {
     try (SessionDataSet sessionDataSet =
-        client.executeQueryStatement(SHOW_DATA_NODES_COMMAND, TIMEOUT_IN_MS, 
FETCH_SIZE)) {
-      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
-      List<TEndPoint> res = new ArrayList<>();
-      while (iterator.next()) {
-        String ip = iterator.getString(IP_COLUMN_NAME);
-        // ignore 0.0.0.0 and removing DN
-        if (!REMOVING_STATUS.equals(iterator.getString(STATUS_COLUMN_NAME))
-            && !"0.0.0.0".equals(ip)) {
-          String port = iterator.getString(PORT_COLUMN_NAME);
-          if (ip != null && port != null) {
-            res.add(new TEndPoint(ip, Integer.parseInt(port)));
-          }
-        }
+        client.executeQueryStatement(SHOW_AVAILABLE_URLS_COMMAND, 
TIMEOUT_IN_MS, FETCH_SIZE)) {
+      updateAvailableNodes(sessionDataSet);
+    } catch (Exception e1) {
+      try (SessionDataSet sessionDataSet =
+          client.executeQueryStatement(SHOW_DATA_NODES_COMMAND, TIMEOUT_IN_MS, 
FETCH_SIZE)) {
+        updateAvailableNodes(sessionDataSet);
+      } catch (Exception e2) {
+        LOGGER.warn("Failed to fetch data node list from {}.", 
client.endPoint);
+        return false;
       }
-      // replace the older ones.
-      if (!res.isEmpty()) {
-        availableNodes = res;
+    }
+    return true;
+  }
+
+  private void updateAvailableNodes(SessionDataSet sessionDataSet) throws 
Exception {
+    SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
+    List<TEndPoint> res = new ArrayList<>();
+    while (iterator.next()) {
+      String ip = iterator.getString(IP_COLUMN_NAME);
+      // ignore 0.0.0.0 and removing DN
+      if (!REMOVING_STATUS.equals(iterator.getString(STATUS_COLUMN_NAME))
+          && !"0.0.0.0".equals(ip)) {
+        String port = iterator.getString(PORT_COLUMN_NAME);
+        if (ip != null && port != null) {
+          res.add(new TEndPoint(ip, Integer.parseInt(port)));
+        }
       }
-      return true;
-    } catch (Exception e) {
-      LOGGER.warn("Failed to fetch data node list from {}.", client.endPoint);
-      return false;
+    }
+    // replace the older ones.
+    if (!res.isEmpty()) {
+      availableNodes = res;
     }
   }
 }
diff --git 
a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
 
b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
index 2d8f2fa1ce7..1dcf66539b6 100644
--- 
a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
+++ 
b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
@@ -46,6 +46,7 @@ keyWords
     | AS
     | ASC
     | ATTRIBUTES
+    | AVAILABLE
     | BEFORE
     | BEGIN
     | BETWEEN
@@ -264,6 +265,7 @@ keyWords
     | UPDATE
     | UPSERT
     | URI
+    | URLS
     | USED
     | USER
     | USING
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
index 59dac2ae372..9b78dd63350 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
@@ -64,6 +64,7 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.RemoveAINodeState
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.RemoveConfigNodeStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.RemoveDataNodeStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.metadata.SetTTLStatement;
+import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowAvailableUrlsStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowChildNodesStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowChildPathsStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowClusterIdStatement;
@@ -961,6 +962,12 @@ public class TreeAccessCheckVisitor extends 
StatementVisitor<TSStatus, TreeAcces
     return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
   }
 
+  @Override
+  public TSStatus visitShowAvailableUrls(
+      ShowAvailableUrlsStatement showAvailableUrlsStatement, 
TreeAccessCheckContext context) {
+    return SUCCEED;
+  }
+
   @Override
   public TSStatus visitShowConfigNodes(
       ShowConfigNodesStatement statement, TreeAccessCheckContext context) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowAvailableUrlsStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowAvailableUrlsStatement.java
index cbdf8cba131..5427a3200ea 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowAvailableUrlsStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowAvailableUrlsStatement.java
@@ -19,12 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.RpcUtils;
 
 public class ShowAvailableUrlsStatement extends ShowStatement implements 
IConfigStatement {
 
@@ -33,16 +31,6 @@ public class ShowAvailableUrlsStatement extends 
ShowStatement implements IConfig
     this.statementType = StatementType.SHOW;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return RpcUtils.SUCCESS_STATUS;
-  }
-
-  @Override
-  public TSStatus checkSeparatedAdminPermissionBeforeProcess(String userName) {
-    return RpcUtils.SUCCESS_STATUS;
-  }
-
   @Override
   public QueryType getQueryType() {
     return QueryType.READ;
diff --git 
a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
 
b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
index 7e8de41fa11..89c60973262 100644
--- 
a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
+++ 
b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
@@ -1377,7 +1377,7 @@ authorizationUser
 
 nonReserved
     // IMPORTANT: this rule must only contain tokens. Nested rules are not 
supported. See SqlParser.exitNonReserved
-    : ABSENT | ADD | ADMIN | AFTER | ALL | ANALYZE | ANY | ARRAY | ASC | AT | 
ATTRIBUTE | AUTHORIZATION
+    : ABSENT | ADD | ADMIN | AFTER | ALL | ANALYZE | ANY | ARRAY | ASC | AT | 
ATTRIBUTE | AUTHORIZATION | AVAILABLE
     | BEGIN | BERNOULLI | BOTH
     | CACHE | CALL | CALLED | CASCADE | CATALOG | CATALOGS | CHAR | CHARACTER 
| CHARSET | CLEAR | CLUSTER | CLUSTERID | COLUMN | COLUMNS | COMMENT | COMMIT | 
COMMITTED | CONDITION | CONDITIONAL | CONFIGNODES | CONFIGNODE | CONFIGURATION 
| CONNECTOR | CONSTANT | COPARTITION | COUNT | CURRENT
     | DATA | DATABASE | DATABASES | DATANODE | DATANODES | DATASET | DATE | 
DAY | DECLARE | DEFAULT | DEFINE | DEFINER | DENY | DESC | DESCRIPTOR | 
DETAILS| DETERMINISTIC | DEVICES | DISTRIBUTED | DO | DOUBLE
@@ -1398,7 +1398,7 @@ nonReserved
     | SERIESSLOTID | SCALAR | SCHEMA | SCHEMAS | SECOND | SECURITY | SEEK | 
SERIALIZABLE | SESSION | SET | SETS
     | SHOW | SINK | SOME | SOURCE | START | STATS | STOP | SUBSCRIPTION | 
SUBSCRIPTIONS | SUBSET | SUBSTRING | SYSTEM
     | TABLES | TABLESAMPLE | TAG | TEXT | TEXT_STRING | TIES | TIME | 
TIMEPARTITION | TIMER | TIMER_XL | TIMESERIES | TIMESLOTID | TIMESTAMP | TO | 
TOPIC | TOPICS | TRAILING | TRANSACTION | TRUNCATE | TRY_CAST | TYPE
-    | UNBOUNDED | UNCOMMITTED | UNCONDITIONAL | UNIQUE | UNKNOWN | UNMATCHED | 
UNTIL | UPDATE | URI | USE | USED | USER | UTF16 | UTF32 | UTF8
+    | UNBOUNDED | UNCOMMITTED | UNCONDITIONAL | UNIQUE | UNKNOWN | UNMATCHED | 
UNTIL | UPDATE | URI | URLS | USE | USED | USER | UTF16 | UTF32 | UTF8
     | VALIDATE | VALUE | VARIABLES | VARIATION | VERBOSE | VERSION | VIEW
     | WEEK | WHILE | WINDOW | WITHIN | WITHOUT | WORK | WRAPPER | WRITE
     | YEAR

Reply via email to