Closed zrlw closed 3 years ago
debug跟踪了一下,如果是创建,zk通知的内容就是单个IP地址,只是ChildData的stat的version版本号是0,应该对version判断,非0才能视作data changed事件。 master分支的代码存在同样的问题。
@zrlw Hi,我认为这不是好的解决方案,这样会有以下几个问题
AbstractConfiguratorListener
本身就是监听的配置的变更,ADDED 事件不做任何处理,逻辑上不太通;zkClient.setData().forPath(path, value.getBytes());
的形式,zkClient.create()
则是 ADDED 事件,导致发布无效; private ConfigChangeType getChangeType(String configInfo, String oldValue) {
if (StringUtils.isBlank(configInfo)) {
return ConfigChangeType.DELETED;
}
if (StringUtils.isBlank(oldValue)) {
return ConfigChangeType.ADDED;
}
return ConfigChangeType.MODIFIED;
}
回到这个问题本身,首先应该排查一下为什么会有 IP 字符串写入到这里,dubbo 监听的配置路径都是固定。即使有错误的字符串的输入,应该在解析那里中断流程,而不是在上游中断流程。
Environment
通常传给parseObject的raw config入参是yml格式的字符串,如下面日志所示:
但有时传入的内容却是个IP地址串,如下面日志所示的"172.21.0.5",此时就会因为类型不一致而抛异常: https://github.com/apache/dubbo/runs/3616815684?check_suite_focus=true