1 背景
最近PingCAP发起了培养Commiter的社区活动,如果能集满3000分还将获得开发证书。 自己在做TiDB的云原生管控平台,正苦于对TiDB内部原理及源码缺乏更深刻的认识,因此也可以借这个机会深入学习和研究。
2 题目
分值:200
题目描述:
本地下载 TiDB,TiKV,PD 源代码,改写源码并编译部署以下环境:
* 1 TiDB
* 1 PD
* 3 TiKV
改写后:使得 TiDB 启动事务时,能打印出一个 “hello transaction” 的 日志
输出:一篇文章介绍以上过程
截止时间:本周日 24:00:00(逾期不给分)
作业提交方式:提交至个人 github ,将链接发送给 talent-plan@tidb.io
学习过程
相关学习资料
- 视频:Lesson 01:TiDB 整体架构
- 源码:TiDB 源码阅读
- 部署:TiKV官方二进制部署方式
编译搭建
tidb及pd编译进展比较顺利,下载代码执行make就OK了。但tikv在Mac电脑编译遇到网络及版本问题未编译成功,由于时间有限就直接用官方镜像搭建集群。
# 192.168.31.82 是 Mac电脑的IP
# 启动PD
rm -rf pd1
./bin/pd-server --name=pd1 \
--data-dir=pd1 \
--client-urls="http://${host_ip}:2379" \
--peer-urls="http://${host_ip}:2380" \
--initial-cluster="pd1=http://${host_ip}:2380"
# 启动tikv
docker rm tikv1 tikv2 tikv3 -f #清理脏数据
for i in $(seq 1 3)
do
addr_port="2016"$i
status_port="2018"$i
docker run -it -d --name tikv$i -p $addr_port:$addr_port -p $status_port:$status_port pingcap/tikv:latest --pd-endpoints=http://${host_ip}:2379 --advertise-addr=${host_ip}:${addr_port} --addr=0.0.0.0:${addr_port} --status-addr=0.0.0.0:${status_port}
done
# 启动tidb
./bin/tidb-server --store=tikv --advertise-address={host_ip} --host=0.0.0.0 --path={host_ip}:2379
修改源码
经过一系列的部署调试,终于可以修改源码了。根据上述学习资料的源码阅读初步认识了tidb组件,
从tidb-server/main.go一步步阅读代码至session模块,找到了func (s *session) NewTxn(ctx context.Context)函数。
如下图,最初是1495行添加了logutil.Logger(ctx).Info("hello transaction"),执行insert语句时没有这个日志。
感受
PingCAP社区运营的越来越意思,这次时间投入不足有点仓促,还有很多问题没有来得及解决及深入学习。后续要多投入点时间。 通过这次深入学习了TiDB的源码,感觉PingCAP的技术规范做得还是很不错,值得投入更多时间深度研究。