Skip to content

Commit cd3b39a

Browse files
[AINode] Optimize directory of ainode and confignode
1 parent 8505028 commit cd3b39a

File tree

38 files changed

+733
-483
lines changed

38 files changed

+733
-483
lines changed

integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/AbstractEnv.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
2323
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
2424
import org.apache.iotdb.common.rpc.thrift.TSStatus;
25-
import org.apache.iotdb.commons.client.ClientPoolFactory;
2625
import org.apache.iotdb.commons.client.IClientManager;
2726
import org.apache.iotdb.commons.client.exception.ClientManagerException;
2827
import org.apache.iotdb.commons.client.sync.SyncConfigNodeIServiceClient;
@@ -35,6 +34,7 @@
3534
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
3635
import org.apache.iotdb.confignode.rpc.thrift.TShowRegionReq;
3736
import org.apache.iotdb.confignode.rpc.thrift.TShowRegionResp;
37+
import org.apache.iotdb.db.protocol.client.ConfigNodeClientManager;
3838
import org.apache.iotdb.isession.ISession;
3939
import org.apache.iotdb.isession.ITableSession;
4040
import org.apache.iotdb.isession.SessionConfig;
@@ -181,7 +181,7 @@ protected void initEnvironment(
181181

182182
clientManager =
183183
new IClientManager.Factory<TEndPoint, SyncConfigNodeIServiceClient>()
184-
.createClientManager(new ClientPoolFactory.SyncConfigNodeIServiceClientPoolFactory());
184+
.createClientManager(new ConfigNodeClientManager.ClientPoolFactory.SyncConfigNodeIServiceClientPoolFactory());
185185

186186
final String testClassName = getTestClassName();
187187

integration-test/src/main/java/org/apache/iotdb/it/env/remote/env/RemoteServerEnv.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@
2020
package org.apache.iotdb.it.env.remote.env;
2121

2222
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
23-
import org.apache.iotdb.commons.client.ClientPoolFactory;
2423
import org.apache.iotdb.commons.client.IClientManager;
2524
import org.apache.iotdb.commons.client.exception.ClientManagerException;
2625
import org.apache.iotdb.commons.client.sync.SyncConfigNodeIServiceClient;
2726
import org.apache.iotdb.commons.cluster.NodeStatus;
2827
import org.apache.iotdb.confignode.rpc.thrift.IConfigNodeRPCService;
28+
import org.apache.iotdb.db.protocol.client.ConfigNodeClientManager;
2929
import org.apache.iotdb.isession.ISession;
3030
import org.apache.iotdb.isession.ITableSession;
3131
import org.apache.iotdb.isession.SessionConfig;
@@ -84,7 +84,7 @@ public void initClusterEnvironment() {
8484
}
8585
clientManager =
8686
new IClientManager.Factory<TEndPoint, SyncConfigNodeIServiceClient>()
87-
.createClientManager(new ClientPoolFactory.SyncConfigNodeIServiceClientPoolFactory());
87+
.createClientManager(new ConfigNodeClientManager.ClientPoolFactory.SyncConfigNodeIServiceClientPoolFactory());
8888
}
8989

9090
@Override

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/async/AsyncAINodeHeartbeatClientPool.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121

2222
import org.apache.iotdb.ainode.rpc.thrift.TAIHeartbeatReq;
2323
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
24-
import org.apache.iotdb.commons.client.ClientPoolFactory;
2524
import org.apache.iotdb.commons.client.IClientManager;
26-
import org.apache.iotdb.commons.client.ainode.AsyncAINodeServiceClient;
2725
import org.apache.iotdb.confignode.client.async.handlers.heartbeat.AINodeHeartbeatHandler;
26+
import org.apache.iotdb.db.protocol.client.ConfigNodeClientManager;
27+
import org.apache.iotdb.db.protocol.client.ainode.AsyncAINodeServiceClient;
2828

2929
public class AsyncAINodeHeartbeatClientPool {
3030

@@ -34,7 +34,8 @@ private AsyncAINodeHeartbeatClientPool() {
3434
clientManager =
3535
new IClientManager.Factory<TEndPoint, AsyncAINodeServiceClient>()
3636
.createClientManager(
37-
new ClientPoolFactory.AsyncAINodeHeartbeatServiceClientPoolFactory());
37+
new ConfigNodeClientManager.ClientPoolFactory
38+
.AsyncAINodeHeartbeatServiceClientPoolFactory());
3839
}
3940

4041
public void getAINodeHeartBeat(

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/async/AsyncConfigNodeHeartbeatClientPool.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
package org.apache.iotdb.confignode.client.async;
2121

2222
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
23-
import org.apache.iotdb.commons.client.ClientPoolFactory;
2423
import org.apache.iotdb.commons.client.IClientManager;
2524
import org.apache.iotdb.commons.client.async.AsyncConfigNodeInternalServiceClient;
2625
import org.apache.iotdb.confignode.client.async.handlers.heartbeat.ConfigNodeHeartbeatHandler;
2726
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeHeartbeatReq;
27+
import org.apache.iotdb.db.protocol.client.ConfigNodeClientManager;
2828

2929
public class AsyncConfigNodeHeartbeatClientPool {
3030

@@ -34,7 +34,8 @@ private AsyncConfigNodeHeartbeatClientPool() {
3434
clientManager =
3535
new IClientManager.Factory<TEndPoint, AsyncConfigNodeInternalServiceClient>()
3636
.createClientManager(
37-
new ClientPoolFactory.AsyncConfigNodeHeartbeatServiceClientPoolFactory());
37+
new ConfigNodeClientManager.ClientPoolFactory
38+
.AsyncConfigNodeHeartbeatServiceClientPoolFactory());
3839
}
3940

4041
/**

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/async/AsyncDataNodeHeartbeatClientPool.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
package org.apache.iotdb.confignode.client.async;
2121

2222
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
23-
import org.apache.iotdb.commons.client.ClientPoolFactory;
2423
import org.apache.iotdb.commons.client.IClientManager;
2524
import org.apache.iotdb.commons.client.async.AsyncDataNodeInternalServiceClient;
2625
import org.apache.iotdb.confignode.client.async.handlers.audit.DataNodeWriteAuditLogHandler;
2726
import org.apache.iotdb.confignode.client.async.handlers.heartbeat.DataNodeHeartbeatHandler;
27+
import org.apache.iotdb.db.protocol.client.ConfigNodeClientManager;
2828
import org.apache.iotdb.mpp.rpc.thrift.TAuditLogReq;
2929
import org.apache.iotdb.mpp.rpc.thrift.TDataNodeHeartbeatReq;
3030

@@ -37,7 +37,8 @@ private AsyncDataNodeHeartbeatClientPool() {
3737
clientManager =
3838
new IClientManager.Factory<TEndPoint, AsyncDataNodeInternalServiceClient>()
3939
.createClientManager(
40-
new ClientPoolFactory.AsyncDataNodeHeartbeatServiceClientPoolFactory());
40+
new ConfigNodeClientManager.ClientPoolFactory
41+
.AsyncDataNodeHeartbeatServiceClientPoolFactory());
4142
}
4243

4344
/**

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/sync/SyncConfigNodeClientPool.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@
2424
import org.apache.iotdb.common.rpc.thrift.TNodeLocations;
2525
import org.apache.iotdb.common.rpc.thrift.TSStatus;
2626
import org.apache.iotdb.common.rpc.thrift.TSetConfigurationReq;
27-
import org.apache.iotdb.commons.client.ClientPoolFactory;
2827
import org.apache.iotdb.commons.client.IClientManager;
2928
import org.apache.iotdb.commons.client.exception.ClientManagerException;
3029
import org.apache.iotdb.commons.client.sync.SyncConfigNodeIServiceClient;
3130
import org.apache.iotdb.confignode.client.CnToCnNodeRequestType;
3231
import org.apache.iotdb.confignode.rpc.thrift.TAddConsensusGroupReq;
3332
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterReq;
33+
import org.apache.iotdb.db.protocol.client.ConfigNodeClientManager;
3434
import org.apache.iotdb.rpc.RpcUtils;
3535
import org.apache.iotdb.rpc.TSStatusCode;
3636

@@ -54,7 +54,9 @@ public class SyncConfigNodeClientPool {
5454
private SyncConfigNodeClientPool() {
5555
clientManager =
5656
new IClientManager.Factory<TEndPoint, SyncConfigNodeIServiceClient>()
57-
.createClientManager(new ClientPoolFactory.SyncConfigNodeIServiceClientPoolFactory());
57+
.createClientManager(
58+
new ConfigNodeClientManager.ClientPoolFactory
59+
.SyncConfigNodeIServiceClientPoolFactory());
5860
configNodeLeader = new TEndPoint();
5961
}
6062

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/sync/SyncDataNodeClientPool.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@
2323
import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
2424
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
2525
import org.apache.iotdb.common.rpc.thrift.TSStatus;
26-
import org.apache.iotdb.commons.client.ClientPoolFactory;
2726
import org.apache.iotdb.commons.client.IClientManager;
2827
import org.apache.iotdb.commons.client.exception.ClientManagerException;
2928
import org.apache.iotdb.commons.client.sync.SyncDataNodeInternalServiceClient;
3029
import org.apache.iotdb.commons.exception.UncheckedStartupException;
30+
import org.apache.iotdb.db.protocol.client.ConfigNodeClientManager;
3131
import org.apache.iotdb.mpp.rpc.thrift.TCleanDataNodeCacheReq;
3232
import org.apache.iotdb.mpp.rpc.thrift.TCreateDataRegionReq;
3333
import org.apache.iotdb.mpp.rpc.thrift.TCreatePeerReq;
@@ -73,7 +73,8 @@ private SyncDataNodeClientPool() {
7373
clientManager =
7474
new IClientManager.Factory<TEndPoint, SyncDataNodeInternalServiceClient>()
7575
.createClientManager(
76-
new ClientPoolFactory.SyncDataNodeInternalServiceClientPoolFactory());
76+
new ConfigNodeClientManager.ClientPoolFactory
77+
.SyncDataNodeInternalServiceClientPoolFactory());
7778
buildActionMap();
7879
checkActionMapCompleteness();
7980
}

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/read/model/ShowModelPlan.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919

2020
package org.apache.iotdb.confignode.consensus.request.read.model;
2121

22+
import org.apache.iotdb.ainode.rpc.thrift.TShowModelsReq;
2223
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
2324
import org.apache.iotdb.confignode.consensus.request.read.ConfigPhysicalReadPlan;
24-
import org.apache.iotdb.confignode.rpc.thrift.TShowModelReq;
2525

2626
import java.util.Objects;
2727

@@ -33,7 +33,7 @@ public ShowModelPlan() {
3333
super(ConfigPhysicalPlanType.ShowModel);
3434
}
3535

36-
public ShowModelPlan(final TShowModelReq showModelReq) {
36+
public ShowModelPlan(final TShowModelsReq showModelReq) {
3737
super(ConfigPhysicalPlanType.ShowModel);
3838
if (showModelReq.isSetModelId()) {
3939
this.modelName = showModelReq.getModelId();

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,14 @@
2020
package org.apache.iotdb.confignode.manager;
2121

2222
import org.apache.iotdb.ainode.rpc.thrift.IDataSchema;
23+
import org.apache.iotdb.ainode.rpc.thrift.TLoadModelReq;
24+
import org.apache.iotdb.ainode.rpc.thrift.TShowAIDevicesResp;
25+
import org.apache.iotdb.ainode.rpc.thrift.TShowLoadedModelsReq;
26+
import org.apache.iotdb.ainode.rpc.thrift.TShowLoadedModelsResp;
27+
import org.apache.iotdb.ainode.rpc.thrift.TShowModelsReq;
28+
import org.apache.iotdb.ainode.rpc.thrift.TShowModelsResp;
2329
import org.apache.iotdb.ainode.rpc.thrift.TTrainingReq;
30+
import org.apache.iotdb.ainode.rpc.thrift.TUnloadModelReq;
2431
import org.apache.iotdb.common.rpc.thrift.TAINodeConfiguration;
2532
import org.apache.iotdb.common.rpc.thrift.TAINodeLocation;
2633
import org.apache.iotdb.common.rpc.thrift.TConfigNodeLocation;
@@ -42,8 +49,6 @@
4249
import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
4350
import org.apache.iotdb.commons.auth.AuthException;
4451
import org.apache.iotdb.commons.auth.entity.PrivilegeUnion;
45-
import org.apache.iotdb.commons.client.ainode.AINodeClient;
46-
import org.apache.iotdb.commons.client.ainode.AINodeClientManager;
4752
import org.apache.iotdb.commons.cluster.NodeStatus;
4853
import org.apache.iotdb.commons.cluster.NodeType;
4954
import org.apache.iotdb.commons.conf.CommonConfig;
@@ -212,7 +217,6 @@
212217
import org.apache.iotdb.confignode.rpc.thrift.TGetTriggerTableResp;
213218
import org.apache.iotdb.confignode.rpc.thrift.TGetUDFTableResp;
214219
import org.apache.iotdb.confignode.rpc.thrift.TGetUdfTableReq;
215-
import org.apache.iotdb.confignode.rpc.thrift.TLoadModelReq;
216220
import org.apache.iotdb.confignode.rpc.thrift.TMigrateRegionReq;
217221
import org.apache.iotdb.confignode.rpc.thrift.TNodeVersionInfo;
218222
import org.apache.iotdb.confignode.rpc.thrift.TPermissionInfoResp;
@@ -225,7 +229,6 @@
225229
import org.apache.iotdb.confignode.rpc.thrift.TSchemaPartitionTableResp;
226230
import org.apache.iotdb.confignode.rpc.thrift.TSetDataNodeStatusReq;
227231
import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaTemplateReq;
228-
import org.apache.iotdb.confignode.rpc.thrift.TShowAIDevicesResp;
229232
import org.apache.iotdb.confignode.rpc.thrift.TShowAINodesResp;
230233
import org.apache.iotdb.confignode.rpc.thrift.TShowCQResp;
231234
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
@@ -234,10 +237,6 @@
234237
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodes4InformationSchemaResp;
235238
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
236239
import org.apache.iotdb.confignode.rpc.thrift.TShowDatabaseResp;
237-
import org.apache.iotdb.confignode.rpc.thrift.TShowLoadedModelReq;
238-
import org.apache.iotdb.confignode.rpc.thrift.TShowLoadedModelResp;
239-
import org.apache.iotdb.confignode.rpc.thrift.TShowModelReq;
240-
import org.apache.iotdb.confignode.rpc.thrift.TShowModelResp;
241240
import org.apache.iotdb.confignode.rpc.thrift.TShowPipePluginReq;
242241
import org.apache.iotdb.confignode.rpc.thrift.TShowPipeReq;
243242
import org.apache.iotdb.confignode.rpc.thrift.TShowPipeResp;
@@ -255,12 +254,13 @@
255254
import org.apache.iotdb.confignode.rpc.thrift.TSubscribeReq;
256255
import org.apache.iotdb.confignode.rpc.thrift.TThrottleQuotaResp;
257256
import org.apache.iotdb.confignode.rpc.thrift.TTimeSlotList;
258-
import org.apache.iotdb.confignode.rpc.thrift.TUnloadModelReq;
259257
import org.apache.iotdb.confignode.rpc.thrift.TUnsetSchemaTemplateReq;
260258
import org.apache.iotdb.confignode.rpc.thrift.TUnsubscribeReq;
261259
import org.apache.iotdb.confignode.rpc.thrift.TUpdateModelInfoReq;
262260
import org.apache.iotdb.consensus.common.DataSet;
263261
import org.apache.iotdb.consensus.exception.ConsensusException;
262+
import org.apache.iotdb.db.protocol.client.ainode.AINodeClient;
263+
import org.apache.iotdb.db.protocol.client.ainode.AINodeClientManager;
264264
import org.apache.iotdb.db.schemaengine.template.Template;
265265
import org.apache.iotdb.db.schemaengine.template.TemplateAlterOperationType;
266266
import org.apache.iotdb.db.schemaengine.template.alter.TemplateAlterOperationUtil;
@@ -2845,19 +2845,19 @@ public TSStatus unloadModel(TUnloadModelReq req) {
28452845
}
28462846

28472847
@Override
2848-
public TShowModelResp showModel(TShowModelReq req) {
2848+
public TShowModelsResp showModel(TShowModelsReq req) {
28492849
TSStatus status = confirmLeader();
28502850
return status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()
28512851
? modelManager.showModel(req)
2852-
: new TShowModelResp(status);
2852+
: new TShowModelsResp(status);
28532853
}
28542854

28552855
@Override
2856-
public TShowLoadedModelResp showLoadedModel(TShowLoadedModelReq req) {
2856+
public TShowLoadedModelsResp showLoadedModel(TShowLoadedModelsReq req) {
28572857
TSStatus status = confirmLeader();
28582858
return status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()
28592859
? modelManager.showLoadedModel(req)
2860-
: new TShowLoadedModelResp(status, Collections.emptyMap());
2860+
: new TShowLoadedModelsResp(status, Collections.emptyMap());
28612861
}
28622862

28632863
@Override

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@
1919

2020
package org.apache.iotdb.confignode.manager;
2121

22+
import org.apache.iotdb.ainode.rpc.thrift.TLoadModelReq;
23+
import org.apache.iotdb.ainode.rpc.thrift.TShowAIDevicesResp;
24+
import org.apache.iotdb.ainode.rpc.thrift.TShowLoadedModelsReq;
25+
import org.apache.iotdb.ainode.rpc.thrift.TShowLoadedModelsResp;
26+
import org.apache.iotdb.ainode.rpc.thrift.TShowModelsReq;
27+
import org.apache.iotdb.ainode.rpc.thrift.TShowModelsResp;
28+
import org.apache.iotdb.ainode.rpc.thrift.TUnloadModelReq;
2229
import org.apache.iotdb.common.rpc.thrift.TConfigNodeLocation;
2330
import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
2431
import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
@@ -127,7 +134,6 @@
127134
import org.apache.iotdb.confignode.rpc.thrift.TGetTriggerTableResp;
128135
import org.apache.iotdb.confignode.rpc.thrift.TGetUDFTableResp;
129136
import org.apache.iotdb.confignode.rpc.thrift.TGetUdfTableReq;
130-
import org.apache.iotdb.confignode.rpc.thrift.TLoadModelReq;
131137
import org.apache.iotdb.confignode.rpc.thrift.TMigrateRegionReq;
132138
import org.apache.iotdb.confignode.rpc.thrift.TPermissionInfoResp;
133139
import org.apache.iotdb.confignode.rpc.thrift.TPipeConfigTransferReq;
@@ -139,7 +145,6 @@
139145
import org.apache.iotdb.confignode.rpc.thrift.TSchemaPartitionTableResp;
140146
import org.apache.iotdb.confignode.rpc.thrift.TSetDataNodeStatusReq;
141147
import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaTemplateReq;
142-
import org.apache.iotdb.confignode.rpc.thrift.TShowAIDevicesResp;
143148
import org.apache.iotdb.confignode.rpc.thrift.TShowAINodesResp;
144149
import org.apache.iotdb.confignode.rpc.thrift.TShowCQResp;
145150
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
@@ -148,10 +153,6 @@
148153
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodes4InformationSchemaResp;
149154
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
150155
import org.apache.iotdb.confignode.rpc.thrift.TShowDatabaseResp;
151-
import org.apache.iotdb.confignode.rpc.thrift.TShowLoadedModelReq;
152-
import org.apache.iotdb.confignode.rpc.thrift.TShowLoadedModelResp;
153-
import org.apache.iotdb.confignode.rpc.thrift.TShowModelReq;
154-
import org.apache.iotdb.confignode.rpc.thrift.TShowModelResp;
155156
import org.apache.iotdb.confignode.rpc.thrift.TShowPipePluginReq;
156157
import org.apache.iotdb.confignode.rpc.thrift.TShowPipeReq;
157158
import org.apache.iotdb.confignode.rpc.thrift.TShowPipeResp;
@@ -165,7 +166,6 @@
165166
import org.apache.iotdb.confignode.rpc.thrift.TStartPipeReq;
166167
import org.apache.iotdb.confignode.rpc.thrift.TStopPipeReq;
167168
import org.apache.iotdb.confignode.rpc.thrift.TSubscribeReq;
168-
import org.apache.iotdb.confignode.rpc.thrift.TUnloadModelReq;
169169
import org.apache.iotdb.confignode.rpc.thrift.TUnsetSchemaTemplateReq;
170170
import org.apache.iotdb.confignode.rpc.thrift.TUnsubscribeReq;
171171
import org.apache.iotdb.consensus.common.DataSet;
@@ -890,10 +890,10 @@ TDataPartitionTableResp getOrCreateDataPartition(
890890
TSStatus unloadModel(TUnloadModelReq req);
891891

892892
/** Return the model table. */
893-
TShowModelResp showModel(TShowModelReq req);
893+
TShowModelsResp showModel(TShowModelsReq req);
894894

895895
/** Return the loaded model instances. */
896-
TShowLoadedModelResp showLoadedModel(TShowLoadedModelReq req);
896+
TShowLoadedModelsResp showLoadedModel(TShowLoadedModelsReq req);
897897

898898
/** Return all available AI devices. */
899899
TShowAIDevicesResp showAIDevices();

0 commit comments

Comments
 (0)