第9章 名前空間の自動プルーニングのアーキテクチャー
名前空間の自動プルーニング機能のために、データベーススキーマ内に 2 つの異なるデータベーステーブルが作成されました。1 つは namespaceautoprunepolicy
用、もう 1 つは autoprunetaskstatus
用です。自動プルーンワーカーが、設定されたポリシーを実行します。
名前空間の自動プルーニングポリシーのデータベーステーブル
namespaceautoprunepolicy
データベーステーブルには、単一の名前空間のポリシー設定が保持されます。エントリーは名前空間ごとに 1 つだけ存在しますが、namespace_id
ごとに複数の行がサポートされています。policy
フィールドには、{method: "creation_date", olderThan: "2w"}
や {method: "number_of_tags", numTags: 100}
などのポリシーの詳細が保持されます。
フィールド | 型 | 属性 | 説明 |
---|---|---|---|
| character varying (225) | 一意、インデックス付き | このポリシーの一意の識別子 |
| Integer | 外部キー | ポリシーが属する名前空間 |
| text | JSON | ポリシー設定 |
自動プルーンタスクステータスのデータベーステーブル
autoprunetaskstatus
テーブルには、自動プルーンワーカーによって実行されるタスクが登録されます。タスクは単一の名前空間のコンテキスト内で実行されます。タスクは名前空間ごとに 1 つだけ存在します。
フィールド | 型 | 属性 | 説明 |
---|---|---|---|
| Integer | 外部キー | このタスクが属する名前空間 |
| Big Integer (bigint) | Null 許容型、インデックス付き | ワーカーがこの名前空間のポリシーを最後に実行した時刻 |
| text | Null 許容型 | 最後に実行されたタスクの詳細 |
9.1. 自動プルーンワーカー
次のセクションでは、自動プルーンワーカーに関する情報を詳しく説明します。
9.1.1. 自動プルーンタスクの作成
新しいポリシーが namespaceautoprunepolicy
データベーステーブルに作成されると、autoprunetask
テーブルにも行が作成されます。これは同じトランザクションで実行されます。自動プルーンワーカーは、autoprunetask
テーブル内のエントリーを使用して、ポリシーを実行する必要がある名前空間を特定します。
9.1.2. 自動プルーンワーカーの実行
自動プルーニングワーカーは、設定されたポリシーを実行する非同期ジョブです。そのワークフローは、autoprunetask
テーブルの値に基づいています。タスクが開始すると、次のことが起こります。
- 自動プルーンワーカーが、設定された間隔 (デフォルトは 30 秒) で起動します。
自動プルーンワーカーが、
autoprunetask
から、last_ran_ms
およびFOR UPDATE SKIP LOCKED
が最小または null の行を選択します。-
last_ran_ms
が null である場合、そのタスクは一度も実行されていません。 - 最も長い時間実行されていないタスク、または一度も実行されていないタスクが優先されます。
-
自動プルーンワーカーが、
namespaceautoprunepolicy
テーブルからポリシー設定を取得します。-
ポリシー設定が存在しない場合、この名前空間のエントリーが
autoprunetask
から削除され、手順が直ちに停止します。
-
ポリシー設定が存在しない場合、この名前空間のエントリーが
自動プルーンワーカーが、組織内の全リポジトリーのページ付けされたループを開始します。
-
自動プルーンワーカーは、
policy.method
に基づいて使用するプルーニング方法を決定します。
-
自動プルーンワーカーは、
自動プルーンワーカーが、以前に取得したポリシー設定を使用してプルーニング方法を実行します。
- タグの数に基づくプルーニングの場合: 自動プルーナーワーカーが、現在アクティブなタグの数を作成日順に取得し、設定された数だけ古いタグを削除します。
- 日付に基づくプルーニングの場合: 自動プルーナーワーカーが、指定された期間よりも古いアクティブなタグを取得し、返されたタグがすべて削除されます。
- 自動プルーンワーカーが、削除されたタグの監査ログを追加します。
-
autoprunetask
の行が選択された後に、last_ran_ms
が更新されます。 - 自動プルーンワーカーが終了します。