You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2021/05/15 09:39:19 UTC

[skywalking] branch master updated: Fix issue 6945 (#6948)

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

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 5e40a09  Fix issue 6945 (#6948)
5e40a09 is described below

commit 5e40a0998a7dda8e2e69320c109ffb0a832c872d
Author: Joe <12...@qq.com>
AuthorDate: Sat May 15 17:38:51 2021 +0800

    Fix issue 6945 (#6948)
---
 CHANGES.md                                                  |  1 +
 .../configmap/ConfigmapConfigurationWatcherRegister.java    |  2 +-
 .../configmap/ConfigmapConfigWatcherRegisterTest.java       | 13 +++++++++++++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/CHANGES.md b/CHANGES.md
index e209ae1..9c48780 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -41,6 +41,7 @@ Release Notes.
 * Fix: Envoy error logs are not persisted when no metrics are generated
 * Fix: Memory leakage of low version etcd client. [fix-issue](https://github.com/jurmous/etcd4j/pull/185)
 * Allow multiple definitions as fallback in metadata-service-mapping.yaml file.
+* Fix: NPE when configmap has no data. 
 
 #### UI
 * Add logo for kong plugin.
diff --git a/oap-server/server-configuration/configuration-k8s-configmap/src/main/java/org/apache/skywalking/oap/server/configuration/configmap/ConfigmapConfigurationWatcherRegister.java b/oap-server/server-configuration/configuration-k8s-configmap/src/main/java/org/apache/skywalking/oap/server/configuration/configmap/ConfigmapConfigurationWatcherRegister.java
index fd85acf..c6bcdbc 100644
--- a/oap-server/server-configuration/configuration-k8s-configmap/src/main/java/org/apache/skywalking/oap/server/configuration/configmap/ConfigmapConfigurationWatcherRegister.java
+++ b/oap-server/server-configuration/configuration-k8s-configmap/src/main/java/org/apache/skywalking/oap/server/configuration/configmap/ConfigmapConfigurationWatcherRegister.java
@@ -42,7 +42,7 @@ public class ConfigmapConfigurationWatcherRegister extends ConfigWatcherRegister
         final ConfigTable configTable = new ConfigTable();
         Optional<V1ConfigMap> v1ConfigMap = informer.configMap();
         for (final String name : keys) {
-            final String value = v1ConfigMap.map(configMap -> configMap.getData().get(name)).orElse(null);
+            final String value = v1ConfigMap.map(V1ConfigMap::getData).map(data -> data.get(name)).orElse(null);
             if (log.isDebugEnabled()) {
                 log.debug("read config: name:{} ,value:{}", name, value);
             }
diff --git a/oap-server/server-configuration/configuration-k8s-configmap/src/test/java/org/apache/skywalking/oap/server/configuration/configmap/ConfigmapConfigWatcherRegisterTest.java b/oap-server/server-configuration/configuration-k8s-configmap/src/test/java/org/apache/skywalking/oap/server/configuration/configmap/ConfigmapConfigWatcherRegisterTest.java
index 45ddf43..19e5177 100644
--- a/oap-server/server-configuration/configuration-k8s-configmap/src/test/java/org/apache/skywalking/oap/server/configuration/configmap/ConfigmapConfigWatcherRegisterTest.java
+++ b/oap-server/server-configuration/configuration-k8s-configmap/src/test/java/org/apache/skywalking/oap/server/configuration/configmap/ConfigmapConfigWatcherRegisterTest.java
@@ -58,6 +58,19 @@ public class ConfigmapConfigWatcherRegisterTest {
     }
 
     @Test
+    public void readConfigWhenConfigMapDataIsNull() throws Exception {
+        V1ConfigMap v1ConfigMap = new V1ConfigMap();
+        PowerMockito.doReturn(Optional.of(v1ConfigMap)).when(informer).configMap();
+        Optional<ConfigTable> optionalConfigTable = register.readConfig(new HashSet<String>() {{
+            add("key1");
+        }});
+
+        Assert.assertTrue(optionalConfigTable.isPresent());
+        ConfigTable configTable = optionalConfigTable.get();
+        Assert.assertEquals(configTable.getItems().size(), 0);
+    }
+
+    @Test
     public void readConfigWhenInformerNotwork() throws Exception {
         PowerMockito.doReturn(Optional.empty()).when(informer).configMap();
         Optional<ConfigTable> optionalConfigTable = register.readConfig(new HashSet<String>() {{