Je suis en train de jouer avec l'implémentation d'un serveur de BuildEventService pour que bazel puisse y exporter ses messages BuildEventProtocol. J'essaie de comprendre comment lire les logs pour un test sans conditions de concurrence, et en particulier cela semble très difficile en raison de bazel réutilisant le même chemin sur la machine locale pour plusieurs exécutions et la nature asynchrone par défaut de BES.Bazel écrasant les journaux de test et BuildEventProtocol via BuildEventService
Exemple: Dans le cadre du flux d'événements, je reçois le texte suivant:
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
}
}
}
}
Je voudrais lire le fichier dans le uri: file:///private/var/tmp/_bazel_endobson/f851d7f6c7010ae7d7a3db153bed36de/execroot/yaspl/bazel-out/darwin_x86_64-fastbuild/testlogs/libraries/types-test/test.log
mais il semble que chaque fois que je lance le test, je reçois le même uri. Ainsi je veux le lire avant que le prochain essai le recrée. Mais bazel par défaut fait le téléchargement asynchrone, donc il semble qu'il n'y ait rien qui empêche une autre exécution de bazel de démarrer et recréer le fichier avant même que le serveur BES reçoive ce message de flux. Comment puis-je éviter cette course et toujours lire ces fichiers?
Classé https://github.com/bazelbuild/bazel/issues/3689 pour suivre la demande de fonctionnalité. Pour l'instant 2 est probablement la meilleure solution car elle nécessite seulement de changer le fichier '.bazelrc', mais en 0.5.4 elle ne fonctionne pas réellement de façon synchrone. Il s'assure que les messages sont envoyés mais n'attend pas les accusés de réception du serveur avant de quitter.) –