Bazel sistemi, uzun ömürlü bir sunucu işlemi olarak uygulanı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ır. Böylece sorgular çok hızlı bir şekilde yapılır. Her sunucu aynı anda en fazla bir çağrıyı işleyebilir. Eşzamanlı olarak yapılan diğer çağrılar engellenir veya hızlı bir şekilde başarısız olur (--block_for_lock
bölümüne bakın).
bazel
dosyasını çalıştırdığınızda istemciyi çalıştırmış olursunuz. İstemci, sunucuyu çıktı tabanına göre bulur. Varsayılan olarak bu tabanın yolu, 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. Bu, blaze arşivinin zaten paketten çıkarıldığı anlamına gelir. 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ükleme işleminde herhangi bir değişiklik yapılmadığından emin olmak için sıkıştırılmış dosyaların mtime
değerlerinin uzak bir 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.