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

รายงานปัญหา ดูแหล่งที่มา รุ่น Nightly · 7.4 7.3 · 7.2 · 7.1 · 7.0 · 6.5

ระบบ 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=...

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

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