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

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

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

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

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

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

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

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

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

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