Implementasi klien/server

Laporkan masalah Lihat sumber

Sistem Bazel diterapkan sebagai proses server berumur panjang. Hal ini memungkinkannya melakukan banyak pengoptimalan yang tidak mungkin dilakukan dengan implementasi berorientasi batch, seperti penyimpanan 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 berbagi cache paket yang dimuat yang sama, sehingga kueri sangat cepat.

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. Jadi, jika mem-build di beberapa ruang kerja, Anda akan memiliki beberapa basis output, sehingga beberapa proses server Bazel. Beberapa pengguna di workstation yang sama dapat dibuat secara serentak di ruang kerja yang sama karena basis outputnya akan berbeda (ID pengguna yang berbeda).

Jika klien tidak dapat menemukan instance server yang berjalan, instance baru akan dimulai. Hal ini dilakukan dengan memeriksa apakah basis output sudah ada, yang menunjukkan bahwa arsip blaze sudah dibuka. Jika tidak ada basis output yang tidak ada, klien akan mengekstrak file arsip dan menetapkan mtime-nya ke tanggal 9 tahun yang akan datang. Setelah diinstal, klien akan mengonfirmasi bahwa mtime file yang diekstrak memiliki ukuran yang sama dengan tanggal jauh untuk memastikan tidak ada modifikasi penginstalan yang terjadi.

Proses server akan berhenti setelah tidak aktif selama beberapa waktu (3 jam, secara default, yang dapat dimodifikasi menggunakan opsi startup --max_idle_secs). Untuk sebagian besar kasus, ada server yang berjalan tidak terlihat oleh pengguna, tetapi terkadang membantu mengingat hal ini. Misalnya, jika Anda menjalankan skrip yang menjalankan banyak build otomatis di direktori yang berbeda, penting untuk memastikan bahwa Anda tidak mengakumulasi banyak server yang tidak aktif; Anda dapat melakukannya dengan secara eksplisit menghentikannya setelah Anda menyelesaikannya, 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 menyertakan root direktori ruang kerja Anda. Contoh:

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

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

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