การใช้งานไคลเอ็นต์/เซิร์ฟเวอร์

รายงานปัญหา ดูแหล่งที่มา

ระบบ Bazel เป็นกระบวนการทํางานของเซิร์ฟเวอร์ที่มีมาอย่างยาวนาน ซึ่งช่วยให้สามารถเพิ่มประสิทธิภาพหลายอย่างในการติดตั้งใช้งานแบบกลุ่ม เช่น การแคชไฟล์ BUILD กราฟทรัพยากร Dependency และข้อมูลเมตาอื่นๆ จากบิวด์หนึ่งไปยังบิวด์ถัดไป การดําเนินการนี้จะช่วยปรับปรุงความเร็วของบิลด์ที่เพิ่มขึ้นและช่วยให้คําสั่งต่างๆ เช่น build และ query แชร์แคชเดียวกันของแพ็กเกจที่โหลดได้ ทําให้การค้นหาทํางานเร็วขึ้นมาก

เมื่อเรียกใช้ bazel แสดงว่าคุณเรียกใช้ไคลเอ็นต์ ไคลเอ็นต์จะหาเซิร์ฟเวอร์โดยอ้างอิงฐานเอาต์พุต ซึ่งโดยค่าเริ่มต้นจะกําหนดโดยเส้นทางของไดเรกทอรีพื้นที่ทํางานฐานและรหัสผู้ใช้ ดังนั้นหากคุณสร้างหลายพื้นที่ทํางาน คุณจะมีฐานเอาต์พุตหลายอัน และกระบวนการของเซิร์ฟเวอร์ Bazel หลายรายการ ผู้ใช้หลายคนในเวิร์กสเตชันเดียวกันสามารถสร้างพร้อมกันได้ในพื้นที่ทํางานเดียวกัน เนื่องจากฐานเอาต์พุตจะต่างกัน (UserID ที่แตกต่างกัน)

หากไคลเอ็นต์ไม่พบอินสแตนซ์ของเซิร์ฟเวอร์ที่ทํางานอยู่ ไคลเอ็นต์จะเริ่มต้นอินสแตนซ์ใหม่ ซึ่งทําได้โดยการตรวจสอบว่ามีฐานเอาต์พุตอยู่แล้วหรือไม่ ซึ่งนั่นหมายถึงการแตกแพ็กเกจที่เก็บถาวรของ Blaze แล้ว หรือหากไม่มีฐานเอาต์พุตอยู่ ไคลเอ็นต์จะคลายการบีบอัดไฟล์ที่เก็บถาวร และตั้งค่า mtime เป็นวันที่ 9 ปีในอนาคต เมื่อติดตั้งแล้ว ไคลเอ็นต์จะยืนยันว่า mtime ของไฟล์ที่ไม่ได้แตกไฟล์เท่ากับวันที่ที่อยู่ไกลออกไป เพื่อให้มั่นใจว่าไม่มีการปลอมแปลงการติดตั้ง

กระบวนการของเซิร์ฟเวอร์จะหยุดหลังจากไม่มีการใช้งานเป็นระยะเวลาหนึ่ง (3 ชั่วโมงโดยค่าเริ่มต้น ซึ่งแก้ไขได้โดยใช้ตัวเลือกเริ่มต้นใช้งาน --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 ไคลเอ็นต์จะตรวจสอบก่อนว่าเซิร์ฟเวอร์เป็นเวอร์ชันที่เหมาะสมหรือไม่ ถ้าไม่ถูกต้อง เซิร์ฟเวอร์จะหยุดและเริ่มเซิร์ฟเวอร์ใหม่ ซึ่งช่วยให้มั่นใจได้ว่าการใช้กระบวนการของเซิร์ฟเวอร์ที่ทํางานเป็นเวลานานจะไม่รบกวนการกําหนดเวอร์ชันที่ถูกต้อง