apollo
apollo copied to clipboard
namespace大小写问题
再创建namespace的时候是大小写敏感的,但是configservice里有个AppNamespaceServiceWithCache会缓存AppNamespace,并且是大小写不敏感的。这会导致加载namespace的时候会加载到同一个namespace。
创建namespace应该也是大小写不敏感的
如果发生了删除,但不是管理员工具删除,好像就会有问题,总之是可以配置大小写不敏感的同名配置的
恩,从功能上来说应该是需要支持大小写不敏感的,看上去是在某些分支上有漏洞,不知对你这边的场景是什么样的,我们看看是否可以重现
场景是这样的,他们创了两个namespace,一个是redis.json,另一个是Redis.json,然后在namespace的界面通过"删除namespace"按钮把Redis.json给删除了,最后在加载redis.json这个配置的时候,在configService里面经过'namespace = namespaceUtil.normalizeNamespace(appId, namespace);'这行代码把redis.json转换成了缓存里的Redis.json,就加载不到了
normalizeNamespace这个确实是一个问题,不过我测试了一下,正常情况下如果已经有了redis.json,程序是不允许创建Redis.json的。。。
那可能是有了Redis.json,然后再删除Redis.json,再建立redis.json导致的?
尝试了一下也没能重现。。
我试了下,我们这边是能创建redis.json和Redis.json的,先创redis.json再创Redis.json之后只能用客户端拉redis.json会拿到Redis.json的内容。我们这边是基于1.2.0版本的,数据库是用的pg。
1.3添加了一个这个fix,是否跟这个有关,#1894 ,不过暂时没看到大小写转换,不知道大小写不同的情况是否会受到这个的影响
Mysql默认是不区分大小写的,所以apollo是依赖了这个特性做的大小写去重校验,是否是你们的mysql数据库开了区分大小写?
我们用的是postgresql,pg默认是区分大小写的,mysql连内容也不区分大小写吗?
mysql默认是不区分的
我觉得这个设计有点问题
- 把大小写敏感这么重要的事情直接交给了第三方组件,而不是在代码里处理
- 文档里并没有说明这件事
- 数据库大小写无所谓(文档没说明),却在代码里有一个大小写不敏感的缓存
建议把这层转换在代码里做掉会好一些,否者稍不注意就会引起问题