クライアントとサーバーの実装

問題を報告する ソースを表示 夜間 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel システムは、有効期間が長いサーバー プロセスとして実装されています。これにより、 バッチ指向の実装では不可能な多くの最適化を BUILD ファイル、依存関係グラフ、その他のメタデータを 1 つの 次世代の基盤となります。これにより、増分ビルドの速度が向上し、 buildquery などの異なるコマンドを使用して、同じキャッシュを クエリが非常に高速になります。各サーバーが処理できるのは最大で 1 つの 一度に呼び出す必要はありません。それ以上の同時呼び出しでは、ブロックまたは フェイル ファスト(--block_for_lock を参照)。

bazel を実行すると、クライアントが実行されます。クライアントがサーバーを見つける 出力ベースに基づきます。出力ベースは ベース ワークスペース ディレクトリのパスとユーザー ID によって決まるため、 出力ベースも複数存在するため Bazel サーバー プロセスを使用します。同じワークステーション上の複数のユーザーで 出力ベースが異なるため、同じワークスペースで同時にビルドできます。 (異なるユーザー ID)。

実行中のサーバー インスタンスが見つからなければ、クライアントは新しいインスタンスを起動します。これは、 出力ベースがすでに存在するかどうかを確認することで行います。 アーカイブはすでに展開されています。出力ベースが存在しない場合は、 クライアントがアーカイブのファイルを解凍し、mtime を 9 年の日付に設定します。 使用できます。インストール後、クライアントは、このアプリケーションの mtime が 解凍したファイルは、インストールの改ざんを防ぐために、はるかに古い日付と等しい 発生します。

サーバー プロセスは、非アクティブ状態(デフォルトでは 3 時間、 これは起動オプション --max_idle_secs で変更できます)。最大のメリット サーバーが稼働中であることは ユーザーにはわかりませんが それを念頭に置くと良い場合がありますたとえば、Python や Curl など、 多数の自動ビルドを実行するアプリの場合、 アイドル状態のサーバーが大量に蓄積しないようにします。これを行うには、 終了したら明示的にシャットダウンするか、 短いタイムアウト期間があります。

Bazel サーバー プロセスの名前が ps x または ps -e f の出力に表示されます。 bazel(dirname) の形式。ここで、dirname はアプリケーションのベース名です。 ディレクトリを作成します。例:

ps -e f
16143 ?        Sl     3:00 bazel(src-johndoe2) -server -Djava.library.path=...

これにより、特定のプロセスがどのサーバー プロセスに属しているかを簡単に 見てみましょう。(ps、Bazel サーバーに対する他のオプションがあるので注意してください)。 Bazel サーバーは java という名前を付けることができます)。 shutdown コマンドを使用します。

bazel を実行すると、クライアントはまずサーバーが適切であることを確認します。 version;そうでない場合、サーバーは停止して新しいサーバーが起動します。これにより 長時間実行されるサーバー プロセスを使用しても、 説明します。