Arrow Rust 实现的新开发工作流程


已发布 2021年5月4日
作者 Ruan Pearce-Authers (ruanpa)

Apache Arrow Rust 社区很高兴地宣布,其向新开发工作流程的迁移现已完成!如果您正在考虑使用 Rust 作为处理列式数据的语言,请继续阅读,了解您的用例如何从我们改进后的项目设置中受益。

最近几个月,社区成员与 Arrow 的 项目管理委员会和其他贡献者密切合作,以扩展 Arrow 实现的可用工作流程集。目标是定义一个新的开发流程,最终:

  • 实现更快的发布节奏,并在适当情况下遵守 SemVer
  • 通过统一的工具鼓励更广泛的社区的最大参与
  • 确保我们继续坚持 The Apache Way 的原则

如果您只是想了解重点,这些讨论的主要结果如下:

  • Rust 项目已移至单独的存储库,位于主 Arrow monorepo 之外
    • arrow-rs 用于 Rust 中的核心 Arrow、Arrow Flight 和 Parquet 实现
    • arrow-datafusion 用于 DataFusion 和 Ballista(有关这些项目的更多信息如下!)
  • Rust 社区将使用 GitHub Issues 来跟踪功能开发和问题,替换 Apache 软件基金会 (ASF) 维护的 Jira 实例
  • DataFusion 和 Ballista 将遵循独立于主 Arrow 发布的新的发布周期

但是,作为一个社区,我们为什么决定更改我们的流程?让我们更深入地了解一下 Rust 实现的需求。

项目结构

Arrow 的 Rust 实现实际上由几个不同的项目组成,或者用 Rust 的术语来说,是 “crates”。除了核心 crates,即 arrowarrow-flightparquet 之外,我们还维护:

  • DataFusion:一个可扩展的内存查询执行引擎,使用 Arrow 作为其格式
  • Ballista:一个分布式计算平台,由 Apache Arrow 和 DataFusion 提供支持

虽然这些项目都密切相关,并且有许多共同的贡献者,但它们各自的生命周期都处于不同的阶段。核心 Arrow crate 作为规范的实现,与其他版本的 Arrow 有严格的兼容性要求,这通过严格的跨语言集成测试进行测试。

然而,另一方面,DataFusion 和 Ballista 仍然是它们自己的新生项目,经历了频繁的向后不兼容的更改。在旧的工作流程中,DataFusion 与 Arrow 同步发布;由于 DataFusion 用户通常需要在比 Arrow 发布更紧的时间安排表上获得新贡献的功能或错误修复,因此我们观察到社区中的许多人只是直接引用我们的 GitHub 存储库,而不是在 crates.io(Rust 的包注册表)上正确版本化的构建。

最终,决定将 Rust crates 分成两个单独的存储库:arrow-rs 用于核心 Arrow 功能,arrow-datafusion 用于 DataFusion 和 Ballista。确定后者的确切发布工作流程仍有待完成,但这使我们能够更好地满足更广泛的 Rust 社区对 crate 版本控制和稳定性的期望。

社区参与

所有 Apache 项目都建立在志愿贡献的基础上;这是 ASF 和更广泛的开源软件开发的核心原则。在 Rust 社区之前的流程中观察到的一个摩擦点是需要在 Arrow 的 Jira 项目中记录问题。此步骤要求潜在的贡献者首先注册一个帐户,然后收到权限授权来管理工单。

为了简化新社区成员的流程,我们决定迁移到 GitHub Issues,以跟踪新的开发工作和需要解决的已知错误,并通过从 Jira 导入各自的工单来引导我们的新存储库。仍然需要创建问题来跟踪非平凡的建议功能和增强功能;这为社区审查创造了机会,并有助于确保在流程的早期阶段尽可能地提供反馈。我们希望这能在组织和潜在贡献者的可访问性之间取得更好的平衡。

参与其中

为了进一步改善新 Arrow 贡献者的入门流程,我们已开始将选定的问题标记为 arrow-rsarrow-datafusion 中的“good first issue”。这些问题的范围很小,但仍然是对项目的宝贵贡献,并帮助新的社区成员熟悉我们的开发工作流程和工具。

不太确定从哪个特定问题开始,或者对我们其中一个项目的状态感到好奇?加入 Arrow 邮件列表ASF Slack 服务器上的 #arrow-rust 频道。

结束语

最后说明:这里没有任何内容旨在作为规定性建议。作为一个社区,我们已决定这些流程最适合我们项目的当前状态,但随着时间的推移,这可能会发生变化!毕竟,软件工程没有 银弹