作为全职开源的一部分,我将自己的工作计划都公开在 Xuanwo's Work。这周刚好 Iteration 1 结束了,让大家看看我这个 Iteration 都做了什么,并且展望一下下个 Iteration 吧。

Iteration 1 的时间是 2021-12-12 ~ 2021-12-26,这个迭代周期里面我印象比较深刻的是这几个事情:

Coding

Databend: build: Install arm64 version of libssl and zlib1g

跟构建系统打架花了不少时间,rust 编译真的是太慢了- -。详情可以参考 修复 Databend aarch64 架构的支持,这里就不展开了。

Databend: proposal: Refactor CI pipleline into stages

Iteration 1 的不少时间花在了跟 CI 打架上,为了以后能够更好的跑 CI,我决定设计一套新的 CI 组织架构,将多个相关联的 Job 放进同一个 Workflow,而不是拆分成多个。这样的好处就是我们可以非常轻松的控制 Job 之间的依赖关系,实现这样的逻辑:

  • Check 成功之后再运行 Build
  • 使用 Build 中构建出来的产物进行集成测试

目前已经有一个可以正常工作的 Demo,欢迎大家来 Review!

Databend: website: Migrate site to docusaurus

Databend 社区一直有个长期需求是把社区的网站改成基于 docusaurus 构建,正好我对 docusaurus 有些经验,于是就把这个活儿给做了。当然后续还有不少的工作,比如:

  • 前端的样式调整
  • 内容的组织
  • 开篇 Blog 等等

这些就由社区的小伙伴来接手了。

Databend: upper&lower support

Databend 深度依赖 arrow2,出于 upstream_first 的考虑,我给 arrow2 贡献了 upper & lower 的支持。其中 lower 的 PR 比较有意思:Added lower:为了方便后续增加各种 utf-8 相关的逻辑,我在维护者的要求下增加了一个泛型函数的实现:

/// utf8_apply will apply `Fn(&str) -> String` to every value in Utf8Array.
pub fn utf8_apply<O: Offset, F: Fn(&str) -> String>(f: F, array: &Utf8Array<O>) -> Utf8Array<O> {
    let iter = array.values_iter().map(f);

    let new = Utf8Array::<O>::from_trusted_len_values_iter(iter);
    new.with_validity(array.validity().cloned())
}

第一次写泛型函数,有点帅。

Discussion

除了代码相关的工作,这个 Iteration 我还参加了不少讨论。自己的一些大的变化都在 Discussions 创建了 Proposal 自然不必多说,我还参与了 Engula 的一些事物。比如:

Engula 是一个新生的社区,这些规则都在从零起步开始建立,对我来说是一个全新的观察者视角,感觉能有更多的新想法。

Learning

这个 Iteration 本来想把 CMU 15-445 刷一遍,但是高涨的热情推动我做了太多的事情少了思考和学习的时间,导致我的学习进度还停留在 Lecture #04: Database Storage II。然后很多感兴趣的问题没有时间研究,下个 Iteration 应该要留出一些时间来。


下个 Iteration 我会推动 CI 的重构合并进入主干,同时把 CMU 15-445 学完,对数据库系统的大概实现有个初步的印象。这样在 2022 年我应该能够参与到更深入的一些贡献里面去,目前我感兴趣的方向是 Databend 的存储层,我期待能够将它重构为更容易扩展和测试的模型,使得贡献者可以方便且自信的实现多种存储的支持。