OpenDAL 社区参与记录
缘起
第一次入门学 Rust 还是去年在微软实习那会儿,同事把他不看的《Rust 编程之道》送给我了,当时在准备秋招也就没多花心思学,实习结束后回学校准备秋招了也就不了了之。后来再次捡起来的时候觉得还是 learning by doing 的方式比较好,想着能不能找个开源项目贡献代码试试,正好在推特上看到 Xuanwo 天天在吆喝 OpenDAL,于是“就决定是你了”。
我相信肯定还有其他 contributor 是通过 Xuanwo 的推特才认识 OpenDAL 进而参与其中的,这对于开源社区吸引新 contributor 来说也是一种成功。
初试
把项目 clone 下来后第一想法是试着用起来,也是选择了其中的 WebDAV Service,在打算连接坚果云 WebDAV 时发现 OpenDAL 并没有提供 username & password 验证的方式,觉得很奇怪所以在 issue 中问了问,发现这是 OpenDAL WebDAV Service 还没完善的地方,Xuanwo 顺势问我要不要尝试给它加上,我想机会这不就来了嘛,于是便接了下来,在 feat: Add username and password support for WebDAV 这个 PR 中完成了 WebDAV username & password 验证。完成这项支持后发现还有个差不多的活儿,给 HttpBackend
加上 Basic 和 Bearer 的授权方式。整体上来说很简单,代码理解起来也并不复杂。
后来
有了前面的两个 PR,我想能不能为 OpenDAL 做更多的事情,于是翻了翻 issue,看到 Tracking issue of services support 中列出了一系列还不支持的存储服务,觉得这应该是一个不错的方向。不同于前面只是在已经实现的 service 中做缝缝补补的工作,新增一个 service 涉及的工作量会更多一些,也能从中学习到 OpenDAL 为了支持不同存储服务所做的一些抽象。于是我便盯上了 Google Drive,恰好已经有一个 issue 与之对应,接着便开始动手。
第一想法是先找找有没有现成的 Google Drive Rust client 可以集成到 OpenDAL 中,我找到了 google-drive3,跑通了 oauth authorization 和 file_path -> id
之后在 issue 中说我打算引入这个依赖从而实现 Google Drive Service for OpenDAL。意外的是这个思路并没有得到支持,对此,Xuanwo 的观点的这样的:希望用原生的 HTTP 请求实现 OpenDAL 的各种操作而不是引入新的 SDK,一方面是上手新 SDK 的成本并不比手写 HTTP 请求低多少,另一方面是避免引入新依赖后的 license 和版本管理问题。嗯,make sense.
接着我并没有马上动手做下去,因为当时毕业论文还没写完,就想着后面再说吧。直到前些天 imWildCat 问我做得怎么样了我才想起来这回事,这时候毕业论文刚提交送审,手上也没其他事情,终于有心思来做这项工作了。趁着五一假期,在 feat(services/gdrive): Add read & write & delete support for GoogleDrive 这个 PR 中初步实现了 Google Drive Service for OpenDAL。接下来还有一些工作要做,比如其他 op 的支持、file_path -> id
的内部缓存等等。
暂时先到这里,后面有新进展再接着更新吧~~~
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!