第 9 章 命名空间自动架构
对于命名空间自动运行功能,在数据库架构中创建两个不同的数据库表:一个用于 namespaceautoprunepolicy
,另一个用于 autoprunetaskstatus
。自动修剪工作程序负责执行配置的策略。
命名空间自动修剪策略数据库表
namespaceautoprunepolicy
数据库表包含单个命名空间的策略配置。每个命名空间只有一个条目,但支持每个 namespace_id
的多行。policy
字段包含策略详情,如 {method: "creation_date", olderThan: "2w"}
或 {method: "number_of_tags", numTags: 100}
。
字段 | 类型 | 属性 | 描述 |
---|---|---|---|
| character varying (DU) | 唯一的索引 | 此策略的唯一标识符 |
| 整数 | 外键 | 策略属于的命名空间 |
| text | JSON | 策略配置 |
自动修剪任务状态数据库表
autoprunetaskstatus
表注册由自动修剪 worker 要执行的任务。任务在单个命名空间上下文中执行。每个命名空间只有一个任务。
字段 | 类型 | 属性 | 描述 |
---|---|---|---|
| 整数 | 外键 | 此任务所属的命名空间 |
| big Integer (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
中选择一个包括 least, 或 null,last_ran_ms
和FOR UPDATE SKIP LOCKED
的行。-
null
last_ran_ms
表示该任务从未运行。 - 尚未运行的任务在最长时间内运行,或者根本未运行,则会优先考虑。
-
null
自动修剪 worker 从
namespaceautoprunepolicy
表中获取策略配置。-
如果没有策略配置,则会为这个命名空间删除
autoprunetask
中的条目,这个过程会立即停止。
-
如果没有策略配置,则会为这个命名空间删除
自动修剪工作程序开始对组织下所有存储库进行分页循环。
-
自动修剪工作程序根据
policy.method
来确定要使用的大量修剪方法。
-
自动修剪工作程序根据
自动修剪 worker 使用前面检索到的策略配置执行修剪方法。
- 若要按标签数量进行修剪:自动修剪 worker 获取按创建日期排序的当前活跃标签数量,并将旧标签删除到配置的数量。
- 要按日期进行修剪:自动修剪 worker 获取超过指定时间范围的活动标签,返回的任何标签都会被删除。
- auto-prune worker 添加已删除的标签的审计日志。
-
选择了
autoprunetask
的行后,last_ran_ms
会被更新。 - 自动修剪工作程序结束。