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 0f902c0697 IGNITE-19659 NullPointerException in
ClusterConfigRegistryImpl.fetchConfig (#2156)
0f902c0697 is described below
commit 0f902c0697606f7f741b845fddbfb4ba6884035b
Author: Vadim Pakhnushev <[email protected]>
AuthorDate: Wed Jun 7 18:45:18 2023 +0300
IGNITE-19659 NullPointerException in ClusterConfigRegistryImpl.fetchConfig
(#2156)
---
.../apache/ignite/internal/cli/ssl/ItSslTest.java | 28 +++++++++++++++++-----
.../registry/impl/ClusterConfigRegistryImpl.java | 15 ++++++++----
.../repl/registry/impl/MetricRegistryImpl.java | 11 +++++++--
3 files changed, 41 insertions(+), 13 deletions(-)
diff --git
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/ssl/ItSslTest.java
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/ssl/ItSslTest.java
index f69d4f01c8..2a5c5bc70e 100644
---
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/ssl/ItSslTest.java
+++
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/ssl/ItSslTest.java
@@ -19,18 +19,34 @@ package org.apache.ignite.internal.cli.ssl;
import static org.junit.jupiter.api.Assertions.assertAll;
+import jakarta.inject.Inject;
import org.apache.ignite.internal.NodeConfig;
+import org.apache.ignite.internal.cli.call.connect.ConnectCall;
+import org.apache.ignite.internal.cli.core.call.UrlCallInput;
+import org.apache.ignite.internal.cli.core.flow.builder.Flows;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
/** Tests for SSL. */
public class ItSslTest extends CliSslNotInitializedIntegrationTestBase {
+ @Inject
+ ConnectCall connectCall;
+
+ /** Mimics non-REPL "connect" command without starting REPL mode.
Overriding getCommandClass and returning TopLevelCliReplCommand
+ * wouldn't help because it will start to ask questions.
+ */
+ private void connect(String url) {
+ Flows.from(new UrlCallInput(url))
+ .then(Flows.fromCall(connectCall))
+ .print()
+ .start();
+ }
@Test
@DisplayName("Should get SSL error, when connect to secured node without
SSL settings")
void connectToSecuredNodeWithoutSslSettings() {
// When connect via HTTPS without SSL
- execute("connect", "https://localhost:10401");
+ connect("https://localhost:10401");
// Then
assertAll(
@@ -50,7 +66,7 @@ public class ItSslTest extends
CliSslNotInitializedIntegrationTestBase {
resetOutput();
// And connect via HTTPS
- execute("connect", "https://localhost:10401");
+ connect("https://localhost:10401");
// Then
assertAll(
@@ -70,7 +86,7 @@ public class ItSslTest extends
CliSslNotInitializedIntegrationTestBase {
resetOutput();
// And connect via HTTPS
- execute("connect", "https://localhost:10401");
+ connect("https://localhost:10401");
// Then
assertAll(
@@ -90,7 +106,7 @@ public class ItSslTest extends
CliSslNotInitializedIntegrationTestBase {
resetOutput();
// And connect via HTTPS
- execute("connect", "https://localhost:10401");
+ connect("https://localhost:10401");
// Then
assertAll(
@@ -110,7 +126,7 @@ public class ItSslTest extends
CliSslNotInitializedIntegrationTestBase {
resetOutput();
// And connect via HTTPS
- execute("connect", "https://localhost:10401");
+ connect("https://localhost:10401");
// Then
assertAll(
@@ -130,7 +146,7 @@ public class ItSslTest extends
CliSslNotInitializedIntegrationTestBase {
resetOutput();
// And connect via HTTPS
- execute("connect", "https://localhost:10401");
+ connect("https://localhost:10401");
// Then
assertAll(
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/registry/impl/ClusterConfigRegistryImpl.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/registry/impl/ClusterConfigRegistryImpl.java
index e6034c5d86..28e1f0f359 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/registry/impl/ClusterConfigRegistryImpl.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/registry/impl/ClusterConfigRegistryImpl.java
@@ -22,9 +22,12 @@ import com.typesafe.config.ConfigFactory;
import jakarta.inject.Singleton;
import org.apache.ignite.internal.cli.call.configuration.ClusterConfigShowCall;
import
org.apache.ignite.internal.cli.call.configuration.ClusterConfigShowCallInput;
+import org.apache.ignite.internal.cli.call.configuration.JsonString;
+import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.repl.AsyncSessionEventListener;
import org.apache.ignite.internal.cli.core.repl.SessionInfo;
import org.apache.ignite.internal.cli.core.repl.registry.ClusterConfigRegistry;
+import org.jetbrains.annotations.Nullable;
/** Implementation of {@link ClusterConfigRegistry}. */
@Singleton
@@ -43,12 +46,14 @@ public class ClusterConfigRegistryImpl implements
ClusterConfigRegistry, AsyncSe
configRef = new LazyObjectRef<>(() -> fetchConfig(sessionInfo));
}
+ @Nullable
private Config fetchConfig(SessionInfo sessionInfo) {
- return ConfigFactory.parseString(
- clusterConfigShowCall.execute(
-
ClusterConfigShowCallInput.builder().clusterUrl(sessionInfo.nodeUrl()).build()
- ).body().getValue()
- );
+ ClusterConfigShowCallInput input =
ClusterConfigShowCallInput.builder().clusterUrl(sessionInfo.nodeUrl()).build();
+ DefaultCallOutput<JsonString> output =
clusterConfigShowCall.execute(input);
+ if (output.hasError()) {
+ return null;
+ }
+ return ConfigFactory.parseString(output.body().getValue());
}
@Override
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/registry/impl/MetricRegistryImpl.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/registry/impl/MetricRegistryImpl.java
index 72422a16dc..22e22009fd 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/registry/impl/MetricRegistryImpl.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/registry/impl/MetricRegistryImpl.java
@@ -19,14 +19,17 @@ package
org.apache.ignite.internal.cli.core.repl.registry.impl;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
+import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import
org.apache.ignite.internal.cli.call.node.metric.NodeMetricSourceListCall;
+import org.apache.ignite.internal.cli.core.call.CallOutput;
import org.apache.ignite.internal.cli.core.call.UrlCallInput;
import org.apache.ignite.internal.cli.core.repl.AsyncSessionEventListener;
import org.apache.ignite.internal.cli.core.repl.SessionInfo;
import org.apache.ignite.internal.cli.core.repl.registry.MetricRegistry;
import org.apache.ignite.rest.client.model.MetricSource;
+import org.jetbrains.annotations.Nullable;
/** Implementation of {@link MetricRegistry}. */
@Singleton
@@ -54,9 +57,13 @@ public class MetricRegistryImpl implements MetricRegistry,
AsyncSessionEventList
metricSourcesRef = new LazyObjectRef<>(() ->
fetchMetricSources(sessionInfo));
}
+ @Nullable
private Set<String> fetchMetricSources(SessionInfo sessionInfo) {
- return metricSourceListCall.execute(new
UrlCallInput(sessionInfo.nodeUrl()))
- .body().stream()
+ CallOutput<List<MetricSource>> output =
metricSourceListCall.execute(new UrlCallInput(sessionInfo.nodeUrl()));
+ if (output.hasError()) {
+ return null;
+ }
+ return output.body().stream()
.map(MetricSource::getName)
.collect(Collectors.toSet());
}