apollo icon indicating copy to clipboard operation
apollo copied to clipboard

namespace大小写问题

Open xiedaijin opened this issue 5 years ago • 13 comments

再创建namespace的时候是大小写敏感的,但是configservice里有个AppNamespaceServiceWithCache会缓存AppNamespace,并且是大小写不敏感的。这会导致加载namespace的时候会加载到同一个namespace。

xiedaijin avatar May 21 '19 07:05 xiedaijin

创建namespace应该也是大小写不敏感的

nobodyiam avatar May 23 '19 00:05 nobodyiam

如果发生了删除,但不是管理员工具删除,好像就会有问题,总之是可以配置大小写不敏感的同名配置的

Adol1111 avatar May 23 '19 03:05 Adol1111

恩,从功能上来说应该是需要支持大小写不敏感的,看上去是在某些分支上有漏洞,不知对你这边的场景是什么样的,我们看看是否可以重现

nobodyiam avatar May 25 '19 12:05 nobodyiam

场景是这样的,他们创了两个namespace,一个是redis.json,另一个是Redis.json,然后在namespace的界面通过"删除namespace"按钮把Redis.json给删除了,最后在加载redis.json这个配置的时候,在configService里面经过'namespace = namespaceUtil.normalizeNamespace(appId, namespace);'这行代码把redis.json转换成了缓存里的Redis.json,就加载不到了

xiedaijin avatar May 27 '19 07:05 xiedaijin

normalizeNamespace这个确实是一个问题,不过我测试了一下,正常情况下如果已经有了redis.json,程序是不允许创建Redis.json的。。。

nobodyiam avatar May 28 '19 14:05 nobodyiam

那可能是有了Redis.json,然后再删除Redis.json,再建立redis.json导致的?

Adol1111 avatar May 28 '19 16:05 Adol1111

尝试了一下也没能重现。。

nobodyiam avatar May 30 '19 00:05 nobodyiam

我试了下,我们这边是能创建redis.json和Redis.json的,先创redis.json再创Redis.json之后只能用客户端拉redis.json会拿到Redis.json的内容。我们这边是基于1.2.0版本的,数据库是用的pg。

xiedaijin avatar May 30 '19 07:05 xiedaijin

1.3添加了一个这个fix,是否跟这个有关,#1894 ,不过暂时没看到大小写转换,不知道大小写不同的情况是否会受到这个的影响

Adol1111 avatar May 30 '19 16:05 Adol1111

Mysql默认是不区分大小写的,所以apollo是依赖了这个特性做的大小写去重校验,是否是你们的mysql数据库开了区分大小写?

nobodyiam avatar Jun 01 '19 12:06 nobodyiam

我们用的是postgresql,pg默认是区分大小写的,mysql连内容也不区分大小写吗?

Adol1111 avatar Jun 01 '19 14:06 Adol1111

mysql默认是不区分的

nobodyiam avatar Jun 02 '19 07:06 nobodyiam

我觉得这个设计有点问题

  1. 把大小写敏感这么重要的事情直接交给了第三方组件,而不是在代码里处理
  2. 文档里并没有说明这件事
  3. 数据库大小写无所谓(文档没说明),却在代码里有一个大小写不敏感的缓存

建议把这层转换在代码里做掉会好一些,否者稍不注意就会引起问题

Adol1111 avatar Jun 02 '19 14:06 Adol1111