报错:ERROR 4179 (HY000): locality differs from tablegroup/tenant not allowed

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】3.2.3.2
【问题描述】指定不同的locality创建表组和表,其中一个创建报错

              locality1: F@zone1,F@zone2        成功
              locality2: F,R{ALL_SERVER}@zone1,F@zone2       失败,报错

【复现路径】

      成功语句:
             -- 成功
             create tablegroup tgh 
                 locality='F@zone1,F@zone2' 
                 partition by hash partitions 10; 

             -- 成功
             create table ttgh1(c1 int, c2 int) tablegroup = tgh 
                 locality='F@zone1,F@zone2' 
                 partition by hash(c1) partitions 10;

     失败语句:
             -- 成功
             create tablegroup tgh 
                 locality='F,R{ALL_SERVER}@zone1,F@zone2' 
                 partition by hash partitions 10;

             -- 失败,报错:见话题名称
             create table ttgh1(c1 int, c2 int) tablegroup = tgh 
                 locality='F,R{ALL_SERVER}@zone1,F@zone2' 
                 partition by hash(c1) partitions 10;

【问题现象及影响】
学习使用,好奇报错的原因。

【附件】

对应的租户的locality是什么样的?

看报错是和租户的不一致,可以看看租户配置的,对比一下

对应的租户locality是:
locality=‘FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3

后来改为:
locality=‘FULL{1},READONLY{ALL_SERVER}@zone1, FULL{1}@zone2, FULL{1}@zone3

再后来又改为:
locality=‘FULL{1},READONLY{ALL_SERVER}@zone1, FULL{1},READONLY{ALL_SERVER}@zone2, FULL{1},READONLY{ALL_SERVER}@zone3

测试环境用过:
1-1-1
2-2-2

创建表的时候,如果指定了tablegroup,会校验table和tablegroup的属性是否相同,包括primary zone和locality。如果不相同就会报错。

这个例子里面就是触发了这个防御性报错。不过这里校验逻辑有问题,没有考虑locality中有R{ALL_SERVER}场景。目前看到,只要存在R{ALL_SERVER},就会报错不允许,无论是否真正相同。需要修复一下这个问题

1 个赞