数据存储成熟度,实验性数据存储

https://blueprints.launchpad.net/trove/+spec/experimental-datastores

迄今为止,Trove 并没有明确区分哪些数据存储被认为是“实验性的”,哪些被认为是“适合通用用途的”。在西雅图(Kilo 版本)中期会议上,我们讨论了引入一个清晰的“实验性”数据存储定义,以及如何将数据存储从“实验性”迁移到“适合通用用途”的可能性。

问题描述

当数据存储的代码提交到 Trove 时,并没有明确的指示表明该数据存储是否处于适合通用用途的状态。例如,虽然单个实例的 MySQL 数据存储在某些开发和测试用例中完全可用,但单个实例的(例如)Cassandra 数据存储则用处小得多。支持备份和恢复的数据存储比不支持的数据存储更有用。

作为一个社区,我们希望欢迎各种更改,但并非所有更改集都是一样的。有些包含广泛的功能和测试覆盖,而另一些则比较基础。为了明确我们作为社区认为数据存储的“就绪程度”,我们认为对数据存储进行分类是一个好的改进。

提议的变更

引入数据存储分类

我们建议创建三组数据存储,如下文详细所述。这种分类意味着任何数据存储都可以被认为是(a)“实验性的”,(b)“技术预览”,或(c)“稳定的”。

在每个版本中,从 Kilo 版本开始,每个数据存储都将根据其严格遵守每个分类的要求,被赋予一个分类,该分类将是上述值之一。

这些分类将是包容性的;也就是说,满足“技术预览”要求的数据存储也必须满足“实验性”的所有要求,而满足“稳定”要求的数据存储也必须满足“技术预览”的所有要求。

引入策略分类

类似地,我们还将为每个策略分配一个分类。有些策略可能比其他策略经过更彻底的验证和测试(例如)。纯粹为了说明,mysql_binlog 可能被认为是“稳定的”,但可能有一个不同的复制策略被认为是“实验性的”。

配置

至少,这种更改将影响 trove-guestagent.conf 文件,因为它通过提供实现(manager.py)的路径来列出数据存储注册表。

任何在配置文件(或代码中)调用实现位置的类似位置都必须进行更改。

数据库

这不应该有数据库更改。

公共 API

此更改不会影响公共 API。

公共 API 安全

不适用。

内部 API

没有内部 API 的更改。

Guest Agent

它不会改变 guest agent 的行为,只是更改了代码的位置。

初始分类

作为此更改的一部分,我们建议进行以下分配。

稳定:MySQL 技术预览:Cassandra 和 MongoDB 实验性:所有其他

要求

  • 实验性

    如果数据存储包含以下项目,则可以考虑在实验阶段合并。

    • 实现 Trove API 的基本子集,包括创建和删除

    • guest agent “元素”,允许用户创建 guest agent

    • 支持的操作系统定义

    • 基本单元测试,用于验证 guest agent 的操作和非投票测试套件

    如果提供了实现并包含基本单元测试以验证策略的操作,则该策略将被认为是实验性的。还应提供通过且非投票的测试套件。

  • 技术预览

    如果数据存储满足“实验性”的要求,并且进一步

    请注意,数据存储不必实现所有功能(调整大小、备份、复制、集群等)即可满足此分类。

    还需要为所有功能提供非投票的 gate 测试,以及一种构建 guest 镜像的机制,允许用户行使这些功能。

    通常不会考虑将策略归类为“技术预览”。

  • 稳定

    如果数据存储满足“技术预览”的要求,并且稳定的投票测试套件是 gate 的一部分,则该数据存储将被认为是“稳定的”。

    如果策略满足“实验性”的要求,并且 gate 的一部分也有稳定的投票测试,则该策略将被认为是“稳定的”。

更改详情

计划是编辑所有需要反映一些数据存储和策略位置更改的文件。

备选方案

另一种选择是创建一个网页来列出此信息,而无需实际重新组织代码。

实现

负责人

主要负责人

amrith slicknik

里程碑

kilo-3

工作项

  • 确定每个分类中的数据存储。

  • 确定每个分类中的策略

  • 实施将代码重新定位到适当目录结构的更改

  • 如果合适,实施 trove-integration 中的更改(redstack)

依赖项

测试

必须启动并验证每个数据存储以确保其正常运行。

文档影响

这将对文档产生影响,并将为此打开一个 bug。

参考资料