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

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

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

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

หากไคลเอ็นต์ไม่พบอินสแตนซ์ของเซิร์ฟเวอร์ที่ทำงานอยู่ อินสแตนซ์จะเริ่มต้นอินสแตนซ์ใหม่ ซึ่งทำโดยการตรวจสอบว่ามีฐานเอาต์พุตอยู่แล้วหรือไม่ ซึ่งหมายความว่ามีการคลายการแพคข้อมูลที่เก็บ 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=...

วิธีนี้จะช่วยให้ทราบว่ากระบวนการของเซิร์ฟเวอร์ใดเป็นของพื้นที่ทำงานหนึ่งๆ ได้ง่ายขึ้น (โปรดระวังว่ากระบวนการของเซิร์ฟเวอร์ Bazel อาจใช้เพียง java เมื่อมีตัวเลือกอื่นๆ ใน ps) เซิร์ฟเวอร์ Bazel สามารถหยุดได้โดยใช้คำสั่งปิด

เมื่อเรียกใช้ bazel ไคลเอ็นต์จะตรวจสอบว่าเซิร์ฟเวอร์เป็นเวอร์ชันที่เหมาะสมก่อน หากไม่ใช่ เซิร์ฟเวอร์จะหยุดทำงานและเริ่มใหม่ วิธีนี้ช่วยให้มั่นใจได้ว่าการใช้กระบวนการของเซิร์ฟเวอร์ที่ใช้เวลานานจะไม่แทรกแซงการกำหนดเวอร์ชันที่เหมาะสม