第 9 章 命名空间自动运行架构
对于命名空间 auto-pruning 功能,创建数据库模式中的两个不同的数据库表:一个用于 namespaceautoprunepolicy
,另一个用于 autoprunetaskstatus
。自动修剪 worker 会执行配置策略。
命名空间自动修剪策略数据库表
namespaceautoprunepolicy
数据库表包含单个命名空间的策略配置。每个命名空间只有一个条目,但每个 namespace_id
支持多个行。policy
字段包含策略详情,如 {method: "creation_date", olderThan: "2w"}
或 {method: "number_of_tags", numTags: 100}
。
字段 | 类型 | 属性 | 描述 |
---|---|---|---|
| character varying (225) | unique, indexed | 此策略的唯一标识符 |
| 整数 | 外键 | 策略属于的命名空间 |
| text | JSON | 策略配置 |
自动修剪任务状态数据库表
autoprunetaskstatus
表注册由自动修剪 worker 执行的任务。任务在单个命名空间上下文中执行。每个命名空间只有一个任务。
字段 | 类型 | 属性 | 描述 |
---|---|---|---|
| 整数 | 外键 | 此任务所属的命名空间 |
| 大整数(bigint) | nullable, indexed | worker 为此命名空间执行策略最后一次的时间 |
| text | nullable | 最后一次执行任务的详情 |
9.1. 自动修剪 worker
以下小节详细介绍了自动修剪 worker 的信息。
9.1.1. Auto-prune-task-creation
在 namespaceautoprunepolicy
数据库表中创建新策略时,也会在 autoprunetask
表中创建一个行。这在同一事务中完成。auto-prune worker 使用 autoprunetask
表中的条目来识别它应该执行策略的命名空间。
9.1.2. 自动修剪 worker 执行
auto-pruning worker 是一个执行配置策略的异步作业。其工作流基于 autoprunetask
表中的值。当任务启动时,会出现以下情况:
- 自动修剪 worker 以集合间隔启动,默认值为 30 秒。
auto-prune worker 从
autoprunetask
中选择一个行,其中至少为 null,last_ran_ms
和FOR UPDATE SKIP LOCKED
。-
null
last_ran_ms
表示任务从未运行。 - 尚未运行任务的时间最长,或者尚未完全运行,则优先选择。
-
null
auto-prune worker 从
namespaceautoprunepolicy
表中获取策略配置。-
如果没有策略配置,则会为这个命名空间删除
autoprunetask
的条目,这个过程会立即停止。
-
如果没有策略配置,则会为这个命名空间删除
自动修剪 worker 开始机构下所有存储库的分页循环。
-
自动修剪工作程序根据
policy.method
确定要使用的大量修剪方法。
-
自动修剪工作程序根据
auto-prune worker 使用前面检索到的策略配置来执行修剪方法。
- 使用标签数量进行修剪: auto-pruner worker 获取当前按创建日期排序的活动标签数量,并将旧的标签删除到配置的数量。
- 要按日期进行修剪: auto-pruner worker 获取超过指定时间范围的活跃标签,返回的任何标签都会被删除。
- auto-prune worker 添加已删除标签的审计日志。
-
选择
autoprunetask
行后,last_ran_ms
会被更新。 - 自动修剪 worker 结束。