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