Implementasi klien/server

Laporkan masalah Lihat sumber Per Malam · 7,2 · 7,1 · 7,0 · 6,5 · 6,4

Sistem Bazel diimplementasikan sebagai proses server yang berumur panjang. Hal ini memungkinkan untuk melakukan banyak pengoptimalan yang tidak mungkin dilakukan dengan implementasi berorientasi batch, seperti pembuatan cache file BUILD, grafik dependensi, dan metadata lainnya dari membuatnya lebih maju. Hal ini meningkatkan kecepatan build inkremental, dan memungkinkan perintah yang berbeda, seperti build dan query untuk berbagi cache yang sama paket yang dimuat, membuat kueri sangat cepat.

Saat menjalankan bazel, Anda sedang menjalankan klien. Klien menemukan server berdasarkan basis output, yang secara default ditentukan oleh jalur basis ruang kerja dan id pengguna Anda, jadi jika Anda membuat beberapa ruang kerja, Anda akan memiliki beberapa basis {i>output<i} dan dengan demikian beberapa proses server Bazel. Beberapa pengguna di workstation yang sama dapat membangun secara serentak di Workspace karena basis output-nya akan berbeda (ID pengguna berbeda).

Jika klien tidak dapat menemukan instance server yang berjalan, instance server baru akan dimulai. Ini melakukannya dengan memeriksa apakah basis output sudah ada, yang menyiratkan api arsip telah dibuka. Sebaliknya jika basis {i>output<i} tidak ada, klien mengekstrak file arsip dan menyetel mtime 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 gangguan instalasi yang terjadi.

Proses server akan berhenti setelah tidak aktif selama beberapa waktu (secara {i>default<i} 3 jam, yang dapat diubah menggunakan opsi pengaktifan --max_idle_secs). Untuk sebagian besar fakta bahwa ada server yang sedang berjalan tidak terlihat oleh pengguna, tetapi terkadang ada baiknya untuk diingat hal ini. Misalnya, jika Anda menjalankan skrip yang menjalankan banyak build otomatis di berbagai direktori, penting untuk untuk memastikan bahwa Anda tidak mengumpulkan banyak server yang tidak ada aktivitas; Anda dapat melakukannya dengan secara eksplisit menonaktifkannya ketika Anda sudah menyelesaikannya, atau dengan 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 yang mencakup {i>root <i}dari direktori {i>workspace<i} 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 suatu Workspace. (Ketahuilah bahwa dengan opsi tertentu lainnya untuk ps, server Bazel proses mungkin diberi nama java saja.) Server Bazel dapat dihentikan menggunakan perintah shutdown.

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