第 9 章 命名空间自动架构


对于命名空间自动运行功能,在数据库架构中创建两个不同的数据库表:一个用于 namespaceautoprunepolicy,另一个用于 autoprunetaskstatus。自动修剪工作程序负责执行配置的策略。

命名空间自动修剪策略数据库表

namespaceautoprunepolicy 数据库表包含单个命名空间的策略配置。每个命名空间只有一个条目,但支持每个 namespace_id 的多行。policy 字段包含策略详情,如 {method: "creation_date", olderThan: "2w"}{method: "number_of_tags", numTags: 100}

表 9.1. namespaceautoprunepolicy 数据库表
字段类型属性描述

uuid

character varying (DU)

唯一的索引

此策略的唯一标识符

namespace_id

整数

外键

策略属于的命名空间

policy

text

JSON

策略配置

自动修剪任务状态数据库表

autoprunetaskstatus 表注册由自动修剪 worker 要执行的任务。任务在单个命名空间上下文中执行。每个命名空间只有一个任务。

表 9.2. autoprunetaskstatus 数据库表
字段类型属性描述

namespace_id

整数

外键

此任务所属的命名空间

last_ran_ms

big Integer (bigint)

nullable, indexed

worker 为此命名空间执行策略的最后时间

status

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_msFOR UPDATE SKIP LOCKED 的行。

    • null last_ran_ms 表示该任务从未运行。
    • 尚未运行的任务在最长时间内运行,或者根本未运行,则会优先考虑。
  • 自动修剪 worker 从 namespaceautoprunepolicy 表中获取策略配置。

    • 如果没有策略配置,则会为这个命名空间删除 autoprunetask 中的条目,这个过程会立即停止。
  • 自动修剪工作程序开始对组织下所有存储库进行分页循环。

    • 自动修剪工作程序根据 policy.method 来确定要使用的大量修剪方法。
  • 自动修剪 worker 使用前面检索到的策略配置执行修剪方法。

    • 若要按标签数量进行修剪:自动修剪 worker 获取按创建日期排序的当前活跃标签数量,并将旧标签删除到配置的数量。
    • 要按日期进行修剪:自动修剪 worker 获取超过指定时间范围的活动标签,返回的任何标签都会被删除。
  • auto-prune worker 添加已删除的标签的审计日志。
  • 选择了 autoprunetask 的行后,last_ran_ms 会被更新。
  • 自动修剪工作程序结束。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.