อภิธานศัพท์เกี่ยวกับโปรโตคอลเหตุการณ์

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

เหตุการณ์ BEP แต่ละประเภทมีความหมายเป็นของตัวเอง ซึ่งมีการบันทึกไว้อย่างคร่าวๆ ใน build_event_stream.proto อภิธานศัพท์ต่อไปนี้จะอธิบายเหตุการณ์แต่ละประเภท

ล้มเลิกแล้ว

Aborted ไม่มีประเภทรหัสที่สอดคล้องกันต่างจากเหตุการณ์อื่นๆ เนื่องจากเหตุการณ์ Aborted จะแทนที่เหตุการณ์ประเภทอื่นๆ เหตุการณ์นี้บ่งชี้ว่าการสร้างสิ้นสุดลงก่อนเวลาอันควรและรหัสเหตุการณ์ที่ปรากฏอยู่ไม่ได้สร้างขึ้นตามปกติ Aborted มี Enum และคำอธิบายที่ใช้งานกับมนุษย์ได้เพื่ออธิบาย สาเหตุที่บิลด์ไม่เสร็จสมบูรณ์

เช่น หากบิลด์กำลังประเมินเป้าหมายเมื่อผู้ใช้ขัดจังหวะ Bazel อยู่ BEP จะมีเหตุการณ์ดังต่อไปนี้

{
  "id": {
    "targetCompleted": {
      "label": "//:foo",
      "configuration": {
        "id": "544e39a7f0abdb3efdd29d675a48bc6a"
      }
    }
  },
  "aborted": {
    "reason": "USER_INTERRUPTED"
  }
}

ActionExecuted

ให้รายละเอียดเกี่ยวกับการดำเนินการของการดำเนินการที่เฉพาะเจาะจงในบิลด์ โดยค่าเริ่มต้น เหตุการณ์นี้จะรวมอยู่ใน BEP สำหรับการดำเนินการที่ล้มเหลวเท่านั้น เพื่อรองรับการระบุสาเหตุที่แท้จริงของความล้มเหลวของบิลด์ ผู้ใช้อาจตั้งค่าแฟล็ก --build_event_publish_all_actions เพื่อรวมเหตุการณ์ ActionExecuted ทั้งหมด

BuildFinished

ระบบจะส่งเหตุการณ์ BuildFinished รายการเดียวหลังจากคำสั่งเสร็จสมบูรณ์และรวมรหัสออกของคำสั่ง เหตุการณ์นี้ให้ข้อมูลที่น่าเชื่อถือเกี่ยวกับความสำเร็จ/ความล้มเหลว

BuildMetadata

มีเนื้อหาที่แยกวิเคราะห์ของแฟล็ก --build_metadata เหตุการณ์นี้มีไว้เพื่อรองรับการผสานรวม Bazel กับเครื่องมืออื่นๆ โดยการต่อท่อข้อมูลภายนอก (เช่น ตัวระบุ)

BuildMetrics

ระบบจะส่งเหตุการณ์ BuildMetrics รายการเดียวเมื่อสิ้นสุดคําสั่งทุกรายการ และจะมีตัวนับ/มาตรวัดที่มีประโยชน์ในการวัดลักษณะการทํางานของเครื่องมือสร้างในระหว่างคําสั่ง เมตริกเหล่านี้ระบุงานที่ทําจริงและจะไม่นับงานที่แคชไว้แล้วซึ่งนํามาใช้ซ้ำ

โปรดทราบว่าระบบอาจไม่ป้อนข้อมูล memory_metrics หากไม่มีการรวบรวมขยะ Java ระหว่างการเรียกใช้คําสั่ง ผู้ใช้อาจตั้งค่าตัวเลือก --memory_profile=/dev/null ซึ่งบังคับให้เครื่องมือรวบรวมขยะทำงานท้ายคำสั่งเพื่อป้อนข้อมูล memory_metrics

{
  "id": {
    "buildMetrics": {}
  },
  "buildMetrics": {
    "actionSummary": {
      "actionsExecuted": "1"
    },
    "memoryMetrics": {},
    "targetMetrics": {
      "targetsLoaded": "9",
      "targetsConfigured": "19"
    },
    "packageMetrics": {
      "packagesLoaded": "5"
    },
    "timingMetrics": {
      "cpuTimeInMs": "1590",
      "wallTimeInMs": "359"
    }
  }
}

BuildStarted

เหตุการณ์แรกในสตรีม BEP BuildStarted จะมีข้อมูลเมตาที่อธิบายคำสั่งก่อนที่จะเริ่มทํางานที่มีความหมาย

BuildToolLogs

ระบบจะส่งเหตุการณ์ BuildToolLogs รายการเดียวที่ท้ายคำสั่ง ซึ่งรวมถึง URI ของไฟล์ที่เครื่องมือสร้างสร้างขึ้น ซึ่งอาจช่วยในการทําความเข้าใจหรือแก้ไขข้อบกพร่องของลักษณะการทํางานของเครื่องมือสร้าง ข้อมูลบางอย่างอาจรวมอยู่ในบรรทัด

{
  "id": {
    "buildToolLogs": {}
  },
  "lastMessage": true,
  "buildToolLogs": {
    "log": [
      {
        "name": "elapsed time",
        "contents": "MC4xMjEwMDA="
      },
      {
        "name": "process stats",
        "contents": "MSBwcm9jZXNzOiAxIGludGVybmFsLg=="
      },
      {
        "name": "command.profile.gz",
        "uri": "file:///tmp/.cache/bazel/_bazel_foo/cde87985ad0bfef34eacae575224b8d1/command.profile.gz"
      }
    ]
  }
}

CommandLine

BEP มีเหตุการณ์ CommandLine หลายรายการที่มีการแสดงอาร์กิวเมนต์บรรทัดคำสั่งทั้งหมด (รวมถึงตัวเลือกและอาร์กิวเมนต์ที่ตีความไม่ได้) เหตุการณ์ CommandLine แต่ละรายการจะมีป้ายกำกับใน StructuredCommandLineId ที่บ่งบอกถึงการแสดงผลที่ส่งผ่าน เหตุการณ์ดังกล่าว 3 รายการจะปรากฏใน BEP ดังนี้

  • "original": บรรทัดคำสั่งที่สร้างขึ้นใหม่เมื่อ Bazel ได้รับจากไคลเอ็นต์ Bazel โดยไม่มีตัวเลือกการเริ่มต้นใช้งานที่มาจากไฟล์ .rc
  • "canonical": บรรทัดคำสั่งที่มีประสิทธิภาพพร้อมไฟล์ .rc ที่ขยายและนโยบายการเรียกใช้
  • "tool": ดึงข้อมูลมาจากตัวเลือก --experimental_tool_command_line ซึ่งมีประโยชน์ในการส่งบรรทัดคำสั่งของเครื่องมือที่รวม Bazel ผ่าน BEP ซึ่งอาจเป็นข้อความบัฟเฟอร์โปรโตคอลไบนารี CommandLine ที่เข้ารหัสแบบ Base64 ซึ่งใช้โดยตรง หรือสตริงที่ถูกแยกวิเคราะห์แต่ไม่ได้ตีความ (เนื่องจากตัวเลือกของเครื่องมืออาจแตกต่างจาก Bazel)

การกำหนดค่า

ระบบจะส่งเหตุการณ์ Configuration สําหรับ configuration ทั้งหมดที่ใช้ในเป้าหมายระดับบนสุดในบิลด์ ต้องมีเหตุการณ์การกําหนดค่าอย่างน้อย 1 รายการเสมอ id จะถูกนําไปใช้ซ้ำโดยรหัสเหตุการณ์ TargetConfigured และ TargetComplete และจําเป็นต่อการแยกแยะเหตุการณ์เหล่านั้นในบิลด์การกําหนดค่าหลายรายการ

{
  "id": {
    "configuration": {
      "id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
    }
  },
  "configuration": {
    "mnemonic": "k8-fastbuild",
    "platformName": "k8",
    "cpu": "k8",
    "makeVariable": {
      "COMPILATION_MODE": "fastbuild",
      "TARGET_CPU": "k8",
      "GENDIR": "bazel-out/k8-fastbuild/bin",
      "BINDIR": "bazel-out/k8-fastbuild/bin"
    }
  }
}

ConvenienceSymlinksIdentified

ทดลอง หากตั้งค่าตัวเลือก --experimental_convenience_symlinks_bep_event ระบบจะสร้างเหตุการณ์ ConvenienceSymlinksIdentified รายการเดียวจากคำสั่ง build เพื่อระบุวิธีจัดการลิงก์สัญลักษณ์ในพื้นที่ทำงาน ซึ่งจะเปิดใช้เครื่องมือการสร้างที่เรียกใช้ Bazel จากระยะไกล จากนั้นจัดเรียงเวิร์กช็อปในเครื่องราวกับว่ามีการเรียกใช้ Bazel ในเครื่อง

{
  "id": {
    "convenienceSymlinksIdentified":{}
  },
  "convenienceSymlinksIdentified": {
    "convenienceSymlinks": [
      {
        "path": "bazel-bin",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out/k8-fastbuild/bin"
      },
      {
        "path": "bazel-genfiles",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out/k8-fastbuild/genfiles"
      },
      {
        "path": "bazel-out",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out"
      }
    ]
  }
}

ดึงข้อมูล

บ่งบอกว่ามีการดำเนินการดึงข้อมูลเกิดขึ้นเป็นส่วนหนึ่งของการเรียกใช้คำสั่ง เหตุการณ์นี้ต่างจากเหตุการณ์อื่นๆ ตรงที่เหตุการณ์ดังกล่าวจะไม่ปรากฏในสตรีม BEP ซึ่งใช้ผลการดึงข้อมูลที่แคชไว้ซ้ำ

NamedSetOfFiles

เหตุการณ์ NamedSetOfFiles รายงานโครงสร้างที่ตรงกับ depset ของไฟล์ที่สร้างขึ้นระหว่างการประเมินคำสั่ง Depset ที่รวมมาด้วยชั่วคราวจะระบุโดย NamedSetOfFilesId

ดูข้อมูลเพิ่มเติมเกี่ยวกับการตีความเหตุการณ์ NamedSetOfFiles ของสตรีมได้ที่หน้าตัวอย่าง BEP

OptionsParsed

เหตุการณ์ OptionsParsed รายการเดียวจะแสดงตัวเลือกทั้งหมดที่ใช้กับคำสั่ง โดยแยกตัวเลือกการเริ่มต้นใช้งานออกจากตัวเลือกคำสั่ง รวมถึง InvocationPolicy ด้วย หากมี

{
  "id": {
    "optionsParsed": {}
  },
  "optionsParsed": {
    "startupOptions": [
      "--max_idle_secs=10800",
      "--noshutdown_on_low_sys_mem",
      "--connect_timeout_secs=30",
      "--output_user_root=/tmp/.cache/bazel/_bazel_foo",
      "--output_base=/tmp/.cache/bazel/_bazel_foo/a61fd0fbee3f9d6c1e30d54b68655d35",
      "--deep_execroot",
      "--expand_configs_in_place",
      "--idle_server_tasks",
      "--write_command_log",
      "--nowatchfs",
      "--nofatal_event_bus_exceptions",
      "--nowindows_enable_symlinks",
      "--noclient_debug",
    ],
    "cmdLine": [
      "--enable_platform_specific_config",
      "--build_event_json_file=/tmp/bep.json"
    ],
    "explicitCmdLine": [
      "--build_event_json_file=/tmp/bep.json"
    ],
    "invocationPolicy": {}
  }
}

PatternExpanded

เหตุการณ์ PatternExpanded ระบุชุดเป้าหมายทั้งหมดที่ตรงกับรูปแบบที่ระบุในบรรทัดคำสั่ง สําหรับคําสั่งที่ทํางานสําเร็จ ระบบจะแสดงเหตุการณ์เดียวที่มีรูปแบบทั้งหมดใน PatternExpandedId และเป้าหมายทั้งหมดในรายการย่อยของเหตุการณ์ PatternExpanded หากรูปแบบขยายไปยัง test_suite ใดก็ตาม test_suite จะเป็นชุดเป้าหมายการทดสอบที่รวมอยู่ด้วย สําหรับรูปแบบแต่ละรูปแบบที่แก้ไขไม่สําเร็จ BEP จะมีเหตุการณ์ Aborted เพิ่มเติมที่มี PatternExpandedId ระบุรูปแบบ

{
  "id": {
    "pattern": {
      "pattern":["//base:all"]
    }
  },
  "children": [
    {"targetConfigured":{"label":"//base:foo"}},
    {"targetConfigured":{"label":"//base:foobar"}}
  ],
  "expanded": {
    "testSuiteExpansions": {
      "suiteLabel": "//base:suite",
      "testLabels": "//base:foo_test"
    }
  }
}

ความคืบหน้า

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

TargetComplete

สําหรับชุดค่าผสม (target, configuration, aspect) แต่ละชุดที่ทํางานเสร็จสมบูรณ์แล้ว เหตุการณ์ TargetComplete จะรวมอยู่ใน BEP เหตุการณ์ประกอบด้วยการทํางานสำเร็จ/ไม่สําเร็จของเป้าหมายและกลุ่มเอาต์พุตที่ขอของเป้าหมาย

{
  "id": {
    "targetCompleted": {
      "label": "//examples/py:bep",
      "configuration": {
        "id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
      }
    }
  },
  "completed": {
    "success": true,
    "outputGroup": [
      {
        "name": "default",
        "fileSets": [
          {
            "id": "0"
          }
        ]
      }
    ]
  }
}

TargetConfigured

สําหรับเป้าหมายแต่ละรายการที่ผ่านระยะการวิเคราะห์แล้ว ระบบจะรวมเหตุการณ์ TargetConfigured ไว้ใน BEP นี่เป็นแหล่งที่มาที่เชื่อถือได้สำหรับแอตทริบิวต์ "ประเภทกฎ" ของเป้าหมาย การกําหนดค่าที่ใช้กับเป้าหมายจะปรากฏในรายการย่อยที่ประกาศของเหตุการณ์

ตัวอย่างเช่น การสร้างด้วยตัวเลือก --experimental_multi_cpu อาจสร้างเหตุการณ์ TargetConfigured ต่อไปนี้สําหรับเป้าหมายเดียวที่มีการกําหนดค่า 2 รายการ

{
  "id": {
    "targetConfigured": {
      "label": "//starlark_configurations/multi_arch_binary:foo"
    }
  },
  "children": [
    {
      "targetCompleted": {
        "label": "//starlark_configurations/multi_arch_binary:foo",
        "configuration": {
          "id": "c62b30c8ab7b9fc51a05848af9276529842a11a7655c71327ade26d7c894c818"
        }
      }
    },
    {
      "targetCompleted": {
        "label": "//starlark_configurations/multi_arch_binary:foo",
        "configuration": {
          "id": "eae0379b65abce68d54e0924c0ebcbf3d3df26c6e84ef7b2be51e8dc5b513c99"
        }
      }
    }
  ],
  "configured": {
    "targetKind": "foo_binary rule"
  }
}

TargetSummary

สําหรับคู่ (target, configuration) แต่ละคู่ที่เรียกใช้ ระบบจะรวมเหตุการณ์ TargetSummary ไว้ด้วยพร้อมกับผลลัพธ์ความสําเร็จแบบรวมซึ่งครอบคลุมการเรียกใช้เป้าหมายที่กําหนดค่าไว้และทุกแง่มุมที่ใช้กับเป้าหมายที่กําหนดค่าไว้

TestResult

หากต้องขอทดสอบ ระบบจะส่งเหตุการณ์ TestResult สำหรับความพยายามทดสอบ ชาร์ด และการเรียกใช้แต่ละครั้งต่อการทดสอบ ซึ่งช่วยให้ผู้ใช้ BEP ระบุการดำเนินการทดสอบที่ทดสอบไม่ผ่านได้อย่างแม่นยำ และระบุเอาต์พุตการทดสอบ (เช่น บันทึก ไฟล์ test.xml) ของการดำเนินการทดสอบแต่ละรายการ

TestSummary

หากมีการขอการทดสอบ ระบบจะส่งเหตุการณ์ TestSummary สำหรับการทดสอบแต่ละรายการ (target, configuration) ซึ่งมีข้อมูลที่จําเป็นต่อการตีความผลการทดสอบ ระบบรวมจำนวนครั้งที่พยายาม ชาร์ด และการเรียกใช้ต่อการทดสอบ เพื่อให้ผู้บริโภคของ BEP แยกความแตกต่างของอาร์ติแฟกต์ในมิติข้อมูลเหล่านี้ได้ ระบบจะพิจารณาจำนวนครั้งที่พยายามและจำนวนครั้งที่เรียกใช้ต่อการทดสอบขณะสร้างTestStatusรวมเพื่อแยกความแตกต่างระหว่างการทดสอบ FLAKY กับการทดสอบ FAILED

UnstructuredCommandLine

เหตุการณ์นี้แตกต่างจาก CommandLine เนื่องจากมีแฟล็กบรรทัดคำสั่งที่ยังไม่ได้แยกวิเคราะห์ในรูปแบบสตริงตามที่เครื่องมือสร้างพบหลังจากขยายไฟล์ .bazelrc ทั้งหมดและพิจารณาแฟล็ก --config

ระบบอาจใช้เหตุการณ์ UnstructuredCommandLine เพื่อจำลองการเรียกใช้คำสั่งอย่างถูกต้อง

WorkspaceConfig

เหตุการณ์ WorkspaceConfig รายการเดียวมีข้อมูลการกำหนดค่าเกี่ยวกับพื้นที่ทำงาน เช่น รูทการดำเนินการ

WorkspaceStatus

เหตุการณ์ WorkspaceStatus รายการเดียวจะมีผลลัพธ์ของคำสั่งสถานะพื้นที่ทำงาน