Bazel通过BuildEventService覆盖测试日志和BuildEventProtocol
我正在尝试实现BuildEventService的服务器,以便让bazel将其BuildEventProtocol消息导出到它。我正试图找出如何在没有竞争条件的情况下读取测试运行的日志,尤其是由于bazel在本地机器上重复使用相同的路径进行多次运行,以及BES的默认异步性质,这似乎非常困难 例如: 作为事件流的一部分,我得到以下信息:Bazel通过BuildEventService覆盖测试日志和BuildEventProtocol,bazel,Bazel,我正在尝试实现BuildEventService的服务器,以便让bazel将其BuildEventProtocol消息导出到它。我正试图找出如何在没有竞争条件的情况下读取测试运行的日志,尤其是由于bazel在本地机器上重复使用相同的路径进行多次运行,以及BES的默认异步性质,这似乎非常困难 例如: 作为事件流的一部分,我得到以下信息: EventStream event: stream_id { build_id: "a4a34ca2-fc4b-483d-b4ab-b4546bdb2c4e"
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客户端。如果是这样,那么你可以避免比赛。否则你不能
--output\u base
Bazel(输出基是路径前缀
/private/var/tmp/_bazel_endobson/f851d7f6c7010ae7d7a3db153bed36de
你的例子)。但是,--output_base
是一个启动选项,并且
因此,更改Bazel服务器时需要重新启动它。那会
工作,但速度很慢,需要指定不同的
--output_base
在调用之前,如果以编程方式调用Bazel,这可能很好--bes\u best\u efforce=false
,在这种情况下,bes上传
是同步的,即Bazel等待上载完成。如果
上传失败,构建也失败.bazelrc
文件,但在0.5.4中,它实际上并不同步工作。它确保消息被发送,但不会在退出之前等待服务器的确认。)