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つあります。

  1. Pre-commitジョブが30分後にタイムアウトします。これは、ジョブのコンソールログから確認できます。
  2. Pre-commitはタイムアウトしませんが、Pre-commit結果の総待ち時間が30分を超えています。

Pre-commitダッシュボード

Beamコミュニティメトリクスサイトには、ジョブのタイミングトレンドを示すPre-Commitテストダッシュボードがあります。時間ウィンドウ(デフォルトは7日間)を変更したり、特定のテストスイートをクリックして絞り込むことができます。

example pre-commit duration dashboard

トリアージプロセス

  1. 既存の問題を検索する
  2. 必要に応じて新しい問題を作成する:GitHub Issues
  1. 遅延の原因を特定し、問題を特定します。必要に応じて(複数の問題がある場合など)、追加の問題を開きます。
  2. テストの作成者またはPRの作成者など、適切な担当者に課題を割り当てます。

解決策

遅いPre-commitテストを迅速に修正することが重要です。Pre-commitテストポリシーで詳細を確認してください。

考えられる原因と解決策

このセクションでは、Pre-commitの遅延を修正するためのいくつかの出発点を示します。

リソース枯渇

Jupyterノートブックのグラフを確認してください。総実行時間の増加とキューイング時間の増加は一致していますか?もしそうであれば、遅延はこの特定のPre-commitジョブとは無関係の可能性があります。

総実行時間とキューイング時間が一緒に上昇および下降する例(ほとんどの場合):Pre-commit時間のグラフ

Jenkinsマシンはリソースが限られているため、他のジョブがPre-commitのキューイング時間に影響を与える可能性があります。最近他のジョブが遅くなったか、頻度が増加したか、新しいジョブが導入されたかどうかを確認してください。

別の選択肢として、Jenkinsマシンの追加を検討できます。

個々のテストの遅延

Pre-commitジョブが1つ以上のテストのために遅くなることがあります。これが原因かどうかを判断する1つの方法は、個々のテストのタイミングを確認することです。

個々のテストのタイミングを確認する場所

リファクタリングによってテストを高速化できる場合があります。長時間待機するテスト(統合テストなど)は、他のテストと同時に実行するように変更できます。

テストがPre-commitテストの一部として遅すぎる場合は、Pre-commitから削除してPost-commitに配置する必要があります。さらに、削除されたテストでカバーされているコードがPre-commitの単体テストでカバーされていることを確認してください。

統合テストの遅延

統合テストの遅延は、依存サービスが原因である可能性があります。

参考文献