【发布时间】:2017-09-04 22:03:03
【问题描述】:
我正在尝试实现 BuildEventService 的服务器,以便我可以让 bazel 将其 BuildEventProtocol 消息导出到它。我试图弄清楚如何在没有竞争条件的情况下读取测试运行的日志,特别是由于 bazel 在本地机器上重复使用相同的路径进行多次运行以及 BES 的默认异步性质,这似乎非常困难。
示例: 作为事件流的一部分,我得到以下信息:
EventStream event:
stream_id {
build_id: "a4a34ca2-fc4b-483d-b4ab-b4546bdb2c4e"
component: TOOL
invocation_id: "b09c0b08-b096-4673-9521-4980506207f7"
}
sequence_number: 11
event {
event_time {
seconds: 1504560960
nanos: 778000000
}
bazel_event {
[type.googleapis.com/build_event_stream.BuildEvent] {
id {
test_summary {
label: "//libraries:types-test"
configuration {
id: "fe35dfece8e09ba054305e51187b3316"
}
}
}
test_summary {
total_run_count: 1
failed {
uri: "file:///private/var/tmp/_bazel_endobson/f851d7f6c7010ae7d7a3db153bed36de/execroot/yaspl/bazel-out/darwin_x86_64-fastbuild/testlogs/libraries/types-test/test.log"
}
overall_status: FAILED
}
}
}
}
我想读取 uri 中的文件:
file:///private/var/tmp/_bazel_endobson/f851d7f6c7010ae7d7a3db153bed36de/execroot/yaspl/bazel-out/darwin_x86_64-fastbuild/testlogs/libraries/types-test/test.log
但似乎每次我运行测试时都会得到相同的 uri。因此,我想在下一次测试运行重新创建它之前阅读它。但是 bazel 默认情况下会异步上传,因此即使在 BES 服务器接收到此流消息之前,似乎也没有什么可以阻止 bazel 再次启动和重新创建文件。
我怎样才能避免这种竞争并仍然阅读这些文件?
【问题讨论】:
标签: bazel