Pre-commit処理の遅延に関するトラブルシューティングガイド
BeamのPre-commitジョブは、apache/beamに提出された各プルリクエスト(PR)に対してJenkinsビルドマシンで自動的に実行される一連のテストです。Pre-commitとPost-commitの違いについては、テストガイドを参照してください。
高速なPre-commitとは何か?
プルリクエスト(PR)をマージするには、Pre-commitテストに合格する必要があります。これらのテストが遅い場合、Beamの開発プロセスが遅くなります。目標は、Pre-commitジョブの95%を30分以内(成功または失敗)で完了させることです。
技術的には、過去4週間のジョブ実行時間の95パーセンタイルを30分未満にする必要があります。実行時間とは、ジョブがJenkinsキューで費やす時間と、実際に実行する時間の合計です。
遅延の特定
遅延の主な兆候は2つあります。
- Pre-commitジョブが30分後にタイムアウトします。これは、ジョブのコンソールログから確認できます。
- Pre-commitはタイムアウトしませんが、Pre-commit結果の総待ち時間が30分を超えています。
Pre-commitダッシュボード
Beamコミュニティメトリクスサイトには、ジョブのタイミングトレンドを示すPre-Commitテストダッシュボードがあります。時間ウィンドウ(デフォルトは7日間)を変更したり、特定のテストスイートをクリックして絞り込むことができます。
トリアージプロセス
- 既存の問題を検索する
- 必要に応じて新しい問題を作成する:GitHub Issues
- コンポーネント:テスト、その他関連事項
- ラベル:precommit
- 説明にこのページを参照してください。
- 遅延の原因を特定し、問題を特定します。必要に応じて(複数の問題がある場合など)、追加の問題を開きます。
- テストの作成者またはPRの作成者など、適切な担当者に課題を割り当てます。
解決策
遅いPre-commitテストを迅速に修正することが重要です。Pre-commitテストポリシーで詳細を確認してください。
考えられる原因と解決策
このセクションでは、Pre-commitの遅延を修正するためのいくつかの出発点を示します。
リソース枯渇
Jupyterノートブックのグラフを確認してください。総実行時間の増加とキューイング時間の増加は一致していますか?もしそうであれば、遅延はこの特定のPre-commitジョブとは無関係の可能性があります。
総実行時間とキューイング時間が一緒に上昇および下降する例(ほとんどの場合):
Jenkinsマシンはリソースが限られているため、他のジョブがPre-commitのキューイング時間に影響を与える可能性があります。最近他のジョブが遅くなったか、頻度が増加したか、新しいジョブが導入されたかどうかを確認してください。
別の選択肢として、Jenkinsマシンの追加を検討できます。
個々のテストの遅延
Pre-commitジョブが1つ以上のテストのために遅くなることがあります。これが原因かどうかを判断する1つの方法は、個々のテストのタイミングを確認することです。
個々のテストのタイミングを確認する場所
- Pre-commitジョブのJenkinsページにある
Gradle Build Scan
リンクを確認します。このページには、Javaテストの個々のテストタイミングのみが含まれています(2018年8月時点)。 - Pre-commitジョブのJenkinsページにある
テスト結果
リンクを確認します。これはJavaとPythonのテストで使用できるはずです(2018年8月時点)。
リファクタリングによってテストを高速化できる場合があります。長時間待機するテスト(統合テストなど)は、他のテストと同時に実行するように変更できます。
テストがPre-commitテストの一部として遅すぎる場合は、Pre-commitから削除してPost-commitに配置する必要があります。さらに、削除されたテストでカバーされているコードがPre-commitの単体テストでカバーされていることを確認してください。
統合テストの遅延
統合テストの遅延は、依存サービスが原因である可能性があります。
参考文献
最終更新日:2024年10月31日
必要な情報は見つかりましたか?
すべて役に立ち、分かりやすかったですか?変更したい点があれば教えてください!