cinder db purge 工具¶
https://blueprints.launchpad.net/cinder/+spec/database-purge
此规范添加了安全且合理地从 cinder 数据库中清除已删除行的能力,适用于所有相关表。目前,我们保留所有已删除的行,或将它们存档到“影子”表中。我认为随着我们朝着更可升级的版本发展,这将变得难以维护。今天,大多数用户依赖手动数据库查询来删除这些数据,但这容易导致人为错误。
目标是将此功能作为 cinder-manage db 命令的扩展。类似的规范正在提交到所有涉及数据库的各个项目。
问题描述¶
长期运行的 Openstack 安装会保留数据库行数年。迄今为止,没有“机制”可以以编程方式清除已删除的数据。存档行功能不能解决此问题。
用例¶
操作员应该能够清除已删除的行,可能按计划(cronjob)或按需(升级前、维护前)。预期用途是指定删除前的天数,例如“cinder-manage db purge 60”将清除“deleted_at”列大于 60 天前的已删除行
项目优先级¶
低
提议的变更¶
建议在 cinder/cinder/cmd/manage.py 中的 DbCommands 中添加“purge”方法。它将接受一个天数参数,并将其用于 data_sub 匹配,例如:delete from instances where deleted != 0 and deleted_at > data_sub(NOW()…)
备选方案¶
今天,这可以通过 SQL 命令或脚本手动完成。 还有 archive_deleted_rows 方法。但是,这不能满足某些公司可能存在的某些数据销毁策略。
数据模型影响¶
无,所有表目前都包含“deleted_at”列。
REST API 影响¶
无,这将从 cinder-manage 运行
安全影响¶
低,这仅影响已删除的行。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
这有可能提高大型数据库的性能。 长期运行的安装可能会因大型表上的低效操作而受到影响。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要作者和联系人。
Abel Lopez <al592b>
- 主要负责人
<al592b>
- 其他贡献者
<al592b>
工作项¶
在 manage.py db/api.py db/sqlalchemy/api.py 中添加清除功能。添加测试以确认功能。添加功能文档。
依赖项¶
无
测试¶
测试将这样编写。将三行插入测试数据库。两行将为“deleted=1”,一行将为“deleted=0”。其中已删除的行将“deleted_at”为 NOW(),另一行将为“deleted_at”几天前,比如 10 天。测试将使用参数“7”调用新函数,以验证只有在 10 天前删除的行将被清除。其他两行应保持不变。
文档影响¶
需要添加此功能的文档
参考资料¶
这在 openstack-operators 邮件列表和 openstack-developers 邮件列表中进行了讨论,并得到了该组的积极反馈。
http://lists.openstack.org/pipermail/openstack-dev/2014-October/049616.html