从给 Greptime 贡献代码的过程中,我都学到了什么
写在前面:
项目是 : greptimedb 它是一个时序数据库,官方介绍是:
化繁为一的可观测数据库,OpenTelemetry 原生、云原生的可观测数据库,实时处理指标、日志和链路追踪数据 — 在任何规模下提供亚秒级洞察。
我一共给 greptime 提了 51 个 Pull Request 被 merge 了 44 个,在所有贡献者里目前排第 20.
给它贡献的几个契机
- 很早就知道了这个用 Rust 写的时序数据库,当时还是马道长在大连云原生大会上的一个介绍
- 很早就在推特认识了 @sunng87 后面知道了他在里面做 CTO
- tison 在这里工作过一段时间,当时他在推特上发 good first issue
- 去年年底因为觉得 AI 帮忙写 python 总会写一些很难发现的 bug, 也许用 Rust 会好一点,准备学点 Rust
- 他们公司有人给我拉黑了(后来证明是误会)
不过最后一个契机是某一天有人在 LinkedIn 上关注我,我点开一看是 Greptime 的 CEO 正好我想学一学 Rust 便又点开了这个项目。
第一个 PR:
- https://github.com/GreptimeTeam/greptimedb/pull/5274
第一个 PR 是没有成功合并的,我特别喜欢从 bug 入手一个项目,在 bug 中管中窥豹来了解一个项目的全貌, 那时候正好有这么一个 issue, 我去尝试解决了下,发现不太难,但是由于设计的问题最后没有合并,但尝试修第一个 bug 的过程中 我学到了:
- 如何编译这个项目
- 项目需要跑的 lint test 以及我在 makefile 中学到了项目的基本信息
- 项目的 makefile 写的特别好,我学到了常规的
make help
应该怎么写怎么用,给我后面打 TiDB 提的一个 patch 打了基础 - 学习了 greptime 的 CI
想给开源项目贡献并不难,只要项目成功跑起来,就知道如何贡献了。
嗯上面是我说的,于是就有了
第一个成功 merge 的 PR
- https://github.com/GreptimeTeam/greptimedb/pull/5279
在尝试做第一个修复的过程中发现了 make fmt
异常的慢,我不太理解,仔细研究了一下代码。嗯,是 python 我比较熟。
从 40s 提高到了 4s 这个贡献并不难,我们都可以做,甚至在今天,AI agent 直接做的比我还好,我们在 LLM 时代更
需要一个发现问题的眼睛了~
边学 Rust 边贡献
从这 patch 中我学到了一些 rust cargo 生态的一些 check
- https://github.com/GreptimeTeam/greptimedb/pull/5301
因为懂一点点 pg 我又去尝试修复 bug 了但是这个是一个需要巨大工作量的修复(后来我才知道) 这个 patch 也是我给 greptime 贡献的第一行 rust 代码,从这个 PR 里我学会了如何给 greptime 加测试
- https://github.com/GreptimeTeam/greptimedb/pull/5313
在我尝试修复另一个很久以前的 bug 的时候发现的 bug, 还挺有趣的顺便尝试修复了,从中我学到了怎么处理 Rust panic 的一些技巧
- https://github.com/GreptimeTeam/greptimedb/issues/5338
因为 @xuanwo 的 OpenDAL 发现 greptime 用的也是 opendal 就去学习里面的代码了,发现有个 useless import 给删除了
- https://github.com/GreptimeTeam/greptimedb/pull/5349
其中的一条评论很有趣
LGTM. Why does cargo check or clippy is not reporting this?
通过这条评论我又学习了 cargo check 是无法准确的报告一些 useless code 的,那么有没有可以的呢,学到了新的一个 static check 于是有了下面一个 patch
- https://github.com/GreptimeTeam/greptimedb/pull/5352
再之后我想了,既然 rust 的机制已经保证了很多的安全性,那么能不能更安全呢?于是去查到了 rapx 这个项目,这应该是我见到的最牛的几个 static check 项目之一(后面因为 check greptime 我还有机会给这个项目提了个 patch)
因为 rapx 我贡献的几个 patch:
- https://github.com/GreptimeTeam/greptimedb/pull/5383
- https://github.com/GreptimeTeam/greptimedb/pull/5388
- https://github.com/GreptimeTeam/greptimedb/pull/5507
之后是一些常规的修复也水
了一些 patch
三个我比较自豪的 patch 我从中学到了很多 perf 技巧,尤其是之前在 gp 的时候只听同事讲过优化器 fast path 我通过其中的一个 patch 才真正的明白了一点点数据库的优化。 还有一个是算法的重要性,我只是优化了几行代码就能提高 10 倍的性能理解了 O(n) O(...) 不是只有 LeetCode
- https://github.com/GreptimeTeam/greptimedb/pull/5518
- https://github.com/GreptimeTeam/greptimedb/pull/5561
- https://github.com/GreptimeTeam/greptimedb/pull/5497
后面因为学会了一点点 Rust 又去给 OpenDAL 贡献了不少代码,理解了 OpenDAL 后又返回来给 GreptimeDB 贡献了个小的 feat
- https://github.com/GreptimeTeam/greptimedb/pull/5585
再后面就是遇到啥好玩的,发现 greptime 可能有用就顺手贡献一个。
当然最重要的是后面线下认识了一个 greptime 的大哥 @fengjiachun 和在日本加了 @sunng87
- 喝了好多酒
- 发现了很多交集
- 聊了很多往事
喝酒跑步和写代码一样有趣
学到了新的东西,认识了新的朋友,就更有趣了。
cool!
typo: 时许
改了改了~谢谢😊
太棒了,学习了。👍 目前正在沉淀,后面也希望能给开源项目做更多贡献!
非常感谢 @yihong0618 兄的贡献 🌹
太能喝了
另外 PG 、地图方面还有很多一起玩的机会
嗯啊!
成功!
想学就开始学,相当好啊