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

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

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

การเรียกใช้ 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 สามารถหยุดโดยใช้คำสั่ง ปิดการทำงาน

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