diff options
author | Simon Hauser <simon.hauser@helsinki-systems.de> | 2024-06-10T15·49+0200 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2024-06-14T09·34+0000 |
commit | fa7ed39bf480fd50c488ce54daad7322ced73aab (patch) | |
tree | 560e0bc8045168c11dade7cf93204262215349be /tvix/cli/src/main.rs | |
parent | 5077ca70deb8ca8e84abb9608e08bf4485d3ec4b (diff) |
feat(tvix/tracing): correctly close otlp on exit r/8271
Provide a new interface for forcing a flush of otlp traces and use this interface to shutdown otlp prior to exiting tvix-store, either if the tool was stopped with a SIGTERM or ended regularly. This also fixes an issue where traces were not even exported if for example we just imported 10 paths and never even emitted more than 256 traces. The implementation uses a mpsc channel so a flush can be done without having to wait for it to complete. If you want to wait for a flush to complete you can provide a oneshot channel which will receive a message once flushing is complete. Because of a otlp bug `force_flush` as well as `shutdown_tracer_provider` need to be executed using `spawn_blocking` otherwise the function will deadlock. See https://github.com/open-telemetry/opentelemetry-rust/issues/1395#issuecomment-1953280335 Change-Id: I0a828391adfb1f72dc8305f62ced8cba0515847c Reviewed-on: https://cl.tvl.fyi/c/depot/+/11803 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Autosubmit: Simon Hauser <simon.hauser@helsinki-systems.de>
Diffstat (limited to 'tvix/cli/src/main.rs')
-rw-r--r-- | tvix/cli/src/main.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/tvix/cli/src/main.rs b/tvix/cli/src/main.rs index 5e0b8c41819d..3ec45bc37250 100644 --- a/tvix/cli/src/main.rs +++ b/tvix/cli/src/main.rs @@ -279,7 +279,10 @@ fn lint(code: &str, path: Option<PathBuf>, args: &Args) -> bool { fn main() { let args = Args::parse(); - tvix_tracing::init(args.log_level).expect("unable to set up tracing subscriber"); + let _ = tvix_tracing::TracingBuilder::default() + .level(args.log_level) + .build() + .expect("unable to set up tracing subscriber"); let tokio_runtime = tokio::runtime::Runtime::new().expect("failed to setup tokio runtime"); let io_handle = init_io_handle(&tokio_runtime, &args); |