Public glance_store’s API refactor

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/glance_store/+spec/public-api-refactor

glance_store 库在几个周期前从 Glance 中分离出来。在此过程中,代码没有进行任何更改,并且对代码的重构被推迟到后续周期,因为主要目标是尽快拥有一个可用的库。

上述情况迫使 Glance 团队发布了一个从未打算公开的 API 的库,因此不建议在其他项目中使用该库。

问题描述

glance_store 公共 API 基于具有不一致签名的函数,这些函数根据传递的参数可能行为相同也可能不同。

当库是 Glance 的一部分时,这些函数运行良好,但现在不再如此。仅举几个例子

  • 有多种方法可以存储数据:add_to_backendstore_add_to_backend

  • 每个存储都需要实现一个 StoreLocation

  • 可以从 scheme (get_store_from_scheme)、URI (get_store_from_uri) 或嗯,从位置 (耸肩) (get_store_from_location) 获取存储类

上述问题可能看起来并不严重,但它们确实会给使用该库的开发者带来不好的体验。

提议的变更

该提案是对此 API 进行重构,并提供更一致、向后兼容和干净的 API。 提议的更改是创建一个能够执行当前函数集操作的单一类,并遵循当前 API 中的一些原则

  • 必须是无状态的

  • 必须能够存储、读取和删除存储中的数据。

作为此更改的一部分,一些函数将被完全弃用

  • verify_default_store 用户不需要此函数,并且从一开始就不应该将其公开。

  • get_store_from_(scheme|uri|location) 用户不应该需要访问存储驱动程序。这些函数从一开始就不应该公开。

现有函数将被标记为已弃用,并将重构为使用新的类。这将有助于我们测试新实现的行为,并验证我们不会破坏向后兼容性。例如,像 get_from_backend 这样的函数将使用新的类,但在此版本的测试期间,此函数的测试不会更改。

重要的是要注意,此规范不建议更改任何驱动程序的代码。它将专注于公共 API。glance_store 未来的增强将负责内部 API,例如驱动程序。

备选方案

  • 一次性重写整个库。我们已经尝试过这样做,但从未通过规范阶段。

  • 什么都不做。这将使我们拥有一个库,该库暴露了不必要的功能,并为用户提供了糟糕的体验。

安全影响

N/A…我的意思是,除了通常的情况(“别搞砸了”)之外,我不知道还有什么。

其他部署者影响

N/A

开发人员影响

这将使开发者更快乐/更满意。

实现

负责人

主要负责人

Flavio Percoco (flaper87)

其他贡献者

有人吗?拜托?

评审人员

核心评审人

有人吗?拜托?

其他审核员

工作项

  • 编写新的类和测试

  • 重写现有的函数

  • 将 Q 版本中要删除的函数标记为已弃用

依赖项

N/A

测试

现有测试不会更改。将编写新的测试,我们将依赖 Glance 的 gate 来确保向后兼容性,直到我们在 glance_store 中改进我们的 gate 机制。

文档影响

将为这个新类编写文档

参考资料

N/A