configurators节点变更,导致AbstractRegistry.saveProperties()保存的缓存数据丢失了providers信息
- Dominant language
- Java
- Stars
- 41.6k
- Forks
- 26.4k
- Avg merge
- 15h 13m
- Merged PRs (30d)
- 4
Description
- [ ] I have searched the [issues](https://github.com/apache/dubbo/issues) of this repository and believe that this is not a duplicate.
### Environment
* Dubbo version: 3.0.5
* Java version: 1.8
### Steps to reproduce this issue
consumer 启动后,引用的provider添加override 信息,provider的configurators下的子节点发生变更
Pls. provide [GitHub address] to reproduce this issue.
### Expected Behavior
缓存数据正常保存
### Actual Behavior
缓存文件中丢失了providers节点下的url信息
### Reason
原因是ZookeeperRegistry在订阅时创建的RegistryChildListenerImpl对象采用了缓存,导致providers, configurators, routers本个节点路由使用的是同一个RegistryChildListenerImpl对象,但是RegistryChildListenerImpl对象中保存了providers的路径用于toUrlsWithEmpty方法中的创建URL动作,导致toUrlsWithEmpty方法认为configurators和routers的url是providers下的url
Contributor guide
Research direction
Start with ZookeeperRegistry and its cached RegistryChildListenerImpl, then trace how providers, configurators, and routers are handled by toUrlsWithEmpty and how AbstractRegistry.saveProperties persists the cache. Reproduce the reported override and configurators-child change scenario, and verify that the saved cache retains the providers node URL information without confusing the three paths.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- distributed-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100