This is an automated email from the ASF dual-hosted git repository.
apkhmv pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 5da61ab081 IGNITE-18708 Fix flaky ItGeneratedRestClientTest, make ali
client usage thread-sage (#1710)
5da61ab081 is described below
commit 5da61ab081690e7510f8339158b399b4a3c65f06
Author: Vadim Pakhnushev <[email protected]>
AuthorDate: Fri Feb 24 09:38:42 2023 +0300
IGNITE-18708 Fix flaky ItGeneratedRestClientTest, make ali client usage
thread-sage (#1710)
---
.../internal/rest/ItGeneratedRestClientTest.java | 11 ++++--
.../internal/cli/call/cluster/ClusterInitCall.java | 10 ++++-
.../cli/call/cluster/status/ClusterStatusCall.java | 9 +++--
.../call/cluster/topology/LogicalTopologyCall.java | 10 ++++-
.../cluster/topology/PhysicalTopologyCall.java | 10 ++++-
.../call/configuration/ClusterConfigShowCall.java | 9 ++++-
.../configuration/ClusterConfigUpdateCall.java | 10 ++++-
.../cli/call/configuration/NodeConfigShowCall.java | 10 ++++-
.../call/configuration/NodeConfigUpdateCall.java | 10 ++++-
.../internal/cli/call/connect/ConnectCall.java | 11 ++++--
.../cli/call/node/metric/NodeMetricEnableCall.java | 12 ++++--
.../cli/call/node/metric/NodeMetricListCall.java | 12 ++++--
.../cli/call/node/status/NodeStatusCall.java | 10 ++++-
.../cli/call/node/version/NodeVersionCall.java | 10 ++++-
.../ignite/internal/cli/core/ApiClientFactory.java | 44 ++++++++++++++++++++++
.../repl/registry/impl/JdbcUrlRegistryImpl.java | 9 +++--
.../ignite/internal/cli/logger/CliLoggers.java | 16 +++++---
.../cli/call/node/status/NodeStatusCallTest.java | 17 +++++----
18 files changed, 181 insertions(+), 49 deletions(-)
diff --git
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/rest/ItGeneratedRestClientTest.java
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/rest/ItGeneratedRestClientTest.java
index ebe2ab44cd..80c1af7344 100644
---
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/rest/ItGeneratedRestClientTest.java
+++
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/rest/ItGeneratedRestClientTest.java
@@ -36,6 +36,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
+import jakarta.inject.Inject;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
@@ -43,6 +45,7 @@ import java.util.concurrent.CompletableFuture;
import java.util.stream.IntStream;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgnitionManager;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.testframework.WorkDirectory;
import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
import org.apache.ignite.internal.util.IgniteUtils;
@@ -54,7 +57,6 @@ import org.apache.ignite.rest.client.api.NodeMetricApi;
import org.apache.ignite.rest.client.api.TopologyApi;
import org.apache.ignite.rest.client.invoker.ApiClient;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
import org.apache.ignite.rest.client.model.ClusterState;
import org.apache.ignite.rest.client.model.InitCommand;
import org.apache.ignite.rest.client.model.MetricSource;
@@ -70,6 +72,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
* Test for autogenerated ignite rest client.
*/
@ExtendWith(WorkDirectoryExtension.class)
+@MicronautTest(rebuildContext = true)
public class ItGeneratedRestClientTest {
/** Start network port for test nodes. */
private static final int BASE_PORT = 3344;
@@ -100,6 +103,9 @@ public class ItGeneratedRestClientTest {
private String firstNodeName;
+ @Inject
+ private ApiClientFactory clientFactory;
+
private static String buildConfig(int nodeIdx) {
return "{\n"
+ " network: {\n"
@@ -130,8 +136,7 @@ public class ItGeneratedRestClientTest {
firstNodeName = clusterNodes.get(0).name();
- ApiClient client = Configuration.getDefaultApiClient();
- client.setBasePath("http://localhost:" + BASE_REST_PORT);
+ ApiClient client = clientFactory.getClient("http://localhost:" +
BASE_REST_PORT);
clusterConfigurationApi = new ClusterConfigurationApi(client);
nodeConfigurationApi = new NodeConfigurationApi(client);
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/ClusterInitCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/ClusterInitCall.java
index 456e7ee024..06b4c11ff3 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/ClusterInitCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/ClusterInitCall.java
@@ -18,12 +18,12 @@
package org.apache.ignite.internal.cli.call.cluster;
import jakarta.inject.Singleton;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.ClusterManagementApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
import org.apache.ignite.rest.client.model.InitCommand;
/**
@@ -31,6 +31,12 @@ import org.apache.ignite.rest.client.model.InitCommand;
*/
@Singleton
public class ClusterInitCall implements Call<ClusterInitCallInput, String> {
+ private final ApiClientFactory clientFactory;
+
+ public ClusterInitCall(ApiClientFactory clientFactory) {
+ this.clientFactory = clientFactory;
+ }
+
/** {@inheritDoc} */
@Override
public DefaultCallOutput<String> execute(ClusterInitCallInput input) {
@@ -49,6 +55,6 @@ public class ClusterInitCall implements
Call<ClusterInitCallInput, String> {
}
private ClusterManagementApi createApiClient(ClusterInitCallInput input) {
- return new
ClusterManagementApi(Configuration.getDefaultApiClient().setBasePath(input.getClusterUrl()));
+ return new
ClusterManagementApi(clientFactory.getClient(input.getClusterUrl()));
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/status/ClusterStatusCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/status/ClusterStatusCall.java
index dbcdce5e6c..dcb0b64f9a 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/status/ClusterStatusCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/status/ClusterStatusCall.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.cli.call.cluster.status;
import jakarta.inject.Singleton;
import
org.apache.ignite.internal.cli.call.cluster.status.ClusterStatus.ClusterStatusBuilder;
import
org.apache.ignite.internal.cli.call.cluster.topology.PhysicalTopologyCall;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.CallOutput;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
@@ -27,7 +28,6 @@ import org.apache.ignite.internal.cli.core.call.UrlCallInput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.ClusterManagementApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
import org.apache.ignite.rest.client.model.ClusterState;
/**
@@ -38,8 +38,11 @@ public class ClusterStatusCall implements Call<UrlCallInput,
ClusterStatus> {
private final PhysicalTopologyCall physicalTopologyCall;
- public ClusterStatusCall(PhysicalTopologyCall physicalTopologyCall) {
+ private final ApiClientFactory clientFactory;
+
+ public ClusterStatusCall(PhysicalTopologyCall physicalTopologyCall,
ApiClientFactory clientFactory) {
this.physicalTopologyCall = physicalTopologyCall;
+ this.clientFactory = clientFactory;
}
@Override
@@ -72,6 +75,6 @@ public class ClusterStatusCall implements Call<UrlCallInput,
ClusterStatus> {
}
private ClusterState fetchClusterState(String url) throws ApiException {
- return new
ClusterManagementApi(Configuration.getDefaultApiClient().setBasePath(url)).clusterState();
+ return new
ClusterManagementApi(clientFactory.getClient(url)).clusterState();
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/topology/LogicalTopologyCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/topology/LogicalTopologyCall.java
index 2d36557cfe..8f721d3c54 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/topology/LogicalTopologyCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/topology/LogicalTopologyCall.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.cli.call.cluster.topology;
import jakarta.inject.Singleton;
import java.util.List;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.CallOutput;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
@@ -26,7 +27,6 @@ import org.apache.ignite.internal.cli.core.call.UrlCallInput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.TopologyApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
import org.apache.ignite.rest.client.model.ClusterNode;
/**
@@ -34,6 +34,12 @@ import org.apache.ignite.rest.client.model.ClusterNode;
*/
@Singleton
public class LogicalTopologyCall implements Call<UrlCallInput,
List<ClusterNode>> {
+ private final ApiClientFactory clientFactory;
+
+ public LogicalTopologyCall(ApiClientFactory clientFactory) {
+ this.clientFactory = clientFactory;
+ }
+
/** {@inheritDoc} */
@Override
@@ -47,6 +53,6 @@ public class LogicalTopologyCall implements
Call<UrlCallInput, List<ClusterNode>
}
private List<ClusterNode> fetchLogicalTopology(String url) throws
ApiException {
- return new
TopologyApi(Configuration.getDefaultApiClient().setBasePath(url)).logical();
+ return new TopologyApi(clientFactory.getClient(url)).logical();
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/topology/PhysicalTopologyCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/topology/PhysicalTopologyCall.java
index a5efa7c555..9036a6e320 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/topology/PhysicalTopologyCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/topology/PhysicalTopologyCall.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.cli.call.cluster.topology;
import jakarta.inject.Singleton;
import java.util.List;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.CallOutput;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
@@ -26,7 +27,6 @@ import org.apache.ignite.internal.cli.core.call.UrlCallInput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.TopologyApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
import org.apache.ignite.rest.client.model.ClusterNode;
/**
@@ -35,6 +35,12 @@ import org.apache.ignite.rest.client.model.ClusterNode;
@Singleton
public class PhysicalTopologyCall implements Call<UrlCallInput,
List<ClusterNode>> {
+ private final ApiClientFactory clientFactory;
+
+ public PhysicalTopologyCall(ApiClientFactory clientFactory) {
+ this.clientFactory = clientFactory;
+ }
+
/** {@inheritDoc} */
@Override
public CallOutput<List<ClusterNode>> execute(UrlCallInput input) {
@@ -47,6 +53,6 @@ public class PhysicalTopologyCall implements
Call<UrlCallInput, List<ClusterNode
}
private List<ClusterNode> fetchPhysicalTopology(String url) throws
ApiException {
- return new
TopologyApi(Configuration.getDefaultApiClient().setBasePath(url)).physical();
+ return new TopologyApi(clientFactory.getClient(url)).physical();
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigShowCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigShowCall.java
index 80cadbb91c..ebf2060d1c 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigShowCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigShowCall.java
@@ -18,18 +18,23 @@
package org.apache.ignite.internal.cli.call.configuration;
import jakarta.inject.Singleton;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.ClusterConfigurationApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
/**
* Shows cluster configuration.
*/
@Singleton
public class ClusterConfigShowCall implements Call<ClusterConfigShowCallInput,
JsonString> {
+ private final ApiClientFactory clientFactory;
+
+ public ClusterConfigShowCall(ApiClientFactory clientFactory) {
+ this.clientFactory = clientFactory;
+ }
/** {@inheritDoc} */
@Override
@@ -50,6 +55,6 @@ public class ClusterConfigShowCall implements
Call<ClusterConfigShowCallInput, J
}
private ClusterConfigurationApi createApiClient(ClusterConfigShowCallInput
input) {
- return new
ClusterConfigurationApi(Configuration.getDefaultApiClient().setBasePath(input.getClusterUrl()));
+ return new
ClusterConfigurationApi(clientFactory.getClient(input.getClusterUrl()));
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigUpdateCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigUpdateCall.java
index 5e6b9b7453..8e1f8ddd6d 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigUpdateCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigUpdateCall.java
@@ -18,18 +18,24 @@
package org.apache.ignite.internal.cli.call.configuration;
import jakarta.inject.Singleton;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.ClusterConfigurationApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
/**
* Updates cluster configuration.
*/
@Singleton
public class ClusterConfigUpdateCall implements
Call<ClusterConfigUpdateCallInput, String> {
+ private final ApiClientFactory clientFactory;
+
+ public ClusterConfigUpdateCall(ApiClientFactory clientFactory) {
+ this.clientFactory = clientFactory;
+ }
+
/** {@inheritDoc} */
@Override
public DefaultCallOutput<String> execute(ClusterConfigUpdateCallInput
input) {
@@ -49,6 +55,6 @@ public class ClusterConfigUpdateCall implements
Call<ClusterConfigUpdateCallInpu
}
private ClusterConfigurationApi
createApiClient(ClusterConfigUpdateCallInput input) {
- return new
ClusterConfigurationApi(Configuration.getDefaultApiClient().setBasePath(input.getClusterUrl()));
+ return new
ClusterConfigurationApi(clientFactory.getClient(input.getClusterUrl()));
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigShowCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigShowCall.java
index bc7f0e9d8d..456b323a1b 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigShowCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigShowCall.java
@@ -18,12 +18,12 @@
package org.apache.ignite.internal.cli.call.configuration;
import jakarta.inject.Singleton;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.NodeConfigurationApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
/**
* Shows node configuration from ignite cluster.
@@ -31,6 +31,12 @@ import org.apache.ignite.rest.client.invoker.Configuration;
@Singleton
public class NodeConfigShowCall implements Call<NodeConfigShowCallInput,
JsonString> {
+ private final ApiClientFactory clientFactory;
+
+ public NodeConfigShowCall(ApiClientFactory clientFactory) {
+ this.clientFactory = clientFactory;
+ }
+
/** {@inheritDoc} */
@Override
public DefaultCallOutput<JsonString> execute(NodeConfigShowCallInput
input) {
@@ -50,6 +56,6 @@ public class NodeConfigShowCall implements
Call<NodeConfigShowCallInput, JsonStr
}
private NodeConfigurationApi createApiClient(NodeConfigShowCallInput
input) {
- return new
NodeConfigurationApi(Configuration.getDefaultApiClient().setBasePath(input.getNodeUrl()));
+ return new
NodeConfigurationApi(clientFactory.getClient(input.getNodeUrl()));
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigUpdateCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigUpdateCall.java
index d4a20d1969..c5dda6f002 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigUpdateCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigUpdateCall.java
@@ -18,18 +18,24 @@
package org.apache.ignite.internal.cli.call.configuration;
import jakarta.inject.Singleton;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.NodeConfigurationApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
/**
* Updates configuration for node.
*/
@Singleton
public class NodeConfigUpdateCall implements Call<NodeConfigUpdateCallInput,
String> {
+ private final ApiClientFactory clientFactory;
+
+ public NodeConfigUpdateCall(ApiClientFactory clientFactory) {
+ this.clientFactory = clientFactory;
+ }
+
/** {@inheritDoc} */
@Override
public DefaultCallOutput<String> execute(NodeConfigUpdateCallInput input) {
@@ -49,6 +55,6 @@ public class NodeConfigUpdateCall implements
Call<NodeConfigUpdateCallInput, Str
}
private NodeConfigurationApi createApiClient(NodeConfigUpdateCallInput
input) {
- return new
NodeConfigurationApi(Configuration.getDefaultApiClient().setBasePath(input.getNodeUrl()));
+ return new
NodeConfigurationApi(clientFactory.getClient(input.getNodeUrl()));
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/connect/ConnectCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/connect/ConnectCall.java
index 9c0b7dd0a8..333ae6b973 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/connect/ConnectCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/connect/ConnectCall.java
@@ -23,6 +23,7 @@ import java.net.MalformedURLException;
import java.util.Objects;
import org.apache.ignite.internal.cli.config.ConfigConstants;
import org.apache.ignite.internal.cli.config.StateConfigProvider;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.JdbcUrl;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.CallOutput;
@@ -36,7 +37,6 @@ import
org.apache.ignite.internal.cli.core.style.element.UiElements;
import org.apache.ignite.rest.client.api.NodeConfigurationApi;
import org.apache.ignite.rest.client.api.NodeManagementApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
/**
@@ -48,12 +48,15 @@ public class ConnectCall implements Call<ConnectCallInput,
String> {
private final StateConfigProvider stateConfigProvider;
+ private final ApiClientFactory clientFactory;
+
/**
* Constructor.
*/
- public ConnectCall(Session session, StateConfigProvider
stateConfigProvider) {
+ public ConnectCall(Session session, StateConfigProvider
stateConfigProvider, ApiClientFactory clientFactory) {
this.session = session;
this.stateConfigProvider = stateConfigProvider;
+ this.clientFactory = clientFactory;
}
@Override
@@ -76,11 +79,11 @@ public class ConnectCall implements Call<ConnectCallInput,
String> {
}
private String fetchNodeName(String nodeUrl) throws ApiException {
- return new
NodeManagementApi(Configuration.getDefaultApiClient().setBasePath(nodeUrl)).nodeState().getName();
+ return new
NodeManagementApi(clientFactory.getClient(nodeUrl)).nodeState().getName();
}
private String fetchNodeConfiguration(String nodeUrl) throws ApiException {
- return new
NodeConfigurationApi(Configuration.getDefaultApiClient().setBasePath(nodeUrl)).getNodeConfiguration();
+ return new
NodeConfigurationApi(clientFactory.getClient(nodeUrl)).getNodeConfiguration();
}
private String constructJdbcUrl(String configuration, String nodeUrl) {
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/metric/NodeMetricEnableCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/metric/NodeMetricEnableCall.java
index cd22775217..c4628e8229 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/metric/NodeMetricEnableCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/metric/NodeMetricEnableCall.java
@@ -18,17 +18,23 @@
package org.apache.ignite.internal.cli.call.node.metric;
import jakarta.inject.Singleton;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.CallOutput;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.NodeMetricApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
/** Enables or disables metric source. */
@Singleton
public class NodeMetricEnableCall implements Call<NodeMetricEnableCallInput,
String> {
+ private final ApiClientFactory clientFactory;
+
+ public NodeMetricEnableCall(ApiClientFactory clientFactory) {
+ this.clientFactory = clientFactory;
+ }
+
/** {@inheritDoc} */
@Override
public CallOutput<String> execute(NodeMetricEnableCallInput input) {
@@ -47,7 +53,7 @@ public class NodeMetricEnableCall implements
Call<NodeMetricEnableCallInput, Str
}
}
- private static NodeMetricApi createApiClient(NodeMetricEnableCallInput
input) {
- return new
NodeMetricApi(Configuration.getDefaultApiClient().setBasePath(input.getEndpointUrl()));
+ private NodeMetricApi createApiClient(NodeMetricEnableCallInput input) {
+ return new
NodeMetricApi(clientFactory.getClient(input.getEndpointUrl()));
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/metric/NodeMetricListCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/metric/NodeMetricListCall.java
index 20cba1ce34..6b339414bb 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/metric/NodeMetricListCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/metric/NodeMetricListCall.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.cli.call.node.metric;
import jakarta.inject.Singleton;
import java.util.List;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.CallOutput;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
@@ -26,12 +27,17 @@ import
org.apache.ignite.internal.cli.core.call.StringCallInput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.NodeMetricApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
import org.apache.ignite.rest.client.model.MetricSource;
/** Lists node metric sources. */
@Singleton
public class NodeMetricListCall implements Call<StringCallInput,
List<MetricSource>> {
+ private final ApiClientFactory clientFactory;
+
+ public NodeMetricListCall(ApiClientFactory clientFactory) {
+ this.clientFactory = clientFactory;
+ }
+
/** {@inheritDoc} */
@Override
public CallOutput<List<MetricSource>> execute(StringCallInput input) {
@@ -43,7 +49,7 @@ public class NodeMetricListCall implements
Call<StringCallInput, List<MetricSour
}
}
- private static List<MetricSource> listNodeMetrics(StringCallInput input)
throws ApiException {
- return new
NodeMetricApi(Configuration.getDefaultApiClient().setBasePath(input.getString())).listNodeMetrics();
+ private List<MetricSource> listNodeMetrics(StringCallInput input) throws
ApiException {
+ return new
NodeMetricApi(clientFactory.getClient(input.getString())).listNodeMetrics();
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/status/NodeStatusCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/status/NodeStatusCall.java
index 9da964f5d4..36707a7e4c 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/status/NodeStatusCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/status/NodeStatusCall.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.cli.call.node.status;
import jakarta.inject.Singleton;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.CallOutput;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
@@ -25,7 +26,6 @@ import org.apache.ignite.internal.cli.core.call.UrlCallInput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.NodeManagementApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
import org.apache.ignite.rest.client.model.NodeState;
/**
@@ -34,6 +34,12 @@ import org.apache.ignite.rest.client.model.NodeState;
@Singleton
public class NodeStatusCall implements Call<UrlCallInput, NodeStatus> {
+ private final ApiClientFactory clientFactory;
+
+ public NodeStatusCall(ApiClientFactory clientFactory) {
+ this.clientFactory = clientFactory;
+ }
+
@Override
public CallOutput<NodeStatus> execute(UrlCallInput input) {
String clusterUrl = input.getUrl();
@@ -51,6 +57,6 @@ public class NodeStatusCall implements Call<UrlCallInput,
NodeStatus> {
}
private NodeState fetchNodeState(String url) throws ApiException {
- return new
NodeManagementApi(Configuration.getDefaultApiClient().setBasePath(url)).nodeState();
+ return new NodeManagementApi(clientFactory.getClient(url)).nodeState();
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/version/NodeVersionCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/version/NodeVersionCall.java
index 4ffb932121..ca1bbd28f3 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/version/NodeVersionCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/version/NodeVersionCall.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.cli.call.node.version;
import jakarta.inject.Singleton;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.CallOutput;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
@@ -25,11 +26,16 @@ import
org.apache.ignite.internal.cli.core.call.UrlCallInput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.NodeManagementApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
/** Call to get node version. */
@Singleton
public class NodeVersionCall implements Call<UrlCallInput, String> {
+ private final ApiClientFactory clientFactory;
+
+ public NodeVersionCall(ApiClientFactory clientFactory) {
+ this.clientFactory = clientFactory;
+ }
+
@Override
public CallOutput<String> execute(UrlCallInput input) {
try {
@@ -40,6 +46,6 @@ public class NodeVersionCall implements Call<UrlCallInput,
String> {
}
private String getNodeVersion(String url) throws ApiException {
- return new
NodeManagementApi(Configuration.getDefaultApiClient().setBasePath(url)).nodeVersion();
+ return new
NodeManagementApi(clientFactory.getClient(url)).nodeVersion();
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/ApiClientFactory.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/ApiClientFactory.java
new file mode 100644
index 0000000000..bcd7595ae6
--- /dev/null
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/ApiClientFactory.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.cli.core;
+
+import jakarta.inject.Singleton;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import org.apache.ignite.internal.cli.logger.CliLoggers;
+import org.apache.ignite.rest.client.invoker.ApiClient;
+
+/**
+ * This class holds the map from URLs to {@link ApiClient}.
+ */
+@Singleton
+public class ApiClientFactory {
+ private final Map<String, ApiClient> clients = new ConcurrentHashMap<>();
+
+ /**
+ * Gets {@link ApiClient} for the base path.
+ *
+ * @param path Base path.
+ * @return created API client.
+ */
+ public ApiClient getClient(String path) {
+ ApiClient apiClient = clients.computeIfAbsent(path, s -> new
ApiClient().setBasePath(s));
+ CliLoggers.addApiClient(path, apiClient);
+ return apiClient;
+ }
+}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/registry/impl/JdbcUrlRegistryImpl.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/registry/impl/JdbcUrlRegistryImpl.java
index 4b5871ea24..772b4e29d0 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/registry/impl/JdbcUrlRegistryImpl.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/registry/impl/JdbcUrlRegistryImpl.java
@@ -29,6 +29,7 @@ import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
+import org.apache.ignite.internal.cli.core.ApiClientFactory;
import org.apache.ignite.internal.cli.core.JdbcUrl;
import org.apache.ignite.internal.cli.core.repl.AsyncSessionEventListener;
import org.apache.ignite.internal.cli.core.repl.SessionInfo;
@@ -40,7 +41,6 @@ import org.apache.ignite.internal.logger.IgniteLogger;
import org.apache.ignite.internal.thread.NamedThreadFactory;
import org.apache.ignite.rest.client.api.NodeConfigurationApi;
import org.apache.ignite.rest.client.invoker.ApiException;
-import org.apache.ignite.rest.client.invoker.Configuration;
/** Implementation of {@link JdbcUrlRegistry}. */
@Singleton
@@ -50,12 +50,15 @@ public class JdbcUrlRegistryImpl implements
JdbcUrlRegistry, AsyncSessionEventLi
private final NodeNameRegistry nodeNameRegistry;
+ private final ApiClientFactory clientFactory;
+
private volatile Set<JdbcUrl> jdbcUrls = Set.of();
private ScheduledExecutorService executor;
- public JdbcUrlRegistryImpl(NodeNameRegistry nodeNameRegistry) {
+ public JdbcUrlRegistryImpl(NodeNameRegistry nodeNameRegistry,
ApiClientFactory clientFactory) {
this.nodeNameRegistry = nodeNameRegistry;
+ this.clientFactory = clientFactory;
}
private void fetchJdbcUrls() {
@@ -85,7 +88,7 @@ public class JdbcUrlRegistryImpl implements JdbcUrlRegistry,
AsyncSessionEventLi
}
private String fetchNodeConfiguration(String nodeUrl) throws ApiException {
- return new
NodeConfigurationApi(Configuration.getDefaultApiClient().setBasePath(nodeUrl)).getNodeConfiguration();
+ return new
NodeConfigurationApi(clientFactory.getClient(nodeUrl)).getNodeConfiguration();
}
private JdbcUrl constructJdbcUrl(String configuration, String nodeUrl) {
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/logger/CliLoggers.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/logger/CliLoggers.java
index ce393abb15..e1b770924c 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/logger/CliLoggers.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/logger/CliLoggers.java
@@ -19,11 +19,13 @@ package org.apache.ignite.internal.cli.logger;
import java.io.PrintWriter;
import java.lang.System.Logger;
+import java.util.Map;
import java.util.ResourceBundle;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.ignite.internal.logger.IgniteLogger;
import org.apache.ignite.internal.logger.Loggers;
import org.apache.ignite.lang.LoggerFactory;
-import org.apache.ignite.rest.client.invoker.Configuration;
+import org.apache.ignite.rest.client.invoker.ApiClient;
/**
* This class is used when verbose output for command is needed. Instances of
loggers created by the {@link CliLoggers#forClass(Class)} and
@@ -34,8 +36,8 @@ public class CliLoggers {
private static boolean isVerbose;
- /** Http logger for the default REST API client. */
- private static final HttpLogging httpLogger = new
HttpLogging(Configuration.getDefaultApiClient());
+ /** Http loggers for the REST API clients. */
+ private static final Map<String, HttpLogging> httpLoggers = new
ConcurrentHashMap<>();
private static final LoggerFactory loggerFactory = name -> new
CliLogger(System.getLogger(name));
@@ -59,6 +61,10 @@ public class CliLoggers {
return Loggers.forName(name, loggerFactory);
}
+ public static void addApiClient(String path, ApiClient client) {
+ httpLoggers.computeIfAbsent(path, s -> new HttpLogging(client));
+ }
+
/**
* Starts redirecting output from loggers and from REST API client to the
specified print writer.
*
@@ -67,7 +73,7 @@ public class CliLoggers {
public static void startOutputRedirect(PrintWriter out) {
output = out;
isVerbose = true;
- httpLogger.startHttpLogging(out);
+ httpLoggers.values().forEach(logger -> logger.startHttpLogging(out));
}
/**
@@ -76,7 +82,7 @@ public class CliLoggers {
public static void stopOutputRedirect() {
output = null;
isVerbose = false;
- httpLogger.stopHttpLogging();
+ httpLoggers.values().forEach(HttpLogging::stopHttpLogging);
}
/**
diff --git
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/call/node/status/NodeStatusCallTest.java
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/call/node/status/NodeStatusCallTest.java
index 782799dd92..2d2a8dd2eb 100644
---
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/call/node/status/NodeStatusCallTest.java
+++
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/call/node/status/NodeStatusCallTest.java
@@ -25,6 +25,8 @@ import static org.mockserver.model.HttpResponse.response;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
+import jakarta.inject.Inject;
import java.util.Arrays;
import java.util.stream.Stream;
import org.apache.ignite.internal.cli.core.call.CallOutput;
@@ -37,19 +39,21 @@ import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.mockserver.integration.ClientAndServer;
+@MicronautTest(rebuildContext = true)
class NodeStatusCallTest {
- ClientAndServer clientAndServer;
+ private ClientAndServer clientAndServer;
- ObjectMapper objectMapper;
+ private ObjectMapper objectMapper;
- String url;
+ private String url;
- NodeStatusCall call;
+ @Inject
+ private NodeStatusCall call;
- String nodeName;
+ private String nodeName;
- public static Stream<Arguments> nodeStates() {
+ private static Stream<Arguments> nodeStates() {
return
Arrays.stream(org.apache.ignite.rest.client.model.State.values()).map(Arguments::of);
}
@@ -57,7 +61,6 @@ class NodeStatusCallTest {
void setUp() {
nodeName = "testnode";
objectMapper = new ObjectMapper();
- call = new NodeStatusCall();
clientAndServer = ClientAndServer.startClientAndServer(0);
url = "http://localhost:" + clientAndServer.getPort();