表级别 Locality 修改长时间不成功是否正常?

如上图,提交了一个表级别 Locality 的修改,15分钟了仍然在 INPROGRESS 状态,这种是否正常?是否有默认的取值范围?是否可调整时间区间?

PS:这个测试表中没数据,理论上应该很快。

需要先贴一下租户和表的locality定义分别是什么。
表的locality应该是不能超过租户的locality;
还可以看看__all_rootservice_event_history表中是否有相关执行细节;

在用户租户下查看一下对应的表的id,比如:1100611139453834
select table_id from oceanbase.gv$table where table_name=‘xxx’;

然后在rs leader节点上查看一下rootservice的日志
grep 1100611139453834 rootservice.log*

能提交的语句,期望值总是能执行,不能执行会有提前检查

1099511677778.log (6.9 MB)

和顺老师,我看不太懂日志里的内容,你看看有什么有价值的内容没~

你说的是对的。 大部分规则是会直接检测出来的,但是实际运行还会有其他的问题。

嗯嗯,感觉有可能是bug,等和顺老师看看给个结论的~

rootservice.log.wf:[2022-07-06 10:40:05.233403] WARN [RS] replicate_enough_readonly_replica (ob_rereplication.cpp:641) [30149][196][YB420AD3374A-0005E318BCF9CFFE] [lt=2] [dc=0] fail get next replia for current partition(ret=-4624, partition={table_id:{value:1099511677778, first:1, second:50002}, tablegroup_id:{value:18446744073709551615, first:16777215, second:1099511627775}, partition_id:0, partition_idx:0, schema_partition_cnt:1, schema_replica_cnt:1, schema_full_replica_cnt:1, valid_member_cnt:3, begin:3594, end:3597, can_rereplicate:true, primary:true, quorum:3, has_leader:true, can_balance:true, filter_logonly_count:0, all_pg_idx:16, has_flag_replica:false})
rootservice.log.wf:[2022-07-06 10:40:05.233412] WARN [RS] replicate_enough_readonly_replica (ob_rereplication.cpp:731) [30149][196][YB420AD3374A-0005E318BCF9CFFE] [lt=4] [dc=0] fail to replicate partition, because of machine not enough, reset result_code(ret=-4624, partition={table_id:{value:1099511677778, first:1, second:50002}, tablegroup_id:{value:18446744073709551615, first:16777215, second:1099511627775}, partition_id:0, partition_idx:0, schema_partition_cnt:1, schema_replica_cnt:1, schema_full_replica_cnt:1, valid_member_cnt:3, begin:3594, end:3597, can_rereplicate:true, primary:true, quorum:3, has_leader:true, can_balance:true, filter_logonly_count:0, all_pg_idx:16, has_flag_replica:false})

这里的日志有提示:fail to replicate partition, because of machine not enough
加副本失败,因为机器不够

我这资源是没问题的呀,奇怪,提交的操作是修改为只读副本。

alter table t1 set locality=‘F@zone1,R@zone2,R@zone3’;

这种级别如果直接导致失败的话,应该显式提示结果为 ‘FAILED’ 更符合预期。

老师,我去二次确认了一下,我现在操作的租户的locality如下:

然后我想改为:

alter table t1 set locality=‘F@zone1,R@zone2,R@zone3’;

我看按照文档的说法,F是可以变为R的吧,不知道是否是不允许这样做操作。

  1. 租户的locality和表的locality在 F副本的设置上需要保持一致; R副本可以不一样;
  2. 任何locality 都不支持从3F变成1F。 加减副本的时候,都需要paxos投票,少于多少派,变更是不会成功的;
    3F–>2F会成功,但是2F->1F无法成功, 减完就没有多数派了。

这两个条件最好是由OB自己检测出来,拒绝用户的变更语句,我觉得你可以记录一个BUG;

好的,感谢大神~~