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

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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

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

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