Database级别primary zone含义

    引入 database 级别 primary zone 以后,OB 中在 table 级别,database 级别和 tenant 级别都有了 primary zone,LeaderCoordinator 切主获取 primary zone 的逻辑为table->database->tenant向上继承,即:

    • 首先读取table级别的 primaryzone,如果 table 级别 primary zone不为空,使用 table 级别的 primary zone 作为 leader 的偏好位置。

    • table 级别 primary zone 为空时,向上读取 table 所在 database 的 primary zone,如果 database 级别primary zone 不为空,使用 database的primary zone 作为 leader 的偏好位置。

    • database 级别的 primary zone 为空时,继续向上读取 database 所属 tenant 的 primary zone 作为 leader的偏好位置。

    TableGroup的限制

    属于不同 database 的表,不能放入的同一个 tablegroup 中:即有table T1属于database DB1,table T2属于database DB2,则T1和T2不能被加入到同一个 tablegroup 中。加入这个限制能够更加明确 primary zone 的含义,没有这个限制可能存在不符合预期的切主结果,考虑如下场景:

    • 假设上述T1和T2被加入到同一个 tablegroup Tg1 中;
    • T1没有设置 primary zone,继承 DB1 的 primaryzone z1;
    • T2没有设置 primary zone,继承 DB2 的 primaryzone z2;

    LeaderCoordinator 切主以 partition group 为最小单位,对 T1 和 T2 的 partition 一起切主,但T1和T2各自继承了不同的 primaryzone。为了避免不同 primary zone 产生的歧义,引入了上述限制。