nacos icon indicating copy to clipboard operation
nacos copied to clipboard

在Nacos默认的命名空间public下进行的操作能否将标识信息存储到数据库中

Open wuchubuzai2018 opened this issue 3 years ago • 3 comments

Describe the bug

因为最近正在尝试让Nacos2.1适配下Oracle,未采用社区的jpa的分支,根据自己的想法进行适配一下,在适配Oracle的时候发现,当在public空间下操作的时候,配置上的表不会存储tenant_id(命名空间ID)的值,当数据库为oracle的时候,tenant_id不管是空字符串还是NULL值,当前查询的时候,采用tenant_id=?的形式都无法查询出来,为了避免改动过多配置代码,想着是不是可以在哪里配置上默认值或数据库表中插入一条默认的命名空间信息,然后某些代码就不用改动了。

Expected behavior

是否可以更改当前的tenant_id的判断逻辑为默认public的方式,更改代码中的这种判断为如下代码: 将ExternalStoragePersistServiceImpl类中的这种判断,把默认值空字符更改为默认的public的ID值 String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ? DEFAULT_NAMESPACE_ID : configInfo.getTenant();

Actually behavior 当前public命名空间下新增的配置,tenant_id为空,在oracle数据库上默认查询不出来,原因在于tenant_id的值为空

wuchubuzai2018 avatar Jul 19 '22 13:07 wuchubuzai2018

应该不行,从设计上public是名字,id是空字符串, 如果这样适配了,对于就用户平滑升级有影响。是否能只在oracle插件里面来做这个适配呢?

编程之夏有个相关的课题,可以一起到那边讨论一下。https://github.com/alibaba/nacos/issues/8312

KomachiSion avatar Jul 21 '22 01:07 KomachiSion

应该不行,从设计上public是名字,id是空字符串, 如果这样适配了,对于就用户平滑升级有影响。是否能只在oracle插件里面来做这个适配呢?

编程之夏有个相关的课题,可以一起到那边讨论一下。#8312

你说的对,针对2.1版本,我本地目前简单适配了下Oracle和Postgresql,针对Oracle的tenant_id的为空查询的问题,我继承了ExternalStoragePersistServiceImpl,将大部分方法进行了tenant_id为public的默认值判断。

请问一下,我开发的这段代码是先开源在自己的github仓库中,大家来完善比较好,还是想办法作为一个nacos的特性分支来处理,我看之前别人也提交合并了一个jpa的实现。

wuchubuzai2018 avatar Jul 21 '22 02:07 wuchubuzai2018

先放在自己的仓库中吧, #8312 之后可以看下是否可以作为插件再贡献到nacos-group中。

KomachiSion avatar Jul 25 '22 02:07 KomachiSion

https://github.com/alibaba/nacos/pull/9784

已提交 PR,新增使用开关的方式支持。等待作者合并意见。

xzxiaoshan avatar Dec 30 '22 08:12 xzxiaoshan

应该不行,从设计上public是名字,id是空字符串, 如果这样适配了,对于就用户平滑升级有影响。是否能只在oracle插件里面来做这个适配呢?

编程之夏有个相关的课题,可以一起到那边讨论一下。#8312

新增配置开关方式,默认照旧,对有需求的新系统用户可通过打开开关的方式使用。

xzxiaoshan avatar Jan 03 '23 04:01 xzxiaoshan