nacos 当group 包含点时,导入导出V1 格式会导致appName 字段错误问题

zqdjd7g9  于 2022-11-13  发布在  Nacos
关注(0)|答案(8)|浏览(300)

当group 包含点"."时,在特定场景下会有问题:
比如:
分别创建如下配置:
dataId : aaa.test_app.yml ; group : base_group;
dataId : test_app.yml ; group : base_group.aaa;
此时导入导出V1版本时,会导致无法精准定位到对应配置,造成 appName 字段错误。
修复建议:group 添加校验,不能输入点"."。

cmssoen2

cmssoen21#

我觉得修复方式可能有点问题,需要讨论下, 看下导入导出的时候为什么会定位错误。

yvt65v4c

yvt65v4c2#

场景只会再极端情况下出现,按照上方所述方式添加两个配置后,导出v1格式的meta 内容如下:

test_group.aaa.test_data~yml.app=test_group
test_group.aaa.test_data~yml.app=testaaa

这样在导入的时候,定位就会出问题,最根本原因是因为V1格式的meta在拼接 data 与 group 生成的key 是用点拼接,而且这样一来,万一日后需要从meta 中正确拆分出group与data 也会有问题。
加上实际场景中,group 基本不会遇到输入点的情况。

ktecyv1j

ktecyv1j3#

不能保证他人使用的时候没有输入点的情况,这里导出导入时是不是要将group的.和dataid的点一样,做转译处理?

vpfxa7rd

vpfxa7rd4#

转译成 "~"可以,但是这样一来,是不是就相当于变相改了v1的meta格式了,
之前代码只对dataId 的最后一个“点”做了处理,需考虑是否有其他地方使用当前格式。
原代码如下:

String metaDataId = ci.getDataId();
if (metaDataId.contains(".")) {
    metaDataId = metaDataId.substring(0, metaDataId.lastIndexOf(".")) + "~" + metaDataId.substring(
            metaDataId.lastIndexOf(".") + 1);
}
metaData.append(ci.getGroup()).append('.').append(metaDataId).append(".app=")
        // Fixed use of "\r\n" here
        .append(ci.getAppName()).append("\r\n");
sbdsn5lh

sbdsn5lh5#

如果将 group 和 dataId 中的点 全部转译成 "~" 方案可行的话,我把代码改完再提交一下

mcdcgff0

mcdcgff06#

提交pr前还是再讨论一下吧,先讨论方案是否有问题,以免做无用修改。

5cnsuln7

5cnsuln77#

修复该问题,主要是为了实现这个功能, #5797
目前在解耦 config 时,发现了这些问题,虽然影响不大,但是感觉还是解决一下比较好。
另外针对上面那个 issues ,目前代码已实现了大部分功能,这个功能不算小,如何讨论一下。
以下是针对该issues 写的一个临时博客,期待探讨。
https://www.cnblogs.com/moonciki/articles/16566937.html

unguejic

unguejic8#

修复该问题,主要是为了实现这个功能, #5797 目前在解耦 config 时,发现了这些问题,虽然影响不大,但是感觉还是解决一下比较好。 另外针对上面那个 issues ,目前代码已实现了大部分功能,这个功能不算小,如何讨论一下。 以下是针对该issues 写的一个临时博客,期待探讨。 https://www.cnblogs.com/moonciki/articles/16566937.html

解耦config模块和persistence模块是一个比较大的改动,可以单独为这个内容提一个提案,可以单独再提一个新的issue,并且把提案详细的写在issue里。

相关问题