写点什么

手把手教你成为 TiDB 的 Contributor

  • 2023-04-28
    北京
  • 本文字数:1694 字

    阅读完需:约 6 分钟

原文来源:https://tidb.net/blog/039d338e

一、背景

​ 最近笔者在 asktug 回答问题的时候发现,在 6.5.0 版本出现了几个 显示未启动必要组件 NgMonitoring 的问题贴。经过排查发现,是 ngmonitoring.toml 中的配置文件出现了问题。文件中的 endpoints 应该是以逗号分隔的,但是却写成了以空格分隔的情况,所以才导致了报错。


​ 临时的解决方案就是手动修改配置文件,并 restart prometheus。


(这里借用一下原帖中的截图)



原帖地址:


使用 TiUP 部署的集群显示集群中未启动必要组件 NgMonitoring


v6.5.1 dashboard 异常

二、修复 bug

​ 前面已经发现问题了,先简单分析一下,这里是配置文件出现问题了,那么大概率是需要到 TiUP 的仓库中去修复 bug。所以笔者就到 github 中找到了 TiUP 仓库。


​ tiup 仓库地址:pingcap/tiup: A component manager for TiDB (github.com)


​ 首先笔者需要知道出问题的具体代码在哪,所以笔者先根据文件中的注释进行查找。




​ 这个配置文件与 ngmonitoring.toml 完全吻合,点进去查看,笔者发现这里使用的变量名是PDAddrs



​ 继续使用 PDAddrs 进行查找,看看代码中是如何给 PDAddrs 赋值的。在结果中排除掉路径中带有 template 关键字的文件,发现只有路径为 pkg/cluster/spec/monitoring.go 的文件最符合。



​ 查看代码后发现,NgMonitoringConfig 数据结构正是存储 ngmonitoring.toml 文件中数据的结构,变量 pds 正是出现 bug 的地方了。



​ 笔者梳理了一下这里的逻辑:代码中首先定义了变量 pds 为 string 类型的切片,通过解析 PDServers 变量,把一个或者多个 PDServers 的信息用 append 函数加入到 pds 中,然后把 pds 赋值给 ngcfg。根据这个逻辑,笔者猜测:pds 增加元素之后,数据存储的方式就已经是用空格分隔了。之后,笔者就写了一个简单的 go 的代码,来还原 bug。


import (  "fmt")
func main() { data := [...]string{"one", "two", "three"} fmt.Println(data)
pds := []string{} for i := 0; i < 10; i++ { pds = append(pds, fmt.Sprintf("\"127.0.0.1:4000\"")) } fmt.Println(pds)
}
复制代码


输出结果:



​ 根据结果笔者发现,不管是数组还是切片,在 go 的结果中,都是用空格进行分隔的。这个时候笔者脑袋里又出现一个疑问,如果是因为切片存储数据导致的问题,那之前的 tiup 版本为什么没有同样的问题出现呢?


​ 于是笔者翻了上一个 tiup 版本(1.11.1)的代码:




​ 根据数据结构定义,能看到 1.11.3 版本中的 PDAddrs 是 string 类型的。而且赋值部分的代码有了很大的改变,所以可以认定是部分代码优化重构之后,数据结构发生改变导致的 bug。这样就好解决了,笔者只需要把 pds 中的元素改成逗号分隔并传入到 PDServers 中就行了。所以变更如下:


三、提交代码

​ 首先需要把 TiUP 项目 Fork 到自己的仓库中,点击这个地方:



​ 然后到自己的仓库中,使用在线的 vscode 进行代码编写及代码提交:



​ 代码修改完毕之后,填写好修改的 bug 信息,然后提交并推送:



​ 之后到自己的 TiUP 仓库中,创建一个 pr :



​ 写好相关信息直接提交即可。第一次参与 TiDB 开源项目需要签署 CLA 贡献者许可协议,留意 PR 中机器人的提示就行。


​ 最后就等待反馈,比如有人会告诉你更好的写法,或者是更好的解决方案,或者直接把 PR 合并到了 master。


​ 到这里,一个开源项目的 bug 修复就已经完成了。

四、总结

​ 由于笔者是第一次参与开源项目,整个过程花费了一些时间去摸索。所以在这里记录了自己成为 Contributor 的全过程,给想要为开源项目尽一份力的同学一个参考,为开源社区贡献自己的一份力量。


PS:第一次为 TiDB 开源项目做出自己的贡献还是非常令人激动的。在此感谢原厂大佬在我的 PR 基础上给了代码优化的建议。


作者介绍:caiyfc,来自神州数码钛合金战队,是一支致力于为企业提供分布式数据库 TiDB 整体解决方案的专业技术团队。团队成员拥有丰富的数据库从业背景,全部拥有 TiDB 高级资格证书,并活跃于 TiDB 开源社区,是官方认证合作伙伴。目前已为 10+ 客户提供了专业的 TiDB 交付服务,涵盖金融、证券、物流、电力、政府、零售等重点行业。


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
手把手教你成为 TiDB 的 Contributor_实践案例_TiDB 社区干货传送门_InfoQ写作社区