深圳黑客松之旅

Posted by int32bit on December 3, 2016
本文阅读量:

OpenStack黑客松活动是我一直神往的活动,因为这个活动不仅能够让自己在黑客味笼罩的环境中全身心融入bug fix状态,还能有机会与OpenStack各个项目的PTL、Core等大牛面对面交流(平时只能通过IRC或者邮件联系)。

2016年11月30日第五届OpenStack黑客松终于在深圳正式拉开帷幕,我有幸加入这个充满黑客味的神秘活动中。

周二一大早起床乘上早班飞机抵达深圳,匆忙赶往酒店打开Mac准备好Allinone开发环境,并搜罗了一遍launchpad,看看能不能捡到自己能够解决的bug。

周三一大早赶到我的酒店,对,就是我的酒店,值得一提的我的酒店是一个酒店的名称,也是本次活动的地点。开始大家先自我介绍,在这个过程中认识了Nova的Core Alex Xu、Cinder PTL等大牛以及来自华为、英特尔等60多名顶级开发者,还遇到了几个前同事大牛,能够与这些大牛们一起bugfix感到非常兴奋。(图片摘自牛皮糖的微信公众号,侵删)

着手的第一个bug是CI测试在执行卸载数据卷时随机性失败。经过深入源码分析,发现当前版本Nova卸载持久domain和非持久domain数据卷时调用的其实是同一个函数,执行完卸载函数后接下来会不断循环检查domain的xml,若xml中还有待卸载的volume记录,我们就认为卸载失败了,并尝试重新卸载直到超时。若恰好在检查domain xml完成之后,由于竞争条件(race condition),volume异步卸载成功了,则接下来执行的卸载将产生错误。该错误将导致CI测试随机性失败。通过与Nova PTL和Core的讨论,一致认为需要在循环检查过程中捕获卸载失败的ERROR,如果ERROR确定是由于重复卸载导致的,则直接正常返回,避免异常上抛。思路明了后,快速进入coding状态,经历了几次patch set,终于merge到Nova的主分支中。

第二天重点放在VMware driver的datastore调度问题。当前版本创建新虚拟机时只能选择内存空间最大的datastore,这种调度策略过于单一、不够灵活,不能满足异构资源环境下的需求多变。在很多场景中用户可能需要不同的调度策略,比如选择连接主机最多或者已分配资源最少的datastore。选择连接主机最多的调度策略已经有人提交patch,但由于测试未过,一直处于block状态。而基于已分配资源的调度需要依赖于datastore的uncommitted属性,该属性能够通过VMWare SDK获取,但目前oslo.vmware中没有包含该字段,因此我首先提交了一个oslo.vmware patch,增加uncommitted字段。该patch很快就被merged到oslo master分支中。接下来很快实现了基于分配资源最少的调度策略,顺便把之前已经实现尚未合并的基于连接主机最少的调度策略rebase到此次patch中。

时间过得很快,还来不及享受完coding的状态就已经只剩下最后一天,这一天主要集中在一些小的bug fix上面,和Nova Core Alex Xu讨论了关于非管理员查看其它租户虚拟机信息的问题。目前非管理员能够通过policy授权查看所有租户的虚拟机列表,但是不能查看虚拟机的详细信息,我们认为这有点不合理。用户会抱怨说为什么能查看虚拟机列表而不能查看单一虚拟机的详细信息。我由此提交了一个patch,解决思路是先调用list API获取所有虚拟机,然后基于虚拟机的uuid或者name过滤,但大家都认为这样做成本太大了,当虚拟机数目非常多时,数据库和传输都有可能成为瓶颈。之后讨论了关于raw格式磁盘的disk over committed问题。我认为raw和qcow2格式一样,虚拟大小减去实际占用磁盘空间大小作为disk over committed大小,而raw和qcow2格式都可以通过qemu-img工具获取虚拟大小和实际大小,可惜最后并没有达到一致观点,需要进一步讨论。另外上次提交的关于增加nova数据库instances表索引的patch中,其中有一步需要检查索引是否存在,我把这个过程抽象成一个函数并提到oslo.db中,目前已经合并到主分支中。

虽然只有三天的时间,但感觉十分充实,能够让我身心愉悦毫无打扰的情况安安静静地敲看代码,还能一边吃着零食,当然还有merged的成就感。

together

下午由大家一起投票选出了下一届活动的举办地,最终苏州获胜,期待在苏州下一次相遇。

together