问题现象
当出现各种同名冲突没拦住的情况,因为 RPM 版本 right_to_die() 抛异常的行为,会导致第一现场无法保留以及可能会导致后续访问到非法内存而 core。
关键诊断信息
触发条件
当触发了类似 BUG(用户租户 mysql 库下创建多张与内部表同名的表,导致建表卡住)或者 租户命名空间内可以创建多个同名(包括为空串)约束 的 BUG 后,会触发 schema 的 rebuild 逻辑并触发 right_to_die() 逻辑。
事后诊断
打印 right_to_die 的 ERROR 级别日志。
问题原因
当触发了类似 BUG(用户租户 mysql 库下创建多张与内部表同名的表,导致建表卡住)或者 租户命名空间内可以创建多个同名(包括为空串)约束 的 BUG 后,会触发 schema 的 rebuild 逻辑并触发 right_to_die() 逻辑。然而由于 right_to_die() 逻辑的 BUG,导致其抛异常释放当前线程后,可能会带来上下文没清理或内存泄漏等风险,进而导致 OBServer 的 schema 刷新异常或者 OBServer 访问到非法内存而 core 掉。该问题触发后会打印 right_to_die 的 ERROR 级别日志。
问题的风险及影响
OBServer core 或者 集群不可用。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响版本
OceanBase 数据库企业版 V2.2.77 GA(oceanbase-2.2.77-20210508211731)及之后版本、V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本、V3.2.3 GA(oceanbase-3.2.3.0-20220418212020)及之后版本、V3.2.4 GA(oceanbase-3.2.4.0-100000072022102819)及之后版。
解决方法
事前:
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V2.2.77 BP15(oceanbase-2.2.77-115000012023010607)、V3.1.2 BP11(oceanbase-3.1.2-111000052023010412)及之后版本、V3.2.3 BP7(oceanbase-3.2.3.3-107000092023011911)、V3.2.4 BP1(oceanbase-3.2.4.1-101000052023010822)。
事中:
联系 OceanBase 数据库技术支持团队,通过修改内部表 + 重启集群恢复。
规避方式
问题版本中不要在任何租户的 oceanbase/information_schema/sys/mysql 库下创建和已有内部表(含系统租户)同名(比较大小写敏感)的用户表/视图/临时表等对象。