如何为TiKV做贡献

如何为TiKV做贡献

TiKV算是Rust界的明星项目了,介绍它的文章很多,这里就不再赘述。但是如果你打算给TiKV做点贡献,还不知道如何开始,也许此文可以帮助你节省点时间。

贡献步骤与需要注意的坑

给TiKV做贡献,可以简单地分为以下几步:

  • 选择一个趁手的问题
  • Fork项目提交PR
  • 等待Review
  • 修改Review请求
  • 合并

选择一个趁手的问题

想要做贡献,当然要选择一个趁手的问题了。什么叫趁手?

  • 自己能力范围可掌控
  • 不至于耽误自己太多时间

如果超出自己的能力范围,那很容易劝退;如果太耽误自己的时间,那也很容易拖延,最终还是劝退。

如果选择趁手的问题?我来教你一个办法。

This Week in Rust网站,然后会看到一个「Call for Participation」的分类,这下面的内容就是有人已经帮你选好的Rust生态中各种开源项目需要人帮忙的各种issues。上面也可以不定期地看到TiKV的各种issues。如下图:


通过This Week in Rust来寻找可贡献的issues更加方便一点,当然你也可以直接去TiKV项目的issues中找,但你的选择面可能就更广更不好确定了。确定了选择范围之后,接下来就要看issues的难度了。

幸好,这些issues上面都标记有难度Label。上图中的issues标记的是D: Easy,这是专门给新手准备的。D: Easy标记的意义:

  • 有人指导
  • 上下文依赖最少
  • 任务量不太多
  • 懂Rust即可参与

所以,不管你Rust水平高低,选择这个应该是最好的。因为TiKV属于一个比较大型的项目了,业务逻辑相当复杂,对于新人来说,最好是选择依赖业务上下文最少的那些issues来解决。

Fork项目提交PR

选择好issues之后,接下来不要马上动手。你首先需要搞清楚问题所在,想清楚如何解决,再动手。但是你可以先fork一个自己的分支。对issues有任何问题,可以通过GitHub提问,每个issues应该有一个主要的负责人,他会指导你。

在修改代码的时候需要注意,TiKV默认是使用Nightly Rust,在项目的根目录下有一个`rust-toolchain`文件,里面指定了相关的版本。在你使用cargo build的时候,如果你本地没有这个版本的Rust,则会自动安装。

找到解决问题的思路,顺利写完代码之后,先别着急Commit代码。需要注意下面三点:

  • 执行cargo fmt,把代码风格统一标准。
  • 执行cargo test,跑一遍单元测试看是否有问题。这里有一个坑需要注意:单元测试是并行跑的,最好把你本地机器ulimit设置一下,ulimit -n 1000。否则测试跑一半可能会报too many files的错误。
  • 使用git commit -s命令来Commit代码,因为TiKV要求遵循DCO(Developer Certification of Origin)。有人因为这个原因修改commit信息就浪费了不少时间。

然后顺利Push代码之后,发起Pull Request要注意,写清楚这次PR的详细信息,这些TiKV的模板有描述,注意查看。

等待Review

提交PR以后,就安心等待Review吧。并不是你刚提交就会马上有人来帮你review,所以不要心急。

Review也是分批次,主要负责人过来review之后,给出一些修改意见,然后也可能会有业务相关的人员过来再次Review,给出其他意见。但这里面需要注意:

  • 只关注这个PR要解决的核心问题
  • 对于一些次要的review请求,可以拒绝

TiKV代码太多,并不是每个review人员都看过完整代码,他们也许只是对他负责的那一块熟悉。当他帮同事负责的那一块review的时候,他并不能分清,哪些代码是已经存在的,哪些是你新加上去的。所以,很可能会给你提出一些修改意见,包含了修复「他们曾经没有发现,review的时候刚发现的代码中早已包含的一些问题」。对于这些问题,你可以选择拒绝,另开issues去处理。 因为这些代码并不是你写的,上下文你也不清楚,如果冒然修改,可能会引起未知的连锁问题,那么你这个PR就休想完成了。

修改Review请求

对于Review之后的修改请求,经过你的过滤和判断之后,选择真正需要修复的代码进行修改即可。这期间还要注意,CI中的测试是否通过。如果没有通过,需要你点击details链接过去看看测试是什么原因出错了。

测试没有通过,会有很多原因:

  • 可能没有排上队,超时了
  • 其他一些诡异的问题,但是和你修改的代码没有关系

对于你理解不了的问题,你可以另外发起一个issues来报告给TiKV团队。然后你就可以重新提交一下代码来触发测试,没准就能过。

合并代码

代码合并之后,你就是一个贡献者了。但是,这可以是结束,也可以是一个好的开始。

你能以这个PR涉及的业务为中心,然后逐渐辐射到与之相关的更多issues,继续去提交贡献,那么肯定会一次比一次娴熟。

小结

现在Rust的职位确实很少,但是Rust又是那么有魅力,几乎有80%的开发者想用Rust。如何是好呢? 给开源项目做贡献就是一个好的方法,在实践中学习Rust。

给TiKV做贡献有什么好处呢?众所周知,TiKV最近从Rust官方招揽了几员猛将,比如brson和nrc。我给TiKV提交的PR是由brson负责的,所以我有幸领略了brson的做事风格:

  • 完全沟通。对于一个很小的问题,都可以很详细的给你回复,不会让你有理解上的盲点。这是远程沟通的典范。
  • 对代码精益求精。从代码的简洁性、可读性、架构上都会考量,并且给出指导意见。
  • 系统性思维。从一个细微的Bug出发,放眼整个项目,从而找出代码结构的不合理性,而不是简单的修复Bug。

给TiKV做贡献让我学到不少东西。除了brson,Tikv团队中其他成员也非常棒,给我的代码也提出了不少修改意见,让我学到了不少技巧。当然,你如果想给其他开源项目做贡献,我想也会有相同的收获的。只不过本文是局限于了TiKV,仅供参考。

更多阅读: 如何为Rust语言做贡献

编辑于 2019-04-14 13:52