Implementasi klien/server

Laporkan masalah Lihat sumber Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Sistem Bazel diterapkan sebagai proses server yang berumur panjang. Hal ini memungkinkannya melakukan banyak pengoptimalan yang tidak dapat dilakukan dengan implementasi berorientasi batch, seperti penyimpanan dalam cache file BUILD, grafik dependensi, dan metadata lainnya dari satu build ke build berikutnya. Hal ini meningkatkan kecepatan build inkremental, dan memungkinkan perintah yang berbeda, seperti build dan query untuk berbagi cache paket yang dimuat yang sama, sehingga kueri menjadi sangat cepat. Setiap server dapat menangani maksimal satu pemanggilan dalam satu waktu; pemanggilan serentak lebih lanjut akan memblokir atau gagal cepat (lihat --block_for_lock).

Saat menjalankan bazel, Anda menjalankan klien. Klien menemukan server berdasarkan basis output, yang secara default ditentukan oleh jalur direktori ruang kerja dasar dan userid Anda, sehingga jika Anda mem-build di beberapa ruang kerja, Anda akan memiliki beberapa basis output dan beberapa proses server Bazel. Beberapa pengguna di workstation yang sama dapat mem-build secara serentak di ruang kerja yang sama karena basis output mereka akan berbeda (userid yang berbeda).

Jika klien tidak dapat menemukan instance server yang berjalan, instance server baru akan dimulai. Hal ini dilakukan dengan memeriksa apakah basis output sudah ada, yang menyiratkan bahwa arsip blaze telah diekstrak. Atau, jika basis output tidak ada, klien akan mengekstrak file arsip dan menetapkan mtime-nya ke tanggal 9 tahun di masa mendatang. Setelah diinstal, klien mengonfirmasi bahwa mtime dari file yang diekstrak sama dengan tanggal yang jauh untuk memastikan tidak ada modifikasi penginstalan yang terjadi.

Proses server akan berhenti setelah tidak aktif selama beberapa waktu (secara default, 3 jam, yang dapat diubah menggunakan opsi pengaktifan --max_idle_secs). Sebagian besar, fakta bahwa ada server yang sedang berjalan tidak terlihat oleh pengguna, tetapi terkadang perlu untuk diingat hal ini. Misalnya, jika Anda menjalankan skrip yang melakukan banyak build otomatis di direktori yang berbeda, penting untuk memastikan bahwa Anda tidak mengumpulkan banyak server yang tidak ada aktivitasnya; Anda dapat melakukannya dengan menutupnya secara eksplisit setelah selesai, atau dengan menentukan periode waktu tunggu yang singkat.

Nama proses server Bazel muncul dalam output ps x atau ps -e f sebagai bazel(dirname), dengan dirname adalah nama dasar direktori yang melingkupi root direktori ruang kerja Anda. Contoh:

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

Hal ini memudahkan untuk mengetahui proses server mana yang termasuk dalam ruang kerja tertentu. (Perlu diperhatikan bahwa dengan opsi lain tertentu untuk ps, proses server Bazel mungkin hanya diberi nama java.) Server Bazel dapat dihentikan menggunakan perintah shutdown.

Saat menjalankan bazel, klien akan memeriksa terlebih dahulu apakah server adalah versi yang sesuai; jika tidak, server akan dihentikan dan server baru akan dimulai. Hal ini memastikan bahwa penggunaan proses server yang berjalan lama tidak mengganggu pembuatan versi yang tepat.