Implementasi klien/server

Sistem Bazel diimplementasikan sebagai proses server yang tahan lama. Hal ini memungkinkan melakukan banyak pengoptimalan yang tidak mungkin dilakukan dengan implementasi berorientasi batch, seperti menyimpan cache file BUILD, grafik dependensi, dan metadata lainnya dari satu build ke build berikutnya. Tindakan ini akan meningkatkan kecepatan build inkremental, dan memungkinkan perintah yang berbeda, seperti build dan query untuk berbagi cache paket yang dimuat yang sama, sehingga membuat kueri sangat cepat.

Saat menjalankan bazel, Anda menjalankan klien. Klien akan mencari server berdasarkan basis output, yang secara default ditentukan oleh jalur direktori workspace dasar dan ID pengguna Anda. Jadi, 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 di-build secara bersamaan di ruang kerja yang sama karena basis output-nya akan berbeda (userid yang berbeda). Jika klien tidak dapat menemukan instance server yang berjalan, instance baru akan dimulai. Proses server akan berhenti setelah tidak aktif selama 3 jam, secara default, yang dapat dimodifikasi menggunakan opsi memulai --max_idle_secs).

Sebagian besar fakta bahwa ada server yang berjalan tidak terlihat oleh pengguna, tetapi terkadang membantu mempertimbangkan hal ini. Misalnya, jika Anda menjalankan skrip yang melakukan banyak build otomatis di berbagai direktori, penting untuk memastikan Anda tidak mengumpulkan banyak server yang tidak ada aktivitas; Anda dapat melakukannya dengan mematikannya secara eksplisit setelah selesai menggunakannya, 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 direktori utama 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. (Perhatikan bahwa dengan opsi lain untuk ps, proses server Bazel hanya dapat diberi nama java.) Server Bazel dapat dihentikan menggunakan perintah shutdown.

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