CinderXenaMidCycleSummary
目录
简介
在 Xena 虚拟 PTG 上,我们决定继续采用举行两次中期会议的做法,每次会议时长两个小时,分别在 R-18 和 R-9 周进行。
以下是讨论的简要总结。完整细节请参见 etherpad:https://etherpad.opendev.org/p/cinder-xena-mid-cycles
第一次会议:R-18:2021年6月2日
我们通过 BlueJeans 从 UTC 14:00 到 16:00 举行会议。
etherpad:https://etherpad.openstack.org/p/cinder-xena-mid-cycles
录像:https://www.youtube.com/watch?v=bSs5AHz2Iq8
Cinder 项目通用事务
快速讨论以下问题
- 提醒大家我们现在在 OFTC 上使用 #openstack-cinder 和 #openstack-meeting-alt。旧的 Freenode cinder 房间里有 69 个人,但没有人说话,所以看起来大家已经完成了过渡。
- TC 要求团队考虑在他们的项目频道中举行团队会议,而不是使用专用的 #openstack-meeting* 房间。听起来大多数人对此表示同意或没有意见。由于我们已经有一个需要大家注意的变化(我们的下一次会议将在 OFTC 中举行),因此我们现在将继续在 #openstack-meeting-alt 中举行会议,并在下一次会议或之后投票决定是否迁移。
- 另外,请参阅关于此问题的简短邮件线程:http://lists.openstack.org/pipermail/openstack-discuss/2021-June/022865.html
- 发布团队希望确保库在周期早期发布,以便自最近的稳定分支被切分以来积累的变化可以得到锻炼,并且我们可以找出是否破坏了任何人的使用。我们快速审查了未合并的 os-brick 补丁,并选择了两个应该包含在此早期发布中的补丁。Rajat 会在更改合并后更新发布补丁。(我们将等待删除 v2 支持后的 python-cinderclient 早期发布;见下文。)
- 有人提出了一个关于 stable/queens 的 backport 的问题:https://review.opendev.org/c/openstack/cinder/+/760362。问题是它是一个相当大的补丁(大约 1K 行,其中一半是单元测试),并且它不是从 rocky 的干净 backport(因此需要更仔细地审查)。另一方面,该更改仅限于单个驱动程序。普遍的看法是,由于我们已经允许从 victoria(它被引入的地方)backport 到 rocky,因此我们应该保持一致,并允许将其 backport 到 queens。此外,这是一个重要的错误修复,而且人们仍在使用的 queens。
- 事实证明,os-brick 没有标记 'vulnerability:managed',这让我感到惊讶。团队的问题是:有人记得这是有意为之吗,或者只是一个疏忽(因为大多数人直接针对 cinder 报告安全漏洞)?没有人认为这是有意为之,并且团队同意,由 VMT 管理 os-brick 的私有安全漏洞是有意义的,就像目前 cinder 和 cinderclient 一样。
- 由 os-brick 提出的补丁引发了关于 cinder 项目仓库中 tox.ini 中默认 envlist 的讨论:https://review.opendev.org/c/openstack/os-brick/+/793221。我们在这方面并不一致,尽管在某种程度上这无关紧要,因为在场的人都承认从未在本地运行测试时使用默认的 tox 环境。默认环境旨在为新贡献者服务,普遍的共识是,我们希望他们运行 (a) 使用我们支持的最新 python 版本进行单元测试,以及 (b) pep8。
- 我们应该将此声明放在适当的位置。
- 我们可能需要再考虑一下。请参阅 https://review.opendev.org/c/openstack/cinder/+/794661 上的讨论。
Block Storage API v2 移除更新
已经发布了 cinder 和 cinderclient 的补丁,但它们没有得到很多审查。因此,我们将采取采用补丁策略,以便人们对审查特定补丁负责。对于每个补丁,我们需要两个核心审查员(像往常一样),并且最好再有一个审查员(不必是核心)进行合理性检查,因为大多数补丁都很大。
- "从 shell 中移除 v2 支持"
- https://review.opendev.org/c/openstack/python-cinderclient/+/791834
- 核心 1:e0ne(已审查!)
- 核心 2:hemna
- 合理性检查器:eharney
- "移除 v2 类"
- https://review.opendev.org/c/openstack/python-cinderclient/+/792959
- 核心 1:e0ne(已审查!)
- 核心 2:jungleboyj
- 合理性检查器
- rajat:glance DNM 补丁,以便在没有 v2 的情况下运行 glance 与 cinder 存储测试
- "移除 Block Storage API v2"
- https://review.opendev.org/c/openstack/cinder/+/792299
- 核心 1:whoami-rajat
- 核心 2:eharney
- 合理性检查器
- "更新 Block Storage API v2 api-ref"
- https://review.opendev.org/c/openstack/cinder/+/793244
- 核心 1:jungleboyj(已审查!)
- 核心 2:hemna
- 合理性检查器
关于 enable_v3_api 选项怎么办?
我们讨论了如何处理 cinder enable_v3_api 选项。请参阅
- https://review.opendev.org/c/openstack/cinder/+/792299/4/cinder/api/versions.py#101
- https://review.opendev.org/c/openstack/cinder/+/792299/4/cinder/common/config.py#50
一些选项是
- 在 Xena 中弃用,并在 Y 中移除;并在 Xena 中尊重它。这意味着如果它已启用,在运行 cinder-api 的节点上可用的唯一 Block Storage API 调用将是 /versions 请求,该请求将返回一个空的可用的版本列表。不确定这有什么用处。(这是当前补丁中完成的。)
- 在 Xena 中弃用,并在 Y 中移除,但在 Xena 中忽略它(也就是说,即使 cinder.conf 中实际设置为 false,也表现得好像 enable_v3_api=true 一样)。
- 直接在 Xena 中将其移除,因为如果被忽略,就没有理由存在了。另一方面,选项 2 会记录一个弃用消息,该消息可以解释该选项现在是一个空操作,因此对于没有仔细阅读发布说明的人来说,将会有日志消息可用。
我们决定再考虑一下,并在后续补丁中处理它。
cgroupv1 -> cgroupv2 更新
PTG 的后续行动:libcgroup v2.0,支持 cgroup v2,并提供 cinder 使用的 'cgexec' 于 2021 年 5 月 6 日发布。这将允许我们使用当前代码进行最少的更改。但是,它不会在一些发行版中打包,因此我们需要切换到 Plan B。
另一种选择是使用 systemd,我们将定义 drop-in slice 文件来设置 io 限制,然后使用 systemd-run 运行当前使用 libcgroup 的 cgexec 运行的复制/转换命令。Eric 指出,我们可以让 cinder 按需生成文件,就像我们在代码的其他地方所做的那样。这样,我们可以继续使用设置 io 限制值的配置选项,从而保留与当前配置文件向后的兼容性。
仅供参考,以下是当前代码中处理限制的位置
- 选项:https://opendev.org/openstack/cinder/src/commit/d5f0e51879c03654db4bf89564695e01af593350/cinder/volume/driver.py#L116-L123
- 设置限制:https://opendev.org/openstack/cinder/src/commit/d5f0e51879c03654db4bf89564695e01af593350/cinder/volume/driver.py#L560-L576
- 复制卷:https://opendev.org/openstack/cinder/src/commit/d5f0e51879c03654db4bf89564695e01af593350/cinder/volume/volume_utils.py#L665-L669
- 转换镜像:https://opendev.org/openstack/cinder/src/commit/d5f0e51879c03654db4bf89564695e01af593350/cinder/image/image_utils.py#L394-L406
Xena 规格评审
(注意:即使 R-18 中期会议的时间安排是为了让规格提案者在 R-15 结束前的规格冻结之前获得反馈,但消息显然没有传开,我们需要找到更好的沟通方式,既要让提案者知道要参加中期会议,又要让他们意识到,如果当前的时间阻止了参加,他们应该在周期早期参与中期会议安排过程。)
以下是我们讨论的规格摘要。任何没有讨论的规格提案,并且需要比 Gerrit 审查中更多的反馈,都应该联系 Cinder 团队寻求帮助(在每周会议议程中提出主题,在 OFTC #openstack-cinder 频道中询问,或通过 openstack-discuss 邮件列表)。
另外,这里是中期会议录像的链接,以便为以下摘要提供更多上下文:https://www.youtube.com/watch?v=bSs5AHz2Iq8
更新原始卷的可用区
规格提案:https://review.opendev.org/c/openstack/cinder-specs/+/778437
- 团队普遍支持这个想法,但我们需要更多细节。
- 这个规格可以采用更准确的标题,因为它更像是“将与后端相关的所有内容迁移到新的可用区,当后端已移动到新的 AZ 时”,这让读者更好地了解了所解决问题的复杂性。
- 问题是关于正在使用的卷怎么办?这只适用于可用的卷吗?操作员在运行此 cinder-manage 操作之前需要采取哪些步骤?
- 我们需要清楚地描述如何处理其他与 AZ 感知的资源,例如
- 快照
- 备份
- 组
- 需要添加一个文档说明,操作员需要更新包含可用区的任何 volume_types。
支持将任何快照还原到卷
规格提案:https://review.opendev.org/c/openstack/cinder-specs/+/736111
- 团队仍然支持这个想法,但继续强调我们需要一个更彻底的提案,特别是关于
- 供应商需要了解此功能的含义,特别是对于删除
- 提供一个 tempest 测试场景的概述将非常有帮助,因为它将清楚地说明各种应用此操作的预期先决条件和后置条件
- 必须清楚的是,添加此操作后,所有正常的 Cinder API 语义都应该得到尊重
- cinder-tempest-plugin 中的一套测试(可以从概述中实现)将帮助驱动程序维护者评估此更改对其驱动程序的影响
- 关于 'safe_revert_middle_snapshot' 属性出现了一个问题。它是可以为每个驱动程序定义的静态属性,还是取决于其他因素(例如,许可、后端 API 版本等),这些因素必须由驱动程序动态确定?
- 请清楚地解释以下情况会发生什么:
- volume -> snap A -> snap B -> snap C
- 将卷还原到 snap B,然后将数据写入卷
- 这会对 snap C 有什么影响?
- 所有正常的 cinder API 语义都应该仍然有效。例如,
- 如果您将卷 v1 还原到 A,您仍然应该能够删除 A
- 如果您将卷 v2 还原到 A,您应该拥有来自 A 的原始数据(也就是说,它不应该包含 v1 在其还原之后所做的任何更改)
支持迁移已启用复制状态的卷
规格提案:https://review.opendev.org/c/openstack/cinder-specs/+/766130
- 一个关键问题是:旧的副本会发生什么?
- 需要一些文档来告知操作员他们需要向供应商询问哪些关于其特定后端的具体问题。例如,如果复制是异步的,那么在迁移的卷在一段时间内未复制的情况下,就会存在一个时间段。可能还有其他您能想到的问题。
- 规范的末尾有一条评论:“我们可以遵循 multiattach 实现此规范提案”。您能否解释 multiattach 如何帮助您的实现?我们不清楚您在这里的想法是什么,解释将帮助我们更好地理解您的提案。
第二次会议:R-9:2021年8月4日
我们通过 BlueJeans 从 UTC 14:00 到 16:00 举行会议。
etherpad:https://etherpad.openstack.org/p/cinder-xena-mid-cycles
录像:https://www.youtube.com/watch?v=9Aj8FzqFuHM
快照状态重置的健壮性
- 请参阅 https://wiki.openstack.org/wiki/Reset_State_Robustification 上的问题
- 案例电子表格:https://docs.google.com/spreadsheets/d/1cd3auGYk1xlushNA2kwK-nVAEE3p2nloAMNfC0km_3A/edit#gid=106594995
- cinder 重置状态命令:https://paste.opendev.org/show/807889/ <-- 参见 --type 选项
问题在于需要考虑的状态转换非常多,看起来难以全部考虑到。那么该怎么办?
Eric 提到,另一种方法是从 REST API 中移除此功能,并使其仅通过 cinder-manage 访问,这样可能只有了解其影响的人才会使用它。但问题在于,你必须访问 cinder 节点才能运行 cinder-manage,这意味着只有顶层支持人员才能访问它,这可能不是我们想要的。
建议选择一个小的、明确的案例(例如,spec 中的 2),并至少以此开始实施。此外,有些目标状态(特别是以“-ing”结尾的)绝不应该转移到,因此我们也可以阻止这些状态。(这些状态由 cinder 用于标记工作流程的中间过程,你不希望允许某人通过简单地更改数据库中的状态来假装将卷置于所需工作流程的中间过程,因为这样做实际上不会有任何作用。)
行动
TusharTgite:按照上述讨论的思路进行实施
如何处理 enable_v3_api 选项?
这是 xena R-18 中期周期会议的后续讨论,讨论记录在此:https://wiki.openstack.org/wiki/CinderXenaMidCycleSummary#what_about_the_enable_v3_api_option.3F 向 TC 在邮件列表中询问了这个问题:http://lists.openstack.org/pipermail/openstack-discuss/2021-July/023898.html
行动
rosmaita:提交一个移除该选项的补丁:https://review.opendev.org/c/openstack/cinder/+/803533
python-cinderclient 后续步骤
- 短期(即“立即”)
- py36 功能测试中出现大量超时失败。需要将此合并到 master,然后回移植:取消功能测试中的 tempest.lib 超时:https://review.opendev.org/c/openstack/python-cinderclient/+/802966
- victoria:这之前一直停滞不前,但依赖于启用在 centos-8 上构建 devstack(我们可以在此运行 python 3.6)已经合并。因此需要合并此补丁,以便 python-cinderclient-functional-py36 Zuul 作业可以实际测试一些内容:移除 skip_missing_interpreters:https://review.opendev.org/c/openstack/python-cinderclient/+/800635
- wallaby 然后回移植(可能):为 cinderclient.v3 添加缺失的类:https://review.opendev.org/c/openstack/python-cinderclient/+/802904
- 由于配额问题,功能测试偶尔会失败(默认卷配额太低,并且 tempest 用户面临 10 个卷的配额限制,此时测试将失败)。我们讨论了一些选项
- 长期
- 让我们在 PTG 上讨论这个问题(除非有人在这里知道有人现在就渴望在 cinderclient 上工作)
行动
rosmaita:提交一个调整配置的补丁:https://review.opendev.org/c/openstack/python-cinderclient/+/803522
os-brick Xena 发布
这很快就要来了:os-brick Xena 发布在 R-7(8 月 16 日当周)
优先级
- NVMeoF 连接代理
- https://review.opendev.org/c/openstack/os-brick/+/802691
- CI 没有测试该代理。我们需要 tempest 集成,因为这是一项全新的工作范围。
- 讨论:这是 os-brick 在 Xena 中的一个优先级……需要本周的评审,以便 Zohar 和他的团队有时间修改
- LVM 相关 segfaults 补丁
- https://review.opendev.org/c/openstack/os-brick/+/798743
- 讨论:这是 cinder 侧修复的合并,所以只有一个补丁需要评审!
行动
大家:请尽快评审上述两个补丁
sqlalchemy-migrate -> alembic
Stephen Finucane 提交了一堆补丁来推动这个进展。由于工作变动,他可能无法进一步提供帮助。
Luigi 指出 sqlalchemy-migrate 可能已经不受支持。我们可以提出一个 festival 来实现这一点,因为我们迫切需要它。
行动
rosmaita:组织一个围绕此问题的评审 festival 或类似活动
qcow2-v2 支持从各种 linux 发行版中移除怎么办
“移除”可能有点夸张;例如,RHEL 的提议是提供只读支持。
这并不是 cinder 的问题,因为 qcow-v3 一直是 qemu-img 自 QEMU-1.7(2013 年 12 月)以来创建 qcow2 的默认格式,因此对于从 Icehouse(2014 年春季)开始运行 openstack 的任何人来说,cinder 仅创建 qcow2-v3 镜像用于基于 remotefs 的驱动程序。
cinder 的问题是如果操作员管理 qcow2-v2 格式的镜像。
Eric 询问:cinder manage API 是否支持使用 NFS 驱动程序管理 qcow2?他怀疑我们可能没有。所以,如果没有,我们应该继续不支持它!
行动
rosmaita:调查我们是否已经不允许操作员管理 NFS 驱动程序卷,该卷是 qcow 镜像,并报告结果
keystone “trusts” 在 cinder 中的支持
这背后的背景是,有一个 etherpad 收集操作员的痛点,以评估拥有“修复你项目中的一些痛点”社区目标的可行性(也就是说,每个项目修复自己的痛点,而不是试图找到一个全 openstack 的痛点来解决)。此补丁在列表中:https://review.opendev.org/c/openstack/cinder/+/785362
仍然不清楚报告的问题是否需要 trusts。我更愿意使用服务令牌,我们已经支持了它们,并且它们更简单。
行动
rosmaita:在补丁和/或相关 bug 上留下评论,解释这一点,并询问为什么提出的方法不能通过服务令牌来实现的原因
向操作员公开后端信息
这背后的背景是,一个补丁正在使用服务对象的 'disabled_reason' 字段来解释为什么在后端禁用了复制,这似乎是对该字段的非预期使用:https://review.opendev.org/c/openstack/cinder/+/791281/5/cinder/volume/manager.py#636
GirishChilukuri 解释:在复制后端的初始化期间,由于某种原因,任何一个站点都可能宕机,并且我们将服务复制状态设置为禁用。为了向用户提供信息,我们使用 disabled_reason 来解释为什么复制被禁用。我们可以看到“disabled_reason”在故障转移期间用于更新原因,因此我们使用 disabled_reason 字段来更新复制状态。
讨论中出现的一些要点
- 这不适合在服务上使用 disabled_reason
- 在驱动程序中,公开此信息(特别是关于复制状态)是一个常见用例
- 不清楚服务对象是否应该记录此信息
行动
Girish 和他的团队将提出一种公开此信息的方法,并咨询其他驱动程序开发人员(simondodsley 来自 Pure 表达了一些兴趣)
常规项目维护问题
- 我们有一些小的补丁解决了主要是测试基础设施的问题,需要评审和合并,越快越好
- 第三方 CI
- 请求:寻找任何有兴趣帮助监控第三方 CI 的人。这可能包括想法、跟进、管理等。
- 记录的问题
- 似乎没有人跟进在 Gerrit 评论中添加“autogenerated”标签,以便可以在“新的”gerrit 界面中轻松过滤它们:http://lists.openstack.org/pipermail/openstack-discuss/2021-May/022733.html
- 第三方 CI 的可靠性和响应速度似乎比以往任何时候都差
- 需要更严格地执行“受支持”状态
- 需要评审 mypy 补丁
- Eric 不会停止,所以你最好评审这些,以便我们可以将它们合并并开始利用 mypy 将提供的类型检查好处
- https://review.opendev.org/q/project:openstack/cinder+and+topic:mypy+and+status:open+and+not+-workflow+and+is:mergeable
- Xena 功能!
- 本周是 R-9;功能冻结是 R-5
- 我们正在通过 Launchpad blueprints 跟踪它们:https://blueprints.launchpad.net/cinder/xena
- 如果你正在开发一个功能,请确保你有一个 BP 文件来帮助确定评审优先级
- 如果你有一个 BP 文件,但它没有显示在列表中,请联系 rosmaita 以将其包含在内
行动
大家:阅读并采取上述行动!