Bazel sistemi uzun ömürlü bir sunucu işlemi olarak uygulanmıştır. Bu sayede, BUILD dosyalarının, bağımlılık graflarının ve bir derlemeden diğerine diğer meta verilerin önbelleğe alınması gibi toplu işleme odaklı bir uygulamayla mümkün olmayan birçok optimizasyon gerçekleştirebilir. Bu, artımlı derlemelerin hızını artırır ve build
ve query
gibi farklı komutların yüklü paketlerin aynı önbelleğini paylaşmasına olanak tanıyarak sorguları çok hızlı hale getirir. Her sunucu aynı anda en fazla bir çağrıyı işleyebilir. Bundan sonraki eşzamanlı çağrılar ise engeller veya başarısız olur (bkz. --block_for_lock
).
bazel
'ü çalıştırdığınızda istemciyi çalıştırmış olursunuz. İstemci, sunucuyu çıktı tabanına göre bulur. Varsayılan olarak bu taban, temel Workspace dizininin yoluna ve kullanıcı kimliğinize göre belirlenir. Bu nedenle, birden fazla Workspace'te derleme yaparsanız birden fazla çıkış tabanı ve dolayısıyla birden fazla Bazel sunucu işlemi olur. Aynı iş istasyonundaki birden fazla kullanıcı, çıkış tabanları farklı olduğu için (farklı kullanıcı kimlikleri) aynı çalışma alanında aynı anda derleme yapabilir.
İstemci, çalışan bir sunucu örneği bulamıyorsa yeni bir sunucu örneği başlatır. Bunu, çıkış tabanının mevcut olup olmadığını kontrol ederek yapar ve blaze arşivinin zaten paketten çıkarılmış olduğunu gösterir. Aksi takdirde, çıkış tabanı mevcut değilse istemci, arşiv dosyalarının sıkıştırmasını açar ve mtime
değerlerini 9 yıl sonrasına ayarlar. Yüklendikten sonra istemci, yüklemede herhangi bir değişiklik yapılmadığından emin olmak için sıkıştırılmış dosyaların mtime
'larının en uzak tarihe eşit olduğunu onaylar.
Sunucu işlemi, bir süre işlem yapılmadıktan sonra durur (varsayılan olarak 3 saattir ve --max_idle_secs
başlangıç seçeneği kullanılarak değiştirilebilir). Çoğu durumda, çalışan bir sunucu kullanıcı tarafından görülmez ancak bazen bunu göz önünde bulundurmak faydalı olabilir. Örneğin, farklı dizinlerde çok sayıda otomatik derleme gerçekleştiren komut dosyaları çalıştırıyorsanız çok fazla boş sunucu biriktirmemeniz önemlidir. Bunu, işiniz bittiğinde sunucuları açıkça kapatarak veya kısa bir zaman aşımı süresi belirleyerek yapabilirsiniz.
Bazel sunucu işleminin adı, ps x
veya ps -e f
'un çıktısında bazel(dirname)
olarak görünür. Burada dirname, çalışma alanı dizininizin kökünü içeren dizinin temel adıdır. Örneğin:
ps -e f
16143 ? Sl 3:00 bazel(src-johndoe2) -server -Djava.library.path=...
Bu sayede, belirli bir çalışma alanına ait sunucu sürecini daha kolay bulabilirsiniz. (ps
için belirli diğer seçeneklerde Bazel sunucu işlemlerinin yalnızca java
olarak adlandırılabileceğine dikkat edin.) Bazel sunucuları shutdown komutu kullanılarak durdurulabilir.
bazel
çalıştırıldığında istemci, önce sunucunun uygun sürümde olup olmadığını kontrol eder. Uygun değilse sunucu durdurulur ve yeni bir sunucu başlatılır. Bu sayede, uzun süre çalışan bir sunucu işleminin kullanılması, doğru sürümlendirmeyi etkilemez.