带着问题读 TiDB 源码:Hive 元数据使用 TiDB 启动报错

本文介绍了在TiDB中遇到的一个关于事务隔离级别设置失败的问题,详细阐述了从问题排查、代码分析到修复的全过程。在5.1.0版本之后,设置SERIALIZABLE隔离级别时遇到错误,通过对比源码发现是由于变量初始化错误导致。修复方案是调整变量获取方式,确保全局变量能够正确复制到会话变量中。

《带着问题读源码系列》- 开篇

在 TiDB 社区活跃较久的伙伴们应该知道,过去我们有被称为 24 章经的《TiDB 源码阅读系列文章》,也有面向 TiKV 的《TiKV 源码解析系列文章》以及 《Deep Dive TiKV 系列文章》。这些系列文章的内容非常深入,能够帮助大家从非常细节的原理入手了解 TiDB 以及 TiKV 的实现方式和基础原理。

然而在 TiDB 社区中活跃的许多伙伴还需要更简单,并且同自己每天工作中使用 TiDB 时遇到的问题更相关的源码阅读文章。本文是《带着问题读源码系列》的第一次尝试,在定位并解决用户所遇到的一个简单问题的过程中,对相关的代码一并进行介绍。希望能够从不同的视角,以不同的问题颗粒度来帮助大家更好的学习 TiDB 和 TiKV 的源码。

AskTUG 上有许多用户日常使用 TiDB 过程中遇到的问题反馈,这些问题都能够成为同本文类似的源码解析素材。如果本文能够为大家创造价值,那么我们一定努力将《带着问题读源码系列》持续建设成同前辈们一样受大家欢迎的源码阅读系列。

问题

近期在 AskTUG 论坛接到用户反馈使用 TiDB 作为 Hive metastore 数据库时设置 SERIALIZABLE 事务隔离级别失败。并且用户根据文档建议进行 SET GLOBAL tidb_skip_isolation_level_check=1 操作后仍然无法按照预期解决问题。考虑到知乎在一年前就已正式上线并一直使用着 4.0.x 系列的 TiDB 作为 Hive metastore 的数据库,而用户按照说明文档操作仍然无法顺利在 TiDB 上部署 Hive metastore 意味着很可能 TiDB 在不同的版本间发生了不兼容的行为改变。接下来就让我们一起从问题的排查入手,学习了解相应功能背后的源代码。

验证流程

在 tiup 的帮助下我们能够非常轻松的启动多个不同版本的 TiDB 对事务隔离级别的行为进行测试和验证。

首先我们先启动 5.0.0 版本的 TiDB 集群准备测试

1.png

接下来我们使用 tiup 提示的连接命令使用 mysql client 连接上测试集群,在设置完 SET GLOBAL tidb_skip_isolation_level_check=1 之后使用 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 验证行为符合预期。说明 TiDB 5.0 系列的行为同 4.0 一致,能够支撑 Hive metastore 的运转。

2.jpeg

接下来我们启动 5.1.0 版本的 TiDB 集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值