High Performance TiDB 课程学习计划-week 1

726 阅读2分钟

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

学习过程

相关学习资料

编译搭建

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的技术规范做得还是很不错,值得投入更多时间深度研究。