क्लाइंट/सर्वर को लागू करना

समस्या की शिकायत करें स्रोत देखें

Bazel सिस्टम, लंबे समय तक चलने वाली सर्वर प्रोसेस के तौर पर लागू किया गया है. इससे कई ऐसे ऑप्टिमाइज़ेशन किए जा सकते हैं जो बैच पर आधारित लागू करने की सुविधा की मदद से नहीं किए जा सकते. जैसे, BUILD फ़ाइलों को कैश मेमोरी में सेव करना, डिपेंडेंसी ग्राफ़, और एक बिल्ड से दूसरे मेटाडेटा को कैश मेमोरी में सेव करना. इससे, इंंक्रीमेंटल बिल्ड की स्पीड बढ़ जाती है. साथ ही, इससे build और query जैसे अलग-अलग निर्देश, लोड किए गए पैकेज की एक ही कैश मेमोरी को शेयर कर पाते हैं. इससे क्वेरी बहुत तेज़ी से होती है. हर सर्वर एक बार में ज़्यादा से ज़्यादा एक अनुरोध को हैंडल कर सकता है. इसके बाद, एक ही समय पर शुरू होने वाले कॉल या तो ब्लॉक हो जाएंगे या फ़ेल हो जाएंगे (--block_for_lock देखें).

bazel चलाने का मतलब है कि क्लाइंट. क्लाइंट को सर्वर, आउटपुट बेस के आधार पर मिलता है. यह डिफ़ॉल्ट रूप से, बेस वर्कस्पेस डायरेक्ट्री और आपके यूज़र आईडी के पाथ से तय होता है. इसलिए, अगर आपने एक से ज़्यादा फ़ाइल फ़ोल्डर बनाए हैं, तो आपके पास कई आउटपुट बेस होंगे. इसलिए, कई Bazel सर्वर प्रोसेस होंगे. एक ही वर्कस्टेशन पर कई उपयोगकर्ता एक साथ एक ही फ़ाइल फ़ोल्डर बना सकते हैं, क्योंकि उनके आउटपुट बेस (अलग-अलग यूज़र आईडी) में अंतर होगा.

अगर क्लाइंट को कोई चालू सर्वर इंस्टेंस नहीं मिलता है, तो वह एक नया सर्वर इंस्टेंस से शुरू करता है. ऐसा करने के लिए यह जांच की जाती है कि आउटपुट बेस पहले से मौजूद है या नहीं. इससे यह पता चलता है कि ब्लेज़ का संग्रह पहले ही अनपैक किया जा चुका है. अगर आउटपुट बेस मौजूद नहीं है, तो क्लाइंट, संग्रह की फ़ाइलों को अनज़िप करता है. साथ ही, mtime के लिए, आने वाले नौ साल के लिए कोई तारीख सेट करता है. इंस्टॉल होने के बाद, क्लाइंट पुष्टि करता है कि अनज़िप की गई फ़ाइलों के mtime, मौजूदा तारीख के बराबर हैं. इससे यह पक्का किया जाता है कि इंस्टॉलेशन से कोई छेड़छाड़ न हुई हो.

सर्वर प्रोसेस बंद होने की अवधि (डिफ़ॉल्ट रूप से, तीन घंटे) के बाद बंद हो जाएगा. इसे स्टार्टअप विकल्प --max_idle_secs का इस्तेमाल करके बदला जा सकता है. इस सुविधा के ज़्यादातर मामलों में, सर्वर चल रहा होता है और उपयोगकर्ता को यह जानकारी नहीं दिखती, लेकिन कभी-कभी इसकी जानकारी को ध्यान में रखना मददगार होता है. उदाहरण के लिए, अगर ऐसी स्क्रिप्ट चलाई जा रही हैं जो अलग-अलग डायरेक्ट्री में बहुत ज़्यादा ऑटोमेटेड बिल्ड करती हैं, तो यह पक्का करना ज़रूरी है कि आप बहुत सारे इस्तेमाल में नहीं सर्वर इकट्ठा न करें. ऐसा करने के लिए, उन्हें बंद कर दें या टाइम आउट की एक छोटी अवधि तय करें.

Bazel सर्वर प्रोसेस का नाम, ps x या ps -e f के आउटपुट में bazel(dirname) के तौर पर दिखता है. इसमें dirname, आपकी फ़ाइल फ़ोल्डर डायरेक्ट्री के रूट को शामिल करने वाली डायरेक्ट्री का बेसनेम है. उदाहरण के लिए:

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

इससे यह पता लगाना आसान हो जाता है कि कोई फ़ाइल फ़ोल्डर किस सर्वर प्रोसेस से जुड़ा है. (ध्यान रखें कि ps के कुछ अन्य विकल्पों के साथ, Bazel सर्वर की प्रोसेस का नाम सिर्फ़ java हो सकता है.) Bazel सर्वर को शटडाउन निर्देश का इस्तेमाल करके रोका जा सकता है.

bazel चलाते समय, क्लाइंट पहले यह जांच करता है कि सर्वर सही वर्शन है या नहीं. अगर ऐसा नहीं होता है, तो सर्वर बंद हो जाता है और नया वर्शन चालू हो जाता है. इससे यह पक्का होता है कि लंबे समय तक चलने वाली सर्वर प्रोसेस के इस्तेमाल से उसके सही वर्शन में कोई रुकावट नहीं होती.