Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nacos-client的NacosConfigService类出现bug,将命名空间namespace当成tenant,去做接口请求,导致参数查询不到希望最新版本的jar包能修正这个bug #2275

Closed
aaroncgt90 opened this issue Jan 8, 2020 · 9 comments

Comments

@aaroncgt90
Copy link

Issue Description

Type: bug report or feature request

Describe what happened (or what feature you want)

Describe what you expected to happen

How to reproduce it (as minimally and precisely as possible)

Tell us your environment

Anything else we need to know?

@KeRan213539
Copy link
Collaborator

额.其实namespace就是tenant,不知道是历史原因还是什么,namespace的表名,相关操作的部分接口名,参数都是叫 tenant, 所以请求的接口应该是对的. 具体是请求什么接口?出什么错?如何重现?

@aaroncgt90
Copy link
Author

aaroncgt90 commented Jan 13, 2020

出现bug的版本在nacos-client1.4的NacosConfigService将namespace封装成这tenant字段去做请求,
请求接口是/nacos/v1/cs/configs,重现结果很简单,直接在浏览器或者配置seata都是报找不到结果,具体请求可以是
http://localhost:8848/nacos/v1/cs/configs?dataId=service.vgroup_mapping.gtkq-system-seata-service-group&group=SEATA_GROUP&namespace=public
(结果返回正常)
http://localhost:8848/nacos/v1/cs/configs?dataId=service.vgroup_mapping.gtkq-system-seata-service-group&group=SEATA_GROUP
(结果返回正常)
http://localhost:8848/nacos/v1/cs/configs?dataId=service.vgroup_mapping.gtkq-system-seata-service-group&group=SEATA_GROUP&tenant=public
(结果返回错误)
而偏偏seata配置文件刚好会读取namespace,刚好又是这个类去封装http接口请求参数,导致接口查询返回结果为config data not exist
目前使用的nacos版本为1.1.3,项目框架使用springcloud,只要seata配置了namespance不为空,就如:public,或者其他,就会出现bug,该bug会影响其他应用做namespace区分,并读取相应的配置文件,希望好好查看一下具体是什么问题

@KeRan213539
Copy link
Collaborator

大概清楚您的意思了:
参数名用 namespace 没问题,, 参数名用 tenant 就返回错误. 而 client使用的参数名是 tenant, 是这样子吗?
然后问题是出在 1.1.4, 而 1.1.3 没问题?

@aaroncgt90
Copy link
Author

aaroncgt90 commented Jan 13, 2020

大概清楚您的意思了:
参数名用 namespace 没问题,, 参数名用 tenant 就返回错误. 而 client使用的参数名是 tenant, 是这样子吗?
然后问题是出在 1.1.4, 而 1.1.3 没问题?

第一个问题:是的,参数名为tenant则返回错误,
第二个问题:不,事实上client1.1.3版本也出现这个问题,我就是试着升级到1.1.4看看相应的问题是否已经解决,结果也是相同的,并没有解决,如果client的jar包不修改的情况下,相应的查询语句就应该修改了,例如
nacos-server就要修改了

@KeRan213539
Copy link
Collaborator

KeRan213539 commented Jan 13, 2020

OK,知道原因了...参数名用 namespace 没问题是因为根本没有这个参数, 正确的参数名就是 tenant.
问题原因在于没有对 public 这个值做处理,放在 public 空间中的配制,在数据库中对应字段的值是空,而没有对 public 做处理, public 被带到查询中了,所以查不到数据. 只要在 接口处加个判断,如果值为 public 就置空就行.
你愿意来修改这个问题吗?

@KeRan213539
Copy link
Collaborator

这样处理就行,在子项目 config 的 com.alibaba.nacos.config.server.controller.ConfigController的 getConfig 方法中

if (NAMESPACE_PUBLIC_KEY.equalsIgnoreCase(namespace)) {
     namespace = "";
}

exportConfig 方法里也会有这个问题

@aaroncgt90
Copy link
Author

aaroncgt90 commented Jan 13, 2020

这样处理就行,在子项目 config 的 com.alibaba.nacos.config.server.controller.ConfigController的 getConfig 方法中

if (NAMESPACE_PUBLIC_KEY.equalsIgnoreCase(namespace)) {
     namespace = "";
}

exportConfig 方法里也会有这个问题

另外这边还由此发现一个问题,命名空间本身在页面就拦截了就不可以设置为重复,结果用命名空间名称去请求,反而查不到数据,需要用命名空间所属id才可以访问,是否能优化这个查询呢?

@KeRan213539
Copy link
Collaborator

这个目前不好处理,命名空间名称是可以重复的,只有ID是唯一的.
我已经提了一个在创建命名空间时可以自定义命名空间ID的PR并且已经合并了,下个版本更新就会有了

@KeRan213539
Copy link
Collaborator

我来改上面的问题吧...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants