1、开发环境准备:
要对apache hadoop 源码进行开发,首先需要搭建本地hadoop源码开发环境。本地Linux系统需要安装JDK1.8, maven,ProtocolBuffer2.5.0,git以及一些Native
lib包(libtool cmake zlib1g-dev
pkg-config libssl-dev等),这样才能成功编译hadoop源码。
对于RHEL或CentOS:
执行yum -y install lzo-devel
zlib-devel gcc autoconf automake
libtool openssl-devel fuse-devel
对于Debian 和Ubuntu:
执行apt-get -y install maven
build-essential autoconf automake libtool cmake zlib1g-dev pkg-config
libssl-dev libfuse-dev
2、注册github账号
我们必须在github注册一个账号才能获取最新的apache hadoop源码,,用”git clone
https://github.com/apache/hadoop.git”命令可以clone源码到本地,用git
管理本地代码,及时更新本地源码与github一致。选用自己熟悉IDE进行代码开发,用maven编译源码。
3、注册Apache社区账号
完成第一步和第二步,我们已经可以在本地学**、开发、编译源码了,还需要注册一个apache社区的jira账号参与社区交互。
4、Apache社区jira查看搜索创建
注册完Apache 社区Jira的账号后,我们进入Jira首页(https://issues.apache.org/jira),点击“Project”–>”View
All Projects”可以查看Apache所有的项目。
当我们遇到一个问题,点击“Issues”->”search
for issues”可以在Apache Jira系统内进行全局搜索,搜索时可以过滤项目、版本号等等信息。
点击“Create”可以创新一个新的Jira。在弹出的对话框中需要描述自己遇到的问题,填写jira详细现象、复现步骤等信息;如需要, 在Tag中填写对应标签,
方便别人查找;如果有log文件或patch, 可以添加附件,完成后点窗口右下角的create 完成jira 创建。需要注意的是,在创建一个jira之前最好先搜索社区有没有类似的问题。
当我们新建了一个jira issue,可能会有社区的committer或者其他用户关注到这个issue,讨论jira的价值,或者他们知道已有类似的问题给你参考。
5、Jira修复流程
对于一个待修复的jira,我们需要在本地复现问题,本地修改代码并编译测试验证通过后才可以上传到jira。在相应的jira issue页面,点击”more”->”Attach Files”,将自己修改代码的patch上传,然后点击”submit”,这样jira的”status”就会变为”PatchAvailable”,后台的Jenkins就会定时将你的代码打入源码并编译给出一个report。
第一列的+1和0表示此项通过,如果第一列有-1,说明这一项有错误是需要修改的,例如test4tests表示没有单元测试,whitecpace表示有空白行,checkstyle表示有格式问题。此时我们需要根据jenkins的log提示修改patch再次上传。
当我们提交了patch后,一些committer会关注到,然后可能会迟些时间review你的patch,如果他认为不错,会给你提出意见,叫你修改patch代码。我们需要积极跟他们沟通,积极响应commiter的回复,及时进行patch的更新,这会让committer对你产生好的印象。如果出现了下面类似+1的评语,代表他已经认同你的patch代码,基本上可以被合并进主干代码了。
提交patch有几点需要注意的是:
1.patch一般情况必须是打在git trunk分支最新的代码之上的,否则jenkins合并代码会出错。
2.每行代码的最大长度不能超过80个字符,否则会报checkstyle
error。
3.多余空白行和行末的空白格不能有,否则会报whitespace。
4.patch代码最好需要包含新的对应的测试代码,来证明你的patch的可行性。
5.patch的一般命名规范:jira编号+_提交次序+.patch,如下图所示,
这大概就是向Apache社区提patch的主要流程,并不复杂,但是可能周期会比较长。因为代码可能要经过多次修改,也可能你提的patch一段时间内都没有人关注。
6、Q&A:
1)新人想参与社区,但没有assign jira的权限怎么办?
A:新人没有assign jira的权限,但是同样可以在Apache jira里找到自己感兴趣并且jira的status为open的jira,这意味着这个jira还没人开始做,你可以留言给jira的reporter,或者直接@某个社区的committer,留言类似于“Hi,xxx,mind if I take it over?”,若是reporter不想做的话他会assign给你的。这样这个jira的Assignee就会变为你的名字。
另外还有一个tricky的方法:我们在使用某个开源产品或者学**源码时,多留意会发现一些简单的bug,例如代码注释错误或拼写错误,我们第一次可以提个jira并解决,这样的jira虽然很小,但一般都会被社区接受。接受后实际上你就拥有了这个project jira的assign权限,再遇到自己感兴趣的jira,可以直接点击”assign to me” ,当然了,最好先留言跟reporter沟通。
2)我新发现了一个bug,提了jira并且上传了patch文件,但一直无人问津,怎么办?
A:这种情况也是普遍存在的,因为并不是所有committer都很闲能够及时review你的jira,也有可能他们对你的提的这个jira不感兴趣或者觉得没有什么价值。这时候你需要做的是:
a)在社区搜索有没有类似的已解决的jira,或者直接看最新的源码有没有跟你的修改相关的,如果有的话可能你的jira已经过时了。
b)通过修改润色 jira的summary和description获取关注度。
c)在jira下面的评论区直接@几个committer,主动留言“I need review,Thanks in advance:-)”,联系他们review。
d)实在不行还可以使用apache的reviewboard,指定reviewer。(需要注册)
e)以上都无效的话,继续耐心等待,社区有些jira几个月一年都无人问津的,但说不定哪天被重视了,也需要重新审视patch的价值。
3)还有哪些需要注意的问题吗?
A:自己发现的新bug尽快提jira提交patch,以免被别人先你一步解决了。另外要积极参与社区,和谐交流,多用礼貌用语(Thanks,appreciate,…)。