账户清理程序¶
账户清理程序的目的是删除已删除账户的数据。
经销商通过对账户的存储 URL 发出 DELETE 请求来标记账户以供删除。 此操作会将账户数据库及其副本中 account_stat 表的 status 列设置为 DELETED,从而标记账户的数据以供删除。
通常,不提供特定的保留时间或撤销删除功能。 但是,您可以在 account-server.conf 文件的 [account-reaper] 部分中设置 delay_reaping 值,以延迟实际删除数据。 目前,要撤销删除,您必须直接更新账户数据库副本,将状态列设置为空字符串,并将 put_timestamp 更新为大于 delete_timestamp。
注意
编写一个执行此任务的实用程序(最好通过 REST 调用)是开发待办事项列表中的内容。
账户清理程序在每个账户服务器上运行,并偶尔扫描服务器以查找标记为删除的账户数据库。 它仅对服务器是主节点账户启动,以防止多个账户服务器同时执行此操作。 使用多个服务器删除一个账户可能会提高删除速度,但需要协调以避免重复。 数据删除的速度不是一个大问题,而且大型账户也不是经常被删除。
删除账户很简单。 对于每个账户容器,都会删除所有对象,然后删除容器。 失败的删除请求不会停止整个过程,但最终会导致整个过程失败(例如,如果对象删除超时,您将无法删除容器或账户)。 账户清理程序会一直尝试删除账户,直到账户为空,此时 db_replicator 内部的数据库回收过程将删除数据库文件。
持久的错误状态可能会阻止删除对象或容器。 如果发生这种情况,您将在日志中看到一条消息,例如
Account <name> has not been reaped since <date>
您可以使用 account-server.conf 文件的 [account-reaper] 部分中的 reap_warn_after 值来控制何时记录此信息。 默认值为 30 天。