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

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

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

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 सर्वर, shutdown कमांड का इस्तेमाल करके बंद किए जा सकते हैं.

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