diff --git a/CHANGES.md b/CHANGES.md index e209ae1c55b61bcb2454a2695d9e5e1be1dfde48..9c48780e807bd14d87f32d2023318fa2fd0cef68 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 fd85acfa600ffc81d1f10871e02ac806bcba3ab4..c6bcdbc1506d969c8a304de86bf79382f247022f 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 = 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 45ddf434cc20132b0c061e72b20636e3be35688a..19e5177df1315f214aeae3487633292a20e9c904 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 @@ -57,6 +57,19 @@ public class ConfigmapConfigWatcherRegisterTest { register = new ConfigmapConfigurationWatcherRegister(settings, informer); } + @Test + public void readConfigWhenConfigMapDataIsNull() throws Exception { + V1ConfigMap v1ConfigMap = new V1ConfigMap(); + PowerMockito.doReturn(Optional.of(v1ConfigMap)).when(informer).configMap(); + Optional optionalConfigTable = register.readConfig(new HashSet() {{ + 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();