停止支持驱动版本控制

支持驱动版本控制存在问题;我们当前的方法无法充分解决这个问题,并且会带来维护负担,而这种技术债务的合理性不足。

问题描述

  • 模拟实现存在问题。 当我们为旧版驱动程序创建包装器时,我们会尝试“模拟”任何新方法,以避免它们失败或导致错误。对于简单的驱动程序来说,这可能很容易,但对于复杂的实现来说,则要困难得多,以至于我们不得不更改实现才能支持旧版驱动程序。或者,当这不可能时,只能使用 raise exception.NotImplemented()。 这存在问题,并且可能导致由“模拟”代码和自定义实现引起的意想不到的错误。

  • 可维护性。 通过支持旧版驱动程序,我们被迫维护旧版驱动程序代码、包装器,以及创建我们自己的自定义驱动程序,以便彻底测试旧版本是否可以成功通过所有测试。因此,V8 下划线和所有这些其他依赖对象散布在整个代码库中,必须为每个版本进行维护和清理。这绝非易事。例如,仅为 identity 创建 V9 驱动程序的补丁就有超过 600 行: https://review.openstack.org/#/c/305315/

  • 合理性不足。 我们仅支持一个版本之前的驱动程序版本,这意味着部署者很快无论如何都需要升级他们当前的自定义驱动程序。 实际上,有多少操作员在升级和测试他们的自定义驱动程序的同时,会升级到最新版本?

    此外,我已向操作员邮件列表发送了关于此事的邮件。我没有收到任何操作员的反馈,表明他们正在使用驱动程序版本控制;也没有人反馈说取消支持会对他们产生负面影响。

提议的变更

当驱动程序契约发生变化时,我们会在发行说明和文档中明确记录。因此,为了使客户端升级,他们需要:1. 升级他们的自定义驱动程序以满足新的驱动程序契约。 2. 彻底测试他们的自定义驱动程序与新的代码库的兼容性。

对于 Newton,我们将记录此更改并在 Ocata 中删除对旧版驱动程序的支持。

备选方案

继续当前方法或找到一种新的方法来更好地支持旧版驱动程序。

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

自定义驱动程序在升级时需要满足驱动程序契约。

开发人员影响

实现

负责人

主要负责人

  • 待定 (欢迎志愿者)

工作项

  1. 更新驱动程序和开发人员文档,删除对驱动程序版本控制的支持。

  2. 在发行说明中记录更改。

  3. 计划 Ocata 需要的重构工作。

依赖项

文档影响

只需要进行最少的文档更改;主要是删除文本。

参考资料