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,即 arrow
、arrow-flight
和 parquet
之外,我们还维护:
- 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-rs 和 arrow-datafusion 中的“good first issue”。这些问题的范围很小,但仍然是对项目的宝贵贡献,并帮助新的社区成员熟悉我们的开发工作流程和工具。
不太确定从哪个特定问题开始,或者对我们其中一个项目的状态感到好奇?加入 Arrow 邮件列表或 ASF Slack 服务器上的 #arrow-rust 频道。
结束语
最后说明:这里没有任何内容旨在作为规定性建议。作为一个社区,我们已决定这些流程最适合我们项目的当前状态,但随着时间的推移,这可能会发生变化!毕竟,软件工程没有 银弹。