Skip to content

Commit c4114b9

Browse files
authored
Add 'show available urls' (apache#16441)
1 parent 03bc260 commit c4114b9

File tree

21 files changed

+316
-28
lines changed

21 files changed

+316
-28
lines changed

integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import static org.apache.iotdb.commons.auth.entity.User.INTERNAL_USER_END_ID;
5555
import static org.apache.iotdb.db.audit.DNAuditLogger.PREFIX_PASSWORD_HISTORY;
5656
import static org.apache.iotdb.db.it.utils.TestUtils.createUser;
57+
import static org.apache.iotdb.db.it.utils.TestUtils.executeNonQuery;
5758
import static org.apache.iotdb.db.it.utils.TestUtils.resultSetEqualTest;
5859
import static org.junit.Assert.assertEquals;
5960
import static org.junit.Assert.assertFalse;
@@ -1381,6 +1382,7 @@ public void noNeedPrivilegeTest() {
13811382
"tempuser,",
13821383
};
13831384
resultSetEqualTest("show current_user", expectedHeader, retArray, "tempuser", "temppw123456");
1385+
executeNonQuery("SHOW AVAILABLE URLS", "tempuser", "temppw123456");
13841386
}
13851387

13861388
@Ignore

iotdb-client/session/src/main/java/org/apache/iotdb/session/NodesSupplier.java

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,12 @@ public class NodesSupplier implements INodeSupplier, Runnable {
4040
private static final Logger LOGGER = LoggerFactory.getLogger(NodesSupplier.class);
4141

4242
private static final long UPDATE_PERIOD_IN_S = 60;
43-
private static final String SHOW_DATA_NODES_COMMAND = "SHOW DATANODES";
44-
45-
private static final String STATUS_COLUMN_NAME = "Status";
43+
private static final String SHOW_AVAILABLE_URLS_COMMAND = "SHOW AVAILABLE URLS";
4644

4745
private static final String IP_COLUMN_NAME = "RpcAddress";
4846

4947
private static final String PORT_COLUMN_NAME = "RpcPort";
5048

51-
private static final String REMOVING_STATUS = "Removing";
52-
5349
// it's ok that TIMEOUT_IN_MS is larger than UPDATE_PERIOD_IN_S, because the next update request
5450
// won't be scheduled until last time is done.
5551
private static final long TIMEOUT_IN_MS = 60_000;
@@ -228,28 +224,31 @@ public Optional<TEndPoint> getQueryEndPoint() {
228224

229225
private boolean updateDataNodeList() {
230226
try (SessionDataSet sessionDataSet =
231-
client.executeQueryStatement(SHOW_DATA_NODES_COMMAND, TIMEOUT_IN_MS, FETCH_SIZE)) {
232-
SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
233-
List<TEndPoint> res = new ArrayList<>();
234-
while (iterator.next()) {
235-
String ip = iterator.getString(IP_COLUMN_NAME);
236-
// ignore 0.0.0.0 and removing DN
237-
if (!REMOVING_STATUS.equals(iterator.getString(STATUS_COLUMN_NAME))
238-
&& !"0.0.0.0".equals(ip)) {
239-
String port = iterator.getString(PORT_COLUMN_NAME);
240-
if (ip != null && port != null) {
241-
res.add(new TEndPoint(ip, Integer.parseInt(port)));
242-
}
243-
}
244-
}
245-
// replace the older ones.
246-
if (!res.isEmpty()) {
247-
availableNodes = res;
248-
}
249-
return true;
250-
} catch (Exception e) {
227+
client.executeQueryStatement(SHOW_AVAILABLE_URLS_COMMAND, TIMEOUT_IN_MS, FETCH_SIZE)) {
228+
updateAvailableNodes(sessionDataSet);
229+
} catch (Exception e1) {
251230
LOGGER.warn("Failed to fetch data node list from {}.", client.endPoint);
252231
return false;
253232
}
233+
return true;
234+
}
235+
236+
private void updateAvailableNodes(SessionDataSet sessionDataSet) throws Exception {
237+
SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
238+
List<TEndPoint> res = new ArrayList<>();
239+
while (iterator.next()) {
240+
String ip = iterator.getString(IP_COLUMN_NAME);
241+
// ignore 0.0.0.0
242+
if (!"0.0.0.0".equals(ip)) {
243+
String port = iterator.getString(PORT_COLUMN_NAME);
244+
if (ip != null && port != null) {
245+
res.add(new TEndPoint(ip, Integer.parseInt(port)));
246+
}
247+
}
248+
}
249+
// replace the older ones.
250+
if (!res.isEmpty()) {
251+
availableNodes = res;
252+
}
254253
}
255254
}

iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ keyWords
4747
| AS
4848
| ASC
4949
| ATTRIBUTES
50+
| AVAILABLE
5051
| BEFORE
5152
| BEGIN
5253
| BETWEEN
@@ -267,6 +268,7 @@ keyWords
267268
| UPDATE
268269
| UPSERT
269270
| URI
271+
| URLS
270272
| USED
271273
| USER
272274
| USING

iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ ddlStatement
6161
// CQ
6262
| createContinuousQuery | dropContinuousQuery | showContinuousQueries
6363
// Cluster
64-
| showVariables | showCluster | showRegions | showDataNodes | showConfigNodes | showClusterId
64+
| showVariables | showCluster | showRegions | showDataNodes | showAvailableUrls | showConfigNodes | showClusterId
6565
| getRegionId | getTimeSlotList | countTimeSlotList | getSeriesSlotList
6666
| migrateRegion | reconstructRegion | extendRegion | removeRegion | removeDataNode | removeConfigNode | removeAINode
6767
| verifyConnection
@@ -491,6 +491,11 @@ showDataNodes
491491
: SHOW DATANODES
492492
;
493493

494+
// ---- Show Available Urls
495+
showAvailableUrls
496+
: SHOW AVAILABLE URLS
497+
;
498+
494499
// ---- Show Config Nodes
495500
showConfigNodes
496501
: SHOW CONFIGNODES

iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,14 @@ DATANODES
254254
: D A T A N O D E S
255255
;
256256

257+
AVAILABLE
258+
: A V A I L A B L E
259+
;
260+
261+
URLS
262+
: U R L S
263+
;
264+
257265
DATASET
258266
: D A T A S E T
259267
;

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeaderFactory.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ public static DatasetHeader getShowDataNodesHeader() {
129129
return new DatasetHeader(ColumnHeaderConstant.showDataNodesColumnHeaders, true);
130130
}
131131

132+
public static DatasetHeader getShowAvailableUrlsHeader() {
133+
return new DatasetHeader(ColumnHeaderConstant.showAvailableUrlsColumnHeaders, true);
134+
}
135+
132136
public static DatasetHeader getShowConfigNodesHeader() {
133137
return new DatasetHeader(ColumnHeaderConstant.showConfigNodesColumnHeaders, true);
134138
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetTableComment;
9595
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowAIDevices;
9696
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowAINodes;
97+
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowAvailableUrls;
9798
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCluster;
9899
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowClusterId;
99100
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowConfigNodes;
@@ -432,6 +433,7 @@ private IQueryExecution createQueryExecutionForTableModel(
432433
|| statement instanceof ShowCluster
433434
|| statement instanceof ShowRegions
434435
|| statement instanceof ShowDataNodes
436+
|| statement instanceof ShowAvailableUrls
435437
|| statement instanceof ShowConfigNodes
436438
|| statement instanceof ShowAINodes
437439
|| statement instanceof Flush

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.apache.iotdb.common.rpc.thrift.Model;
2323
import org.apache.iotdb.common.rpc.thrift.TSStatus;
24+
import org.apache.iotdb.commons.audit.AuditLogOperation;
2425
import org.apache.iotdb.commons.audit.IAuditEntity;
2526
import org.apache.iotdb.commons.audit.UserEntity;
2627
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
@@ -53,6 +54,7 @@
5354
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.RemoveAINodeTask;
5455
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.RemoveConfigNodeTask;
5556
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.RemoveDataNodeTask;
57+
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowAvailableUrlsTask;
5658
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowClusterIdTask;
5759
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowClusterTask;
5860
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowFunctionsTask;
@@ -129,6 +131,7 @@
129131
import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
130132
import org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher.TableHeaderSchemaValidator;
131133
import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
134+
import org.apache.iotdb.db.queryengine.plan.relational.security.ITableAuthCheckerImpl;
132135
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AddColumn;
133136
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AlterDB;
134137
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AlterPipe;
@@ -185,6 +188,7 @@
185188
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetTableComment;
186189
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowAIDevices;
187190
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowAINodes;
191+
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowAvailableUrls;
188192
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCluster;
189193
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowClusterId;
190194
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowConfigNodes;
@@ -482,6 +486,15 @@ protected IConfigTask visitShowDataNodes(
482486
return new ShowDataNodesTask();
483487
}
484488

489+
@Override
490+
protected IConfigTask visitShowAvailableUrls(
491+
final ShowAvailableUrls showAvailableUrls, final MPPQueryContext context) {
492+
context.setQueryType(QueryType.READ);
493+
ITableAuthCheckerImpl.recordAuditLog(
494+
context.setAuditLogOperation(AuditLogOperation.QUERY).setResult(true), () -> "");
495+
return new ShowAvailableUrlsTask();
496+
}
497+
485498
@Override
486499
protected IConfigTask visitShowConfigNodes(
487500
final ShowConfigNodes showConfigNodesStatement, final MPPQueryContext context) {

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.RemoveDataNodeTask;
5353
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.SetTTLTask;
5454
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowAINodesTask;
55+
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowAvailableUrlsTask;
5556
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowClusterDetailsTask;
5657
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowClusterIdTask;
5758
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowClusterTask;
@@ -143,6 +144,7 @@
143144
import org.apache.iotdb.db.queryengine.plan.statement.metadata.RemoveConfigNodeStatement;
144145
import org.apache.iotdb.db.queryengine.plan.statement.metadata.RemoveDataNodeStatement;
145146
import org.apache.iotdb.db.queryengine.plan.statement.metadata.SetTTLStatement;
147+
import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowAvailableUrlsStatement;
146148
import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowClusterIdStatement;
147149
import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowClusterStatement;
148150
import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowConfigNodesStatement;
@@ -550,6 +552,12 @@ public IConfigTask visitShowDataNodes(
550552
return new ShowDataNodesTask(showDataNodesStatement);
551553
}
552554

555+
@Override
556+
public IConfigTask visitShowAvailableUrls(
557+
ShowAvailableUrlsStatement showAvailableUrlsStatement, MPPQueryContext context) {
558+
return new ShowAvailableUrlsTask();
559+
}
560+
553561
@Override
554562
public IConfigTask visitShowConfigNodes(
555563
ShowConfigNodesStatement showConfigNodesStatement, MPPQueryContext context) {

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@
196196
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.GetSeriesSlotListTask;
197197
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.GetTimeSlotListTask;
198198
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowAINodesTask;
199+
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowAvailableUrlsTask;
199200
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowClusterDetailsTask;
200201
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowClusterIdTask;
201202
import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowClusterTask;
@@ -1726,6 +1727,26 @@ public SettableFuture<ConfigTaskResult> showDataNodes() {
17261727
return future;
17271728
}
17281729

1730+
@Override
1731+
public SettableFuture<ConfigTaskResult> showAvailableUrls() {
1732+
final SettableFuture<ConfigTaskResult> future = SettableFuture.create();
1733+
TShowDataNodesResp showDataNodesResp = new TShowDataNodesResp();
1734+
try (final ConfigNodeClient client =
1735+
CONFIG_NODE_CLIENT_MANAGER.borrowClient(ConfigNodeInfo.CONFIG_REGION_ID)) {
1736+
showDataNodesResp = client.showDataNodes();
1737+
if (showDataNodesResp.getStatus().getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
1738+
future.setException(
1739+
new IoTDBException(
1740+
showDataNodesResp.getStatus().message, showDataNodesResp.getStatus().code));
1741+
return future;
1742+
}
1743+
} catch (final ClientManagerException | TException e) {
1744+
future.setException(e);
1745+
}
1746+
ShowAvailableUrlsTask.buildTsBlock(showDataNodesResp, future);
1747+
return future;
1748+
}
1749+
17291750
@Override
17301751
public SettableFuture<ConfigTaskResult> showConfigNodes() {
17311752
final SettableFuture<ConfigTaskResult> future = SettableFuture.create();

0 commit comments

Comments
 (0)