diff --git a/tvix/Cargo.lock b/tvix/Cargo.lock index 97575c163..51773c080 100644 --- a/tvix/Cargo.lock +++ b/tvix/Cargo.lock @@ -2826,44 +2826,48 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "opentelemetry" -version = "0.27.1" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab70038c28ed37b97d8ed414b6429d343a8bbf44c9f79ec854f3a643029ba6d7" +checksum = "236e667b670a5cdf90c258f5a55794ec5ac5027e960c224bff8367a59e1e6426" dependencies = [ "futures-core", "futures-sink", "js-sys", "pin-project-lite", - "thiserror 1.0.69", + "thiserror 2.0.9", "tracing", ] [[package]] name = "opentelemetry-http" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a8a7f5f6ba7c1b286c2fbca0454eaba116f63bbe69ed250b642d36fbb04d80" +checksum = "a8863faf2910030d139fb48715ad5ff2f35029fc5f244f6d5f689ddcf4d26253" dependencies = [ "async-trait", "bytes", "http 1.2.0", "opentelemetry", + "reqwest", + "tracing", ] [[package]] name = "opentelemetry-otlp" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cf61a1868dacc576bf2b2a1c3e9ab150af7272909e80085c3173384fe11f76" +checksum = "5bef114c6d41bea83d6dc60eb41720eedd0261a67af57b66dd2b84ac46c01d91" dependencies = [ "async-trait", "futures-core", "http 1.2.0", "opentelemetry", + "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", "prost", - "thiserror 1.0.69", + "reqwest", + "thiserror 2.0.9", "tokio", "tonic", "tracing", @@ -2871,9 +2875,9 @@ dependencies = [ [[package]] name = "opentelemetry-proto" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6e05acbfada5ec79023c85368af14abd0b307c015e9064d249b2a950ef459a6" +checksum = "56f8870d3024727e99212eb3bb1762ec16e255e3e6f58eeb3dc8db1aa226746d" dependencies = [ "opentelemetry", "opentelemetry_sdk", @@ -2883,15 +2887,15 @@ dependencies = [ [[package]] name = "opentelemetry-semantic-conventions" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc1b6902ff63b32ef6c489e8048c5e253e2e4a803ea3ea7e783914536eb15c52" +checksum = "2fb3a2f78c2d55362cd6c313b8abedfbc0142ab3c2676822068fd2ab7d51f9b7" [[package]] name = "opentelemetry_sdk" -version = "0.27.1" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "231e9d6ceef9b0b2546ddf52335785ce41252bc7474ee8ba05bfad277be13ab8" +checksum = "84dfad6042089c7fc1f6118b7040dc2eb4ab520abbf410b79dc481032af39570" dependencies = [ "async-trait", "futures-channel", @@ -2902,7 +2906,7 @@ dependencies = [ "percent-encoding", "rand", "serde_json", - "thiserror 1.0.69", + "thiserror 2.0.9", "tokio", "tokio-stream", "tracing", @@ -3557,6 +3561,7 @@ checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64 0.22.1", "bytes", + "futures-channel", "futures-core", "futures-util", "h2", @@ -3598,8 +3603,7 @@ dependencies = [ [[package]] name = "reqwest-middleware" version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1ccd3b55e711f91a9885a2fa6fbbb2e39db1776420b062efc058c6410f7e5e3" +source = "git+https://github.com/TrueLayer/reqwest-middleware?rev=9fdba406c124c567e2302f1aec63483ed7db63b1#9fdba406c124c567e2302f1aec63483ed7db63b1" dependencies = [ "anyhow", "async-trait", @@ -3613,8 +3617,7 @@ dependencies = [ [[package]] name = "reqwest-tracing" version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73e6153390585f6961341b50e5a1931d6be6dee4292283635903c26ef9d980d2" +source = "git+https://github.com/TrueLayer/reqwest-middleware?rev=9fdba406c124c567e2302f1aec63483ed7db63b1#9fdba406c124c567e2302f1aec63483ed7db63b1" dependencies = [ "anyhow", "async-trait", @@ -4767,9 +4770,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.5.2" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" dependencies = [ "async-compression", "bitflags 2.6.0", @@ -4777,7 +4780,6 @@ dependencies = [ "futures-core", "http 1.2.0", "http-body", - "http-body-util", "pin-project-lite", "tokio", "tokio-util", @@ -4794,9 +4796,9 @@ checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-otel-http-metrics" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed0ba983713ec0f5d512dc28091fa3c1cb8fa5487de32a1b0bc0cb4159f9f89f" +checksum = "dfb893a8ddabbf5cdab3c90e31c8399e638036a4a005b0ea03b3b319c2440c59" dependencies = [ "axum", "futures-util", @@ -4882,9 +4884,9 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a971f6058498b5c0f1affa23e7ea202057a7301dbff68e968b2d578bcbd053" +checksum = "721f2d2569dce9f3dfbbddee5906941e953bfcdf736a62da3377f5751650cc36" dependencies = [ "js-sys", "once_cell", diff --git a/tvix/Cargo.nix b/tvix/Cargo.nix index d37c46298..5e10c5df0 100644 --- a/tvix/Cargo.nix +++ b/tvix/Cargo.nix @@ -9032,9 +9032,9 @@ rec { }; "opentelemetry" = rec { crateName = "opentelemetry"; - version = "0.27.1"; + version = "0.28.0"; edition = "2021"; - sha256 = "1mx6kc1479pkak49xxy98jzqnfilkm1bc56liryvjdzd52606w5b"; + sha256 = "09k43sgaarw3zx5j434ngq1canpcjibsbxaqqa8dyp0acxxncvi3"; dependencies = [ { name = "futures-core"; @@ -9058,7 +9058,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 1.0.69"; + packageId = "thiserror 2.0.9"; optional = true; usesDefaultFeatures = false; } @@ -9076,7 +9076,7 @@ rec { "internal-logs" = [ "tracing" ]; "pin-project-lite" = [ "dep:pin-project-lite" ]; "spec_unstable_logs_enabled" = [ "logs" ]; - "testing" = [ "trace" "metrics" ]; + "testing" = [ "trace" ]; "thiserror" = [ "dep:thiserror" ]; "trace" = [ "pin-project-lite" "futures-sink" "futures-core" "thiserror" ]; "tracing" = [ "dep:tracing" ]; @@ -9085,9 +9085,9 @@ rec { }; "opentelemetry-http" = rec { crateName = "opentelemetry-http"; - version = "0.27.0"; + version = "0.28.0"; edition = "2021"; - sha256 = "102dn3xkcbb41cjyssdy7gv1d8db9r2s1g1gdhl1nz5syvssga0h"; + sha256 = "0lv2sbsdr7b8bxnly92zzhlm1wzjbynib1xlkw9hs0qh56pkz1m8"; libName = "opentelemetry_http"; dependencies = [ { @@ -9109,19 +9109,36 @@ rec { packageId = "opentelemetry"; features = [ "trace" ]; } + { + name = "reqwest"; + packageId = "reqwest"; + optional = true; + usesDefaultFeatures = false; + features = [ "blocking" ]; + } + { + name = "tracing"; + packageId = "tracing"; + optional = true; + usesDefaultFeatures = false; + } ]; features = { + "default" = [ "internal-logs" ]; "hyper" = [ "dep:http-body-util" "dep:hyper" "dep:hyper-util" "dep:tokio" ]; + "internal-logs" = [ "tracing" "opentelemetry/internal-logs" ]; "reqwest" = [ "dep:reqwest" ]; "reqwest-rustls" = [ "reqwest" "reqwest/rustls-tls-native-roots" ]; "reqwest-rustls-webpki-roots" = [ "reqwest" "reqwest/rustls-tls-webpki-roots" ]; + "tracing" = [ "dep:tracing" ]; }; + resolvedDefaultFeatures = [ "default" "internal-logs" "reqwest" "tracing" ]; }; "opentelemetry-otlp" = rec { crateName = "opentelemetry-otlp"; - version = "0.27.0"; + version = "0.28.0"; edition = "2021"; - sha256 = "0xhzw57khwribh4817lhf9rayl5ik8z1qaibpxvcbb4dhshn3kwi"; + sha256 = "148xq13ar11bvmk7pxbslrhh5pgf40bv83n6dlysigj1dm613vsv"; libName = "opentelemetry_otlp"; dependencies = [ { @@ -9144,6 +9161,11 @@ rec { packageId = "opentelemetry"; usesDefaultFeatures = false; } + { + name = "opentelemetry-http"; + packageId = "opentelemetry-http"; + optional = true; + } { name = "opentelemetry-proto"; packageId = "opentelemetry-proto"; @@ -9159,9 +9181,15 @@ rec { packageId = "prost"; optional = true; } + { + name = "reqwest"; + packageId = "reqwest"; + optional = true; + usesDefaultFeatures = false; + } { name = "thiserror"; - packageId = "thiserror 1.0.69"; + packageId = "thiserror 2.0.9"; usesDefaultFeatures = false; } { @@ -9193,19 +9221,18 @@ rec { } ]; features = { - "default" = [ "grpc-tonic" "trace" "metrics" "logs" "internal-logs" ]; + "default" = [ "http-proto" "reqwest-blocking-client" "trace" "metrics" "logs" "internal-logs" ]; "grpc-tonic" = [ "tonic" "prost" "http" "tokio" "opentelemetry-proto/gen-tonic" ]; "gzip-tonic" = [ "tonic/gzip" ]; "http" = [ "dep:http" ]; "http-json" = [ "serde_json" "prost" "opentelemetry-http" "opentelemetry-proto/gen-tonic-messages" "opentelemetry-proto/with-serde" "http" "trace" "metrics" ]; "http-proto" = [ "prost" "opentelemetry-http" "opentelemetry-proto/gen-tonic-messages" "http" "trace" "metrics" ]; "hyper-client" = [ "opentelemetry-http/hyper" ]; - "integration-testing" = [ "tonic" "prost" "tokio/full" "trace" ]; - "internal-logs" = [ "tracing" ]; + "integration-testing" = [ "tonic" "prost" "tokio/full" "trace" "logs" ]; + "internal-logs" = [ "tracing" "opentelemetry/internal-logs" ]; "logs" = [ "opentelemetry/logs" "opentelemetry_sdk/logs" "opentelemetry-proto/logs" ]; "metrics" = [ "opentelemetry/metrics" "opentelemetry_sdk/metrics" "opentelemetry-proto/metrics" ]; "opentelemetry-http" = [ "dep:opentelemetry-http" ]; - "populate-logs-event-name" = [ "opentelemetry-proto/populate-logs-event-name" ]; "prost" = [ "dep:prost" ]; "reqwest" = [ "dep:reqwest" ]; "reqwest-blocking-client" = [ "reqwest/blocking" "opentelemetry-http/reqwest" ]; @@ -9224,13 +9251,13 @@ rec { "tracing" = [ "dep:tracing" ]; "zstd-tonic" = [ "tonic/zstd" ]; }; - resolvedDefaultFeatures = [ "default" "grpc-tonic" "http" "internal-logs" "logs" "metrics" "prost" "tokio" "tonic" "trace" "tracing" ]; + resolvedDefaultFeatures = [ "default" "grpc-tonic" "http" "http-proto" "internal-logs" "logs" "metrics" "opentelemetry-http" "prost" "reqwest" "reqwest-blocking-client" "tokio" "tonic" "trace" "tracing" ]; }; "opentelemetry-proto" = rec { crateName = "opentelemetry-proto"; - version = "0.27.0"; + version = "0.28.0"; edition = "2021"; - sha256 = "19jryh79aalv4i6hds8mq03v7l5b2jpnhly84f8cfpnszb5mmq56"; + sha256 = "0vbl4si1mny87pmqxxg6wday45pcc8bvpcrf46cpwwi4606qgy2n"; libName = "opentelemetry_proto"; dependencies = [ { @@ -9257,11 +9284,13 @@ rec { } ]; features = { + "base64" = [ "dep:base64" ]; "default" = [ "full" ]; - "full" = [ "gen-tonic" "trace" "logs" "metrics" "zpages" "with-serde" ]; + "full" = [ "gen-tonic" "trace" "logs" "metrics" "zpages" "with-serde" "internal-logs" ]; "gen-tonic" = [ "gen-tonic-messages" "tonic/transport" ]; "gen-tonic-messages" = [ "tonic" "prost" ]; "hex" = [ "dep:hex" ]; + "internal-logs" = [ "tracing" ]; "logs" = [ "opentelemetry/logs" "opentelemetry_sdk/logs" ]; "metrics" = [ "opentelemetry/metrics" "opentelemetry_sdk/metrics" ]; "prost" = [ "dep:prost" ]; @@ -9270,26 +9299,27 @@ rec { "testing" = [ "opentelemetry/testing" ]; "tonic" = [ "dep:tonic" ]; "trace" = [ "opentelemetry/trace" "opentelemetry_sdk/trace" ]; + "tracing" = [ "dep:tracing" ]; "with-schemars" = [ "schemars" ]; - "with-serde" = [ "serde" "hex" ]; + "with-serde" = [ "serde" "hex" "base64" ]; "zpages" = [ "trace" ]; }; resolvedDefaultFeatures = [ "gen-tonic" "gen-tonic-messages" "logs" "metrics" "prost" "tonic" "trace" ]; }; "opentelemetry-semantic-conventions" = rec { crateName = "opentelemetry-semantic-conventions"; - version = "0.27.0"; + version = "0.28.0"; edition = "2021"; - sha256 = "0ljwn5p5651rg1zfm8ryh152wgi5bs609s49qkv2xcv3zw16j6xw"; + sha256 = "1dzra5yspllg0qi6hry2ncm19h7vxnmvh4y3sqn3cm9dikvs5crg"; libName = "opentelemetry_semantic_conventions"; features = { }; resolvedDefaultFeatures = [ "default" ]; }; "opentelemetry_sdk" = rec { crateName = "opentelemetry_sdk"; - version = "0.27.1"; + version = "0.28.0"; edition = "2021"; - sha256 = "1f1sw5xjgbdz0nxfhkj7qwmjahffhmbk6lnzdmab5c7rxrn9s7i3"; + sha256 = "0w4mycm070f4knvi1x5v199apd1fvi0712qiyv0pz70889havpw4"; dependencies = [ { name = "async-trait"; @@ -9338,7 +9368,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 1.0.69"; + packageId = "thiserror 2.0.9"; usesDefaultFeatures = false; } { @@ -9364,19 +9394,22 @@ rec { "async-std" = [ "dep:async-std" ]; "async-trait" = [ "dep:async-trait" ]; "default" = [ "trace" "metrics" "logs" "internal-logs" ]; - "experimental_metrics_periodic_reader_no_runtime" = [ "metrics" ]; + "experimental_logs_batch_log_processor_with_async_runtime" = [ "logs" ]; + "experimental_metrics_disable_name_validation" = [ "metrics" ]; + "experimental_metrics_periodicreader_with_async_runtime" = [ "metrics" ]; + "experimental_trace_batch_span_processor_with_async_runtime" = [ "trace" ]; "glob" = [ "dep:glob" ]; "http" = [ "dep:http" ]; "internal-logs" = [ "tracing" ]; "jaeger_remote_sampler" = [ "trace" "opentelemetry-http" "http" "serde" "serde_json" "url" ]; - "logs" = [ "opentelemetry/logs" "async-trait" "serde_json" ]; + "logs" = [ "opentelemetry/logs" "serde_json" ]; "metrics" = [ "opentelemetry/metrics" "glob" "async-trait" ]; "opentelemetry-http" = [ "dep:opentelemetry-http" ]; "percent-encoding" = [ "dep:percent-encoding" ]; "rand" = [ "dep:rand" ]; - "rt-async-std" = [ "async-std" ]; - "rt-tokio" = [ "tokio" "tokio-stream" ]; - "rt-tokio-current-thread" = [ "tokio" "tokio-stream" ]; + "rt-async-std" = [ "async-std" "experimental_async_runtime" ]; + "rt-tokio" = [ "tokio" "tokio-stream" "experimental_async_runtime" ]; + "rt-tokio-current-thread" = [ "tokio" "tokio-stream" "experimental_async_runtime" ]; "serde" = [ "dep:serde" ]; "serde_json" = [ "dep:serde_json" ]; "spec_unstable_logs_enabled" = [ "logs" "opentelemetry/spec_unstable_logs_enabled" ]; @@ -9388,7 +9421,7 @@ rec { "tracing" = [ "dep:tracing" ]; "url" = [ "dep:url" ]; }; - resolvedDefaultFeatures = [ "async-trait" "default" "glob" "internal-logs" "logs" "metrics" "percent-encoding" "rand" "rt-tokio" "serde_json" "tokio" "tokio-stream" "trace" "tracing" ]; + resolvedDefaultFeatures = [ "async-trait" "default" "experimental_async_runtime" "glob" "internal-logs" "logs" "metrics" "percent-encoding" "rand" "rt-tokio" "serde_json" "tokio" "tokio-stream" "trace" "tracing" ]; }; "os_str_bytes" = rec { crateName = "os_str_bytes"; @@ -11353,6 +11386,12 @@ rec { name = "bytes"; packageId = "bytes"; } + { + name = "futures-channel"; + packageId = "futures-channel"; + optional = true; + target = { target, features }: (!("wasm32" == target."arch" or null)); + } { name = "futures-core"; packageId = "futures-core"; @@ -11650,13 +11689,18 @@ rec { "stream" = [ "tokio/fs" "dep:tokio-util" "dep:wasm-streams" ]; "zstd" = [ "dep:async-compression" "async-compression?/zstd" "dep:tokio-util" ]; }; - resolvedDefaultFeatures = [ "__rustls" "__rustls-ring" "__tls" "h2" "http2" "json" "rustls-tls-native-roots" "rustls-tls-native-roots-no-provider" "stream" ]; + resolvedDefaultFeatures = [ "__rustls" "__rustls-ring" "__tls" "blocking" "h2" "http2" "json" "rustls-tls-native-roots" "rustls-tls-native-roots-no-provider" "stream" ]; }; "reqwest-middleware" = rec { crateName = "reqwest-middleware"; version = "0.4.0"; edition = "2018"; - sha256 = "1qz5yw869305zhp0c2s2fqbxnf9fpgxscbssi2lr27vibssx7k6i"; + workspace_member = null; + src = pkgs.fetchgit { + url = "https://github.com/TrueLayer/reqwest-middleware"; + rev = "9fdba406c124c567e2302f1aec63483ed7db63b1"; + sha256 = "0jn14w0pbixscp4vgcanpi36d7b9k5c2hvksa00l5xgsmkmxni7l"; + }; libName = "reqwest_middleware"; authors = [ "Rodrigo Gryzinski " @@ -11711,7 +11755,12 @@ rec { crateName = "reqwest-tracing"; version = "0.5.5"; edition = "2018"; - sha256 = "1ll0v7wnxhh3b5iq68i9wkgfcsqxjfhyal0v6ihnjpsqj0ribrkk"; + workspace_member = null; + src = pkgs.fetchgit { + url = "https://github.com/TrueLayer/reqwest-middleware"; + rev = "9fdba406c124c567e2302f1aec63483ed7db63b1"; + sha256 = "0jn14w0pbixscp4vgcanpi36d7b9k5c2hvksa00l5xgsmkmxni7l"; + }; libName = "reqwest_tracing"; authors = [ "Rodrigo Gryzinski " @@ -11742,7 +11791,7 @@ rec { { name = "opentelemetry"; packageId = "opentelemetry"; - rename = "opentelemetry_0_27_pkg"; + rename = "opentelemetry_0_28_pkg"; optional = true; } { @@ -11761,7 +11810,7 @@ rec { { name = "tracing-opentelemetry"; packageId = "tracing-opentelemetry"; - rename = "tracing-opentelemetry_0_28_pkg"; + rename = "tracing-opentelemetry_0_29_pkg"; optional = true; } ]; @@ -11789,6 +11838,8 @@ rec { "opentelemetry_0_26_pkg" = [ "dep:opentelemetry_0_26_pkg" ]; "opentelemetry_0_27" = [ "opentelemetry_0_27_pkg" "tracing-opentelemetry_0_28_pkg" ]; "opentelemetry_0_27_pkg" = [ "dep:opentelemetry_0_27_pkg" ]; + "opentelemetry_0_28" = [ "opentelemetry_0_28_pkg" "tracing-opentelemetry_0_29_pkg" ]; + "opentelemetry_0_28_pkg" = [ "dep:opentelemetry_0_28_pkg" ]; "tracing-opentelemetry_0_21_pkg" = [ "dep:tracing-opentelemetry_0_21_pkg" ]; "tracing-opentelemetry_0_22_pkg" = [ "dep:tracing-opentelemetry_0_22_pkg" ]; "tracing-opentelemetry_0_23_pkg" = [ "dep:tracing-opentelemetry_0_23_pkg" ]; @@ -11797,8 +11848,9 @@ rec { "tracing-opentelemetry_0_26_pkg" = [ "dep:tracing-opentelemetry_0_26_pkg" ]; "tracing-opentelemetry_0_27_pkg" = [ "dep:tracing-opentelemetry_0_27_pkg" ]; "tracing-opentelemetry_0_28_pkg" = [ "dep:tracing-opentelemetry_0_28_pkg" ]; + "tracing-opentelemetry_0_29_pkg" = [ "dep:tracing-opentelemetry_0_29_pkg" ]; }; - resolvedDefaultFeatures = [ "opentelemetry_0_27" "opentelemetry_0_27_pkg" "tracing-opentelemetry_0_28_pkg" ]; + resolvedDefaultFeatures = [ "opentelemetry_0_28" "opentelemetry_0_28_pkg" "tracing-opentelemetry_0_29_pkg" ]; }; "reserve-port" = rec { crateName = "reserve-port"; @@ -15544,9 +15596,9 @@ rec { }; "tower-http" = rec { crateName = "tower-http"; - version = "0.5.2"; + version = "0.6.2"; edition = "2018"; - sha256 = "1xakj3x0anp55gjqibiwvzma5iz0w9pcjsr7qk97sx4qm4sd970y"; + sha256 = "15wnvhl6cpir9125s73bqjzjsvfb0fmndmsimnl2ddnlhfvs6gs0"; libName = "tower_http"; authors = [ "Tower Maintainers " @@ -15579,10 +15631,7 @@ rec { { name = "http-body"; packageId = "http-body"; - } - { - name = "http-body-util"; - packageId = "http-body-util"; + optional = true; } { name = "pin-project-lite"; @@ -15621,6 +15670,10 @@ rec { name = "bytes"; packageId = "bytes"; } + { + name = "http-body"; + packageId = "http-body"; + } { name = "tokio"; packageId = "tokio"; @@ -15631,34 +15684,35 @@ rec { "async-compression" = [ "dep:async-compression" ]; "auth" = [ "base64" "validate-request" ]; "base64" = [ "dep:base64" ]; - "catch-panic" = [ "tracing" "futures-util/std" ]; - "compression-br" = [ "async-compression/brotli" "futures-core" "tokio-util" "tokio" ]; - "compression-deflate" = [ "async-compression/zlib" "futures-core" "tokio-util" "tokio" ]; + "catch-panic" = [ "tracing" "futures-util/std" "dep:http-body" "dep:http-body-util" ]; + "compression-br" = [ "async-compression/brotli" "futures-core" "dep:http-body" "tokio-util" "tokio" ]; + "compression-deflate" = [ "async-compression/zlib" "futures-core" "dep:http-body" "tokio-util" "tokio" ]; "compression-full" = [ "compression-br" "compression-deflate" "compression-gzip" "compression-zstd" ]; - "compression-gzip" = [ "async-compression/gzip" "futures-core" "tokio-util" "tokio" ]; - "compression-zstd" = [ "async-compression/zstd" "futures-core" "tokio-util" "tokio" ]; - "decompression-br" = [ "async-compression/brotli" "futures-core" "tokio-util" "tokio" ]; - "decompression-deflate" = [ "async-compression/zlib" "futures-core" "tokio-util" "tokio" ]; + "compression-gzip" = [ "async-compression/gzip" "futures-core" "dep:http-body" "tokio-util" "tokio" ]; + "compression-zstd" = [ "async-compression/zstd" "futures-core" "dep:http-body" "tokio-util" "tokio" ]; + "decompression-br" = [ "async-compression/brotli" "futures-core" "dep:http-body" "dep:http-body-util" "tokio-util" "tokio" ]; + "decompression-deflate" = [ "async-compression/zlib" "futures-core" "dep:http-body" "dep:http-body-util" "tokio-util" "tokio" ]; "decompression-full" = [ "decompression-br" "decompression-deflate" "decompression-gzip" "decompression-zstd" ]; - "decompression-gzip" = [ "async-compression/gzip" "futures-core" "tokio-util" "tokio" ]; - "decompression-zstd" = [ "async-compression/zstd" "futures-core" "tokio-util" "tokio" ]; - "follow-redirect" = [ "futures-util" "iri-string" "tower/util" ]; - "fs" = [ "futures-util" "tokio/fs" "tokio-util/io" "tokio/io-util" "dep:http-range-header" "mime_guess" "mime" "percent-encoding" "httpdate" "set-status" "futures-util/alloc" "tracing" ]; + "decompression-gzip" = [ "async-compression/gzip" "futures-core" "dep:http-body" "dep:http-body-util" "tokio-util" "tokio" ]; + "decompression-zstd" = [ "async-compression/zstd" "futures-core" "dep:http-body" "dep:http-body-util" "tokio-util" "tokio" ]; + "follow-redirect" = [ "futures-util" "dep:http-body" "iri-string" "tower/util" ]; + "fs" = [ "futures-util" "dep:http-body" "dep:http-body-util" "tokio/fs" "tokio-util/io" "tokio/io-util" "dep:http-range-header" "mime_guess" "mime" "percent-encoding" "httpdate" "set-status" "futures-util/alloc" "tracing" ]; "full" = [ "add-extension" "auth" "catch-panic" "compression-full" "cors" "decompression-full" "follow-redirect" "fs" "limit" "map-request-body" "map-response-body" "metrics" "normalize-path" "propagate-header" "redirect" "request-id" "sensitive-headers" "set-header" "set-status" "timeout" "trace" "util" "validate-request" ]; "futures-core" = [ "dep:futures-core" ]; "futures-util" = [ "dep:futures-util" ]; "httpdate" = [ "dep:httpdate" ]; "iri-string" = [ "dep:iri-string" ]; - "metrics" = [ "tokio/time" ]; + "limit" = [ "dep:http-body" "dep:http-body-util" ]; + "metrics" = [ "dep:http-body" "tokio/time" ]; "mime" = [ "dep:mime" ]; "mime_guess" = [ "dep:mime_guess" ]; "percent-encoding" = [ "dep:percent-encoding" ]; "request-id" = [ "uuid" ]; - "timeout" = [ "tokio/time" ]; + "timeout" = [ "dep:http-body" "tokio/time" ]; "tokio" = [ "dep:tokio" ]; "tokio-util" = [ "dep:tokio-util" ]; "tower" = [ "dep:tower" ]; - "trace" = [ "tracing" ]; + "trace" = [ "dep:http-body" "tracing" ]; "tracing" = [ "dep:tracing" ]; "util" = [ "tower" ]; "uuid" = [ "dep:uuid" ]; @@ -15679,9 +15733,9 @@ rec { }; "tower-otel-http-metrics" = rec { crateName = "tower-otel-http-metrics"; - version = "0.10.0"; + version = "0.11.0"; edition = "2021"; - sha256 = "17zqz5cl3jy01cdjmqvx92jqzjy1lcghja6w2bazbh1yf61sj2zd"; + sha256 = "0n8c8k11kcxk0gmb01d0lhv80qwy774323n9ngd5rgxbvnl97f6z"; libName = "tower_otel_http_metrics"; dependencies = [ { @@ -15951,9 +16005,9 @@ rec { }; "tracing-opentelemetry" = rec { crateName = "tracing-opentelemetry"; - version = "0.28.0"; + version = "0.29.0"; edition = "2021"; - sha256 = "0lyhrf5mfbcbjs7gdgqx62kmf810xbkj7ymgy70bb6440pv73acp"; + sha256 = "0dnca0b7bxbp6gd64skkvzy3p58yjh35kvnxpggz7sfwd4jjs7vj"; libName = "tracing_opentelemetry"; dependencies = [ { @@ -16041,9 +16095,9 @@ rec { "futures-util" = [ "dep:futures-util" ]; "lazy_static" = [ "dep:lazy_static" ]; "metrics" = [ "opentelemetry/metrics" "opentelemetry_sdk/metrics" "smallvec" ]; - "metrics_gauge_unstable" = [ "opentelemetry/otel_unstable" ]; "smallvec" = [ "dep:smallvec" ]; "thiserror" = [ "dep:thiserror" ]; + "thiserror-1" = [ "dep:thiserror-1" ]; "tracing-log" = [ "dep:tracing-log" ]; }; resolvedDefaultFeatures = [ "default" "metrics" "smallvec" "tracing-log" ]; @@ -17619,6 +17673,7 @@ rec { name = "opentelemetry-otlp"; packageId = "opentelemetry-otlp"; optional = true; + features = [ "grpc-tonic" ]; } { name = "opentelemetry-semantic-conventions"; @@ -17679,7 +17734,7 @@ rec { ]; features = { "axum" = [ "dep:axum" ]; - "otlp" = [ "dep:tracing-opentelemetry" "dep:opentelemetry" "dep:opentelemetry-otlp" "dep:opentelemetry_sdk" "dep:opentelemetry-http" "dep:opentelemetry-semantic-conventions" "reqwest-tracing?/opentelemetry_0_27" ]; + "otlp" = [ "dep:tracing-opentelemetry" "dep:opentelemetry" "dep:opentelemetry-otlp" "dep:opentelemetry_sdk" "dep:opentelemetry-http" "dep:opentelemetry-semantic-conventions" "reqwest-tracing?/opentelemetry_0_28" ]; "reqwest" = [ "dep:reqwest-tracing" ]; "tonic" = [ "dep:tonic" "dep:http" ]; "tracy" = [ "dep:tracing-tracy" ]; diff --git a/tvix/Cargo.toml b/tvix/Cargo.toml index a013cdb2b..71b2b0451 100644 --- a/tvix/Cargo.toml +++ b/tvix/Cargo.toml @@ -88,11 +88,11 @@ nohash-hasher = "0.2.0" nom = "7.1.3" num-traits = "0.2.19" object_store = "0.10.2" -opentelemetry = "0.27.0" -opentelemetry-http = "0.27.0" -opentelemetry-otlp = "0.27.0" -opentelemetry-semantic-conventions = "0.27.0" -opentelemetry_sdk = "0.27.0" +opentelemetry = "0.28.0" +opentelemetry-http = "0.28.0" +opentelemetry-otlp = "0.28.0" +opentelemetry-semantic-conventions = "0.28.0" +opentelemetry_sdk = "0.28.0" os_str_bytes = "6.6" parking_lot = "0.12.3" path-clean = "0.1" @@ -108,8 +108,9 @@ quote = "1.0.37" redb = "2.1.2" regex = "1.10.6" reqwest = { version = "0.12.7", default-features = false } -reqwest-middleware = { version = "0.4.0", default-features = false } -reqwest-tracing = { version = "0.5.5", default-features = false } +# https://github.com/TrueLayer/reqwest-middleware/issues/220 +reqwest-middleware = { git = "https://github.com/TrueLayer/reqwest-middleware", rev = "9fdba406c124c567e2302f1aec63483ed7db63b1", default-features = false } +reqwest-tracing = { git = "https://github.com/TrueLayer/reqwest-middleware", rev = "9fdba406c124c567e2302f1aec63483ed7db63b1", default-features = false } rnix = "0.11.0" rowan = "0.15" # keep in sync with rnix rstest = "0.19.0" @@ -141,11 +142,11 @@ tonic-build = "0.12.2" tonic-health = { version = "0.12.2", default-features = false } tonic-reflection = "0.12.2" tower = "0.4.13" -tower-http = "0.5.2" -tower-otel-http-metrics = "0.10.0" +tower-http = "0.6.2" +tower-otel-http-metrics = "0.11.0" tracing = "0.1.40" tracing-indicatif = "0.3.6" -tracing-opentelemetry = "0.28.0" +tracing-opentelemetry = "0.29.0" tracing-subscriber = "0.3.18" tracing-test = "0.2.5" tracing-tracy = "0.11.2" diff --git a/tvix/crate-hashes.json b/tvix/crate-hashes.json index 11679cb2e..fbf986134 100644 --- a/tvix/crate-hashes.json +++ b/tvix/crate-hashes.json @@ -1,3 +1,5 @@ { + "git+https://github.com/TrueLayer/reqwest-middleware?rev=9fdba406c124c567e2302f1aec63483ed7db63b1#0.4.0": "0jn14w0pbixscp4vgcanpi36d7b9k5c2hvksa00l5xgsmkmxni7l", + "git+https://github.com/TrueLayer/reqwest-middleware?rev=9fdba406c124c567e2302f1aec63483ed7db63b1#reqwest-tracing@0.5.5": "0jn14w0pbixscp4vgcanpi36d7b9k5c2hvksa00l5xgsmkmxni7l", "git+https://github.com/tvlfyi/wu-manber.git#wu-manber@0.1.0": "1zhk83lbq99xzyjwphv2qrb8f8qgfqwa5bbbvyzm0z0bljsjv0pd" } \ No newline at end of file diff --git a/tvix/default.nix b/tvix/default.nix index 1b103c89b..edb03b073 100644 --- a/tvix/default.nix +++ b/tvix/default.nix @@ -18,6 +18,8 @@ let (k: (lib.nameValuePair "${crates.internal.crates.${k}.crateName}-${crates.internal.crates.${k}.version}" crates.internal.crates.${k}.src.outputHash) ) [ + "reqwest-middleware" + "reqwest-tracing" "wu-manber" ]); }; diff --git a/tvix/nix-daemon/src/bin/nix-daemon.rs b/tvix/nix-daemon/src/bin/nix-daemon.rs index c44ebd925..a4d808ff0 100644 --- a/tvix/nix-daemon/src/bin/nix-daemon.rs +++ b/tvix/nix-daemon/src/bin/nix-daemon.rs @@ -45,7 +45,7 @@ async fn main() -> Result<(), Box> { tokio::select! { res = tokio::signal::ctrl_c() => { res?; - if let Err(e) = tracing_handle.force_shutdown().await { + if let Err(e) = tracing_handle.shutdown().await { eprintln!("failed to shutdown tracing: {e}"); } Ok(()) diff --git a/tvix/store/src/bin/tvix-store.rs b/tvix/store/src/bin/tvix-store.rs index 764b327a4..eca703017 100644 --- a/tvix/store/src/bin/tvix-store.rs +++ b/tvix/store/src/bin/tvix-store.rs @@ -541,7 +541,7 @@ async fn main() -> Result<(), Box> { tokio::select! { res = tokio::signal::ctrl_c() => { res?; - if let Err(e) = tracing_handle.force_shutdown().await { + if let Err(e) = tracing_handle.shutdown().await { eprintln!("failed to shutdown tracing: {e}"); } Ok(()) diff --git a/tvix/tracing/Cargo.toml b/tvix/tracing/Cargo.toml index aa514fbe1..fb1846dcc 100644 --- a/tvix/tracing/Cargo.toml +++ b/tvix/tracing/Cargo.toml @@ -13,7 +13,7 @@ thiserror.workspace = true tracing-opentelemetry = { workspace = true, optional = true } opentelemetry = { workspace = true, optional = true } -opentelemetry-otlp = { workspace = true, optional = true } +opentelemetry-otlp = { workspace = true, features = ["grpc-tonic"], optional = true } opentelemetry_sdk = { workspace = true, features = ["rt-tokio"], optional = true } tracing-tracy = { workspace = true, features = ["flush-on-exit"], optional = true } opentelemetry-http = { workspace = true, optional = true } @@ -35,7 +35,7 @@ otlp = [ "dep:opentelemetry_sdk", "dep:opentelemetry-http", "dep:opentelemetry-semantic-conventions", - "reqwest-tracing?/opentelemetry_0_27", + "reqwest-tracing?/opentelemetry_0_28", ] tracy = [ "dep:tracing-tracy" diff --git a/tvix/tracing/src/lib.rs b/tvix/tracing/src/lib.rs index d48bac466..49a690a94 100644 --- a/tvix/tracing/src/lib.rs +++ b/tvix/tracing/src/lib.rs @@ -1,6 +1,5 @@ use indicatif::ProgressStyle; use std::sync::LazyLock; -use tokio::sync::{mpsc, oneshot}; use tracing::level_filters::LevelFilter; use tracing_indicatif::{ filter::IndicatifFilter, util::FilteredFormatFields, writer, IndicatifLayer, IndicatifWriter, @@ -11,13 +10,9 @@ use tracing_subscriber::{ EnvFilter, Layer, Registry, }; -#[cfg(feature = "otlp")] -use opentelemetry::{trace::Tracer, KeyValue}; #[cfg(feature = "otlp")] use opentelemetry_sdk::{ - propagation::TraceContextPropagator, - resource::{ResourceDetector, SdkProvidedResourceDetector}, - Resource, + propagation::TraceContextPropagator, resource::SdkProvidedResourceDetector, Resource, }; #[cfg(feature = "tracy")] use tracing_tracy::TracyLayer; @@ -48,22 +43,21 @@ pub enum Error { #[error(transparent)] Init(#[from] tracing_subscriber::util::TryInitError), + #[cfg(feature = "otlp")] #[error(transparent)] - MpscSend(#[from] mpsc::error::SendError>), - - #[error(transparent)] - OneshotRecv(#[from] oneshot::error::RecvError), + OTEL(#[from] opentelemetry_sdk::error::OTelSdkError), } #[derive(Clone)] pub struct TracingHandle { - #[cfg(feature = "otlp")] - /// A channel that can be sent to whenever traces/metrics should be flushed. - /// Once flushing is finished, the sent oneshot::Sender will get triggered. - flush_tx: Option>>, - stdout_writer: IndicatifWriter, stderr_writer: IndicatifWriter, + + #[cfg(feature = "otlp")] + meter_provider: Option, + + #[cfg(feature = "otlp")] + tracer_provider: Option, } impl TracingHandle { @@ -91,52 +85,31 @@ impl TracingHandle { /// It will wait until the flush is complete. pub async fn flush(&self) -> Result<(), Error> { #[cfg(feature = "otlp")] - if let Some(flush_tx) = &self.flush_tx { - let (tx, rx) = oneshot::channel(); - // Request the flush. - flush_tx.send(tx).await?; - - // Wait for it to be done. - rx.await?; + { + if let Some(tracer_provider) = &self.tracer_provider { + tracer_provider.force_flush()?; + } + if let Some(meter_provider) = &self.meter_provider { + meter_provider.force_flush()?; + } } Ok(()) } - /// This will flush all all attached tracing providers and will wait until the flush is completed. + /// This will flush all attached tracing providers and will wait until the flush is completed, then call shutdown. /// If no tracing providers like otlp are attached then this will be a noop. /// /// This should only be called on a regular shutdown. - /// If you correctly need to shutdown tracing on ctrl_c use [force_shutdown](#method.force_shutdown) - /// otherwise you will get otlp errors. pub async fn shutdown(&self) -> Result<(), Error> { - self.flush().await - } - - /// This will flush all all attached tracing providers and will wait until the flush is completed. - /// After this it will do some other necessary cleanup. - /// If no tracing providers like otlp are attached then this will be a noop. - /// - /// This should only be used if the tool received an ctrl_c otherwise you will get otlp errors. - /// If you need to shutdown tracing on a regular exit, you should use the [shutdown](#method.shutdown) - /// method. - pub async fn force_shutdown(&self) -> Result<(), Error> { self.flush().await?; - #[cfg(feature = "otlp")] { - // Because of a bug within otlp we currently have to use spawn_blocking otherwise - // calling `shutdown_tracer_provider` can block forever. See - // https://github.com/open-telemetry/opentelemetry-rust/issues/1395#issuecomment-1953280335 - // - // This still throws an error, if the tool exits regularly: "OpenTelemetry trace error - // occurred. oneshot canceled", but not having this leads to errors if we cancel with - // ctrl_c. - // So this should right now only be used on ctrl_c, for a regular exit use the - // [shutdown](#shutdown) method - let _ = tokio::task::spawn_blocking(move || { - opentelemetry::global::shutdown_tracer_provider(); - }) - .await; + if let Some(tracer_provider) = &self.tracer_provider { + tracer_provider.shutdown()?; + } + if let Some(meter_provider) = &self.meter_provider { + meter_provider.shutdown()?; + } } Ok(()) @@ -216,26 +189,34 @@ impl TracingBuilder { let layered = layered.and_then(TracyLayer::default()); #[cfg(feature = "otlp")] - let mut flush_tx: Option>> = None; + let mut g_tracer_provider = None; + #[cfg(feature = "otlp")] + let mut g_meter_provider = None; // Setup otlp if a service_name is configured #[cfg(feature = "otlp")] let layered = layered.and_then({ - if let Some(service_name) = self.service_name { + if let Some(service_name) = self.service_name.map(String::from) { + use opentelemetry::trace::TracerProvider; + // register a text map propagator for trace propagation opentelemetry::global::set_text_map_propagator(TraceContextPropagator::new()); - let (tracer, meter_provider, sender) = - gen_otlp_tracer_meter_provider(service_name.to_string()); + let tracer_provider = gen_tracer_provider(service_name.clone()) + .expect("Unable to configure trace provider"); - flush_tx = Some(sender); + let meter_provider = + gen_meter_provider(service_name).expect("Unable to configure meter provider"); // Register the returned meter provider as the global one. - // FUTUREWORK: store in the struct and provide getter instead? - opentelemetry::global::set_meter_provider(meter_provider); + // FUTUREWORK: store in the struct and provide getter too? + opentelemetry::global::set_meter_provider(meter_provider.clone()); + + g_tracer_provider = Some(tracer_provider.clone()); + g_meter_provider = Some(meter_provider.clone()); // Create a tracing layer with the configured tracer - Some(tracing_opentelemetry::layer().with_tracer(tracer)) + Some(tracing_opentelemetry::layer().with_tracer(tracer_provider.tracer("tvix"))) } else { None } @@ -256,10 +237,13 @@ impl TracingBuilder { .try_init()?; Ok(TracingHandle { - #[cfg(feature = "otlp")] - flush_tx, stdout_writer, stderr_writer, + + #[cfg(feature = "otlp")] + meter_provider: g_meter_provider, + #[cfg(feature = "otlp")] + tracer_provider: g_tracer_provider, }) } } @@ -269,18 +253,11 @@ fn gen_resources(service_name: String) -> Resource { // use SdkProvidedResourceDetector.detect to detect resources, // but replace the default service name with our default. // https://github.com/open-telemetry/opentelemetry-rust/issues/1298 - - let resources = SdkProvidedResourceDetector.detect(std::time::Duration::from_secs(0)); - // SdkProvidedResourceDetector currently always sets - // `service.name`, but we don't like its default. - if resources.get("service.name".into()).unwrap() == "unknown_service".into() { - resources.merge(&Resource::new([KeyValue::new( - opentelemetry_semantic_conventions::resource::SERVICE_NAME, - service_name, - )])) - } else { - resources - } + // + Resource::builder() + .with_service_name(service_name) + .with_detector(Box::new(SdkProvidedResourceDetector)) + .build() } /// Returns an OTLP tracer, and the TX part of a channel, which can be used @@ -288,17 +265,18 @@ fn gen_resources(service_name: String) -> Resource { #[cfg(feature = "otlp")] fn gen_tracer_provider( service_name: String, -) -> Result { - use opentelemetry_otlp::SpanExporter; - use opentelemetry_sdk::{runtime, trace::TracerProvider}; +) -> Result { + use opentelemetry_otlp::{ExportConfig, SpanExporter, WithExportConfig}; - let exporter = SpanExporter::builder().with_tonic().build()?; + let exporter = SpanExporter::builder() + .with_tonic() + .with_export_config(ExportConfig::default()) + .build()?; - let tracer_provider = TracerProvider::builder() - .with_batch_exporter(exporter, runtime::Tokio) + let tracer_provider = opentelemetry_sdk::trace::SdkTracerProvider::builder() + .with_batch_exporter(exporter) .with_resource(gen_resources(service_name)) .build(); - // Unclear how to configure this // let batch_config = BatchConfigBuilder::default() // // the default values for `max_export_batch_size` is set to 512, which we will fill @@ -321,6 +299,14 @@ fn gen_tracer_provider( Ok(tracer_provider) } +// Metric export interval should be less than or equal to 15s +// if the metrics may be converted to Prometheus metrics. +// Prometheus' query engine and compatible implementations +// require ~4 data points / interval for range queries, +// so queries ranging over 1m requre <= 15s scrape intervals. +// OTEL SDKS also respect the env var `OTEL_METRIC_EXPORT_INTERVAL` (no underscore prefix). +const _OTEL_METRIC_EXPORT_INTERVAL: std::time::Duration = std::time::Duration::from_secs(10); + #[cfg(feature = "otlp")] fn gen_meter_provider( service_name: String, @@ -328,76 +314,18 @@ fn gen_meter_provider( use std::time::Duration; use opentelemetry_otlp::WithExportConfig; - use opentelemetry_sdk::{ - metrics::{PeriodicReader, SdkMeterProvider}, - runtime, - }; + use opentelemetry_sdk::metrics::{PeriodicReader, SdkMeterProvider}; let exporter = opentelemetry_otlp::MetricExporter::builder() .with_tonic() .with_timeout(Duration::from_secs(10)) .build()?; + let reader = PeriodicReader::builder(exporter) + .with_interval(_OTEL_METRIC_EXPORT_INTERVAL) + .build(); + Ok(SdkMeterProvider::builder() - .with_reader( - PeriodicReader::builder(exporter, runtime::Tokio) - .with_interval(Duration::from_secs(3)) - .with_timeout(Duration::from_secs(10)) - .build(), - ) + .with_reader(reader) .with_resource(gen_resources(service_name)) .build()) } - -/// Returns an OTLP tracer, and a meter provider, as well as the TX part -/// of a channel, which can be used to request flushes (and signal back the -/// completion of the flush). -#[cfg(feature = "otlp")] -fn gen_otlp_tracer_meter_provider( - service_name: String, -) -> ( - impl Tracer + tracing_opentelemetry::PreSampledTracer, - opentelemetry_sdk::metrics::SdkMeterProvider, - mpsc::Sender>, -) { - use opentelemetry::trace::TracerProvider; - let tracer_provider = - gen_tracer_provider(service_name.clone()).expect("Unable to configure trace provider"); - let meter_provider = - gen_meter_provider(service_name).expect("Unable to configure meter provider"); - - // tracer_provider needs to be kept around so we can request flushes later. - let tracer = tracer_provider.tracer("tvix"); - - // Set up a channel for flushing trace providers later - let (flush_tx, mut flush_rx) = mpsc::channel::>(16); - - // Spawning a task that listens on rx for any message. Once we receive a message we - // correctly call flush on the tracer_provider. - tokio::spawn({ - let meter_provider = meter_provider.clone(); - - async move { - while let Some(m) = flush_rx.recv().await { - // Because of a bug within otlp we currently have to use spawn_blocking - // otherwise will calling `force_flush` block forever, especially if the - // tool was closed with ctrl_c. See - // https://github.com/open-telemetry/opentelemetry-rust/issues/1395#issuecomment-1953280335 - let _ = tokio::task::spawn_blocking({ - let tracer_provider = tracer_provider.clone(); - let meter_provider = meter_provider.clone(); - - move || { - tracer_provider.force_flush(); - if let Err(e) = meter_provider.force_flush() { - eprintln!("failed to flush meter provider: {}", e); - } - } - }) - .await; - let _ = m.send(()); - } - } - }); - - (tracer, meter_provider, flush_tx) -} diff --git a/users/edef/weave/Cargo.nix b/users/edef/weave/Cargo.nix index c4a52ad1b..f79b7a803 100644 --- a/users/edef/weave/Cargo.nix +++ b/users/edef/weave/Cargo.nix @@ -7193,7 +7193,7 @@ rec { ]; features = { "axum" = [ "dep:axum" ]; - "otlp" = [ "dep:tracing-opentelemetry" "dep:opentelemetry" "dep:opentelemetry-otlp" "dep:opentelemetry_sdk" "dep:opentelemetry-http" "dep:opentelemetry-semantic-conventions" "reqwest-tracing?/opentelemetry_0_27" ]; + "otlp" = [ "dep:tracing-opentelemetry" "dep:opentelemetry" "dep:opentelemetry-otlp" "dep:opentelemetry_sdk" "dep:opentelemetry-http" "dep:opentelemetry-semantic-conventions" "reqwest-tracing?/opentelemetry_0_28" ]; "reqwest" = [ "dep:reqwest-tracing" ]; "tonic" = [ "dep:tonic" "dep:http" ]; "tracy" = [ "dep:tracing-tracy" ];