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 <[email protected]>
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>() {{

Reply via email to