关注我微信公众号(大数据从业者)的朋友应该清楚,我断断续续写过一些平时工作或调研过程遇到开源项目的Bug以及如何进行修复的方法。本来这些也不足为奇,毕竟什么开源项目没有Bug呢?谁又敢声称自己的代码无懈可击呢?但是,时间久了,你会发现:能够写代码实现功能模块是程序员最基本的能力要求;而提高代码质量才是程序员必修的内功心法。时至今日,个人感觉最有效的途径之一就是:积极参与Apache开源项目、持续贡献代码到Apache开源项目、社区大佬们给你review代码。另外,Apache开源项目都会对代码风格和代码测试用例有严格要求,这也有助于提高代码质量。
Apache项目简介
Apache项目都归属于ASF(即Apache Software Foundation)。每个Apache 项目都有对应的项目管理委员会(Project Management Committee, PMC)。通常情况,当一个 PMC 提名一位 committer 时,会由PMC成员们投票决定这个contributor是否达到 committer的要求。显而易见,大佬级别排名:PMC > committer > contributor。

前两天收到Apache软件基金会董事Rich Bowen(上图这个老头)群发的邮件,大意就是强调个别Apache项目PMC别忘记自己职责和权限,着重强调PMC Chair不是leader、不能为所欲为(感兴趣的自行到邮件列表吃瓜吧)。

如何贡献Flink代码
Flink官网提供相关文档说明,如下:
https://flink.apache.org/how-to-contribute/overview/

简单总结如下:
1.注册一个JIRA账号,注册地址:
https://issues.sonatype.org/secure/Signup!default.jspa

2.登录JIRA账号
Projects选择Flink,然后通过Create按钮创建一个问题单:

问题单可以选择类型(Bug或Improvement)。然后,Summary主要描述你贡献的代码所修复的问题或者新增的优化功能。强调一点:虽然只有*号为必选项,但还是建议填充所有选项(贡献代码所属的模块、影响的版本、修复的版本)。

创建成功之后,会得到一个问题单号。比如:我之前创建的一个问题单:
https://issues.apache.org/jira/browse/FLINK-31321

3.登录github,fork Flink项目源码
https://github.com/apache/flink
建议基于自己fork的代码新建分支(名称与问题单号相同),如:我的就是FLINK-31321。

然后,通过git clone该分支代码到本地,就可以将自己的代码合入到该分支。建议本地编译验证ok以后再提交,提交时commit message建议为问题单号及问题描述,如:
[FLINK-31321][Deployment/YARN] Yarn-session mode, securityConfiguration supports dynamic configuration
4.登录github,在Flink项目页面创建PR(即New pull request)
提交PR以后,flinkbot会在微软云自动编译测试你的分支,并给出结果:

如果失败,可以跳转过去查看具体失败的日志。修改代码后,重新提交。当然,也可以自己通过@flinkbot run azure让flinkbot多次编译测试。不过,并发数有限制。同时提交PR的人多时,微软云上的编译任务会排队。如图:

5.坐等社区大佬review代码
虽然所有人都可以review你提交的代码。如果感觉review意见合理,可以修改代码重新提交。或者也可以说明理由不进行修改。最终,只有项目PMC或者committer才能决定你的代码是否可以合入Flink项目。如果review ok,通常会允许merge,如图:

备注:LGTM表示look good to me.
查看了这位大佬github主页,任职于阿里巴巴,担任Flink PMC:

6.成功合入Flink项目
如果你的代码成功合入到Flink项目,你所创建的问题单将会分配给你,并被关闭。同时,问题单评论区会标注合入的分支与commit id,如图:

至此,个人贡献代码到Flink项目的整个流程结束。
结束语
虽然FLINK-31321修改代码没几行,内容更是简单至极。不过,最起码迈出向Apache Flink项目贡献代码的第一步。趟过一遍流程,算是入门了,后续再接再厉!




