alibaba / spring-cloud-alibaba

Spring Cloud Alibaba provides a one-stop solution for application development for the distributed solutions of Alibaba middleware.
https://sca.aliyun.com
Apache License 2.0
27.37k stars 8.16k forks source link

nacos控制台配置列表删除配置时,项目出现NullPointerException #3699

Closed app2smile closed 3 weeks ago

app2smile commented 3 weeks ago

environment

jdk21
spring cloud alibaba 2023.0.1.0
spring cloud 2023.0.1
nacos 2.3.2
spring boot 3.2.5

Describe the bug nacos控制台配置列表删除配置时,项目出现NullPointerException

CacheData$1.run(420):  [fixed-fixed-127.0.0.1_8848] [notify-context] dataId=demo-dev.yml, group=DEFAULT_GROUP,tenant=, md5=
[ nacos.client.config.listener.task-0:1156190 ] - [ WARN ]  NacosSnapshotConfigManager.putConfigSnapshot(68):  remove nacos config snapshot error

java.lang.NullPointerException: null
    at java.base/java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011) ~[?:?]
    at java.base/java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006) ~[?:?]
    at com.alibaba.cloud.nacos.refresh.NacosSnapshotConfigManager.putConfigSnapshot(NacosSnapshotConfigManager.java:64) ~[spring-cloud-starter-alibaba-nacos-config-2023.0.1.0.jar:2023.0.1.0]
    at com.alibaba.cloud.nacos.refresh.NacosContextRefresher$1.innerReceive(NacosContextRefresher.java:118) ~[spring-cloud-starter-alibaba-nacos-config-2023.0.1.0.jar:2023.0.1.0]
    at com.alibaba.nacos.api.config.listener.AbstractSharedListener.receiveConfigInfo(AbstractSharedListener.java:40) ~[nacos-client-2.3.2.jar:?]
    at com.alibaba.nacos.client.config.impl.CacheData$1.run(CacheData.java:440) ~[nacos-client-2.3.2.jar:?]
    at com.alibaba.nacos.client.config.impl.CacheData.safeNotifyListener(CacheData.java:483) ~[nacos-client-2.3.2.jar:?]
    at com.alibaba.nacos.client.config.impl.CacheData.checkListenerMd5(CacheData.java:324) ~[nacos-client-2.3.2.jar:?]
    at com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient.refreshContentAndCheck(ClientWorker.java:943) ~[nacos-client-2.3.2.jar:?]
    at com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient.refreshContentAndCheck(ClientWorker.java:924) ~[nacos-client-2.3.2.jar:?]
    at com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient.lambda$checkListenCache$7(ClientWorker.java:1033) ~[nacos-client-2.3.2.jar:?]
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) ~[?:?]
    at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:317) ~[?:?]
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) ~[?:?]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
    at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]

To Reproduce

  1. nacos控制台配置列表中新建一个配置 dataId: demo-dev.yml 配置格式yaml
  2. 项目可以正常拉取到配置
  3. 此时在nacos控制台删除这个配置, 项目出现空指针异常

demo见附件 nacos-null-demo.zip

yuluo-yx commented 3 weeks ago

你期望的结果是什么?

app2smile commented 3 weeks ago

这个空指针是正常现象还是意外情况? 目前是不影响功能

ruansheng8 commented 3 weeks ago

该问题不会影响功能的使用,只是会多一条警告日志,已修复:#3700

当前版本如果不想看到该警告日志,可以通过设置日志级别来屏蔽:

logging:
  level:
    com.alibaba.cloud.nacos.refresh.NacosSnapshotConfigManager: error