私たちのチームには、ローカルでホストされているyumリポジトリがあります。ビルドプロセスが終了すると、Jenkinsは次のことを行います。
- 新しいRPMの作成
- 新しいRPMをyumサーバーのrpmを含むディレクトリに移動します。
- yumリポジトリでcreaterepoを実行します。
上記の手順のいずれかを実行している間に誰かがyum update
走っているとどうなりますか?だけでなく:
- createrepoがストアの更新中にyum updateを実行するとどうなりますか?
- 以前のバージョンのRPMでyum updateを実行しましたが、createrepoが新しいRPMバージョンを削除して追加した場合はどうなりますか?
助けてくれてありがとう。ありがとうございます!
答え1
いいえ、競合状態ではなく、一貫性のないデータによるクライアントエラーです。
リポジトリには、その中に含まれるプロジェクト/パッケージのリストを含むファイルがあります。このファイルは、リポジトリの作成/更新が完了すると作成/更新されます。
クライアントがリポジトリを開いて書き込んでいる間にコンテンツファイルを読み込むと、yum
エラーで終了します。
ファイルが作成されていないがリポジトリの内容を変更すると、データが一貫していない可能性があります。yum
コンテンツファイルのファイル参照を読み取れないため、クライアントは終了します。
問題を最小限に抑えるために、ストレージコピーで作業できます(サイズによって異なります)。
# rm -fr newrepo oldrepo
# rsync -ua repo/ newrepo/
# cd newrepo
(then update this copy or the repository)
# cd ..
# mv repo oldrepo; mv newrepo repo
# rm -fr oldrepo
これにより変換時間が短くなりますが、クライアント側のエラーを完全に防ぐことはできません。