From 904d563ec33e9621e3923bfee4cd8f5c315b6f6b Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Sun, 22 Jan 2023 23:44:40 +0000 Subject: [PATCH 01/12] Cargo.toml: Updated opentelemetry to 0.18. --- Cargo.lock | 215 ++++++++++++++++++++++++++++++++++-------- src/api/Cargo.toml | 4 +- src/block/Cargo.toml | 2 +- src/garage/Cargo.toml | 6 +- src/model/Cargo.toml | 2 +- src/rpc/Cargo.toml | 2 +- src/table/Cargo.toml | 2 +- src/util/Cargo.toml | 2 +- src/web/Cargo.toml | 2 +- 9 files changed, 185 insertions(+), 52 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4fddd215..3613a12e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -384,6 +384,52 @@ dependencies = [ "zeroize", ] +[[package]] +name = "axum" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5694b64066a2459918d8074c2ce0d5a88f409431994c2356617c8ae0c4721fc" +dependencies = [ + "async-trait", + "axum-core", + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-http", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cae3e661676ffbacb30f1a824089a8c9150e71017f7e1e38f2aa32009188d34" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + [[package]] name = "backoff" version = "0.4.0" @@ -794,12 +840,15 @@ dependencies = [ [[package]] name = "dashmap" -version = "4.0.2" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" +checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" dependencies = [ "cfg-if", - "num_cpus", + "hashbrown", + "lock_api", + "once_cell", + "parking_lot_core 0.9.6", ] [[package]] @@ -1101,7 +1150,7 @@ dependencies = [ "hyper", "kuska-sodiumoxide", "netapp", - "opentelemetry", + "opentelemetry 0.18.0", "opentelemetry-otlp", "opentelemetry-prometheus", "parse_duration", @@ -1148,7 +1197,7 @@ dependencies = [ "md-5 0.10.5", "multer", "nom", - "opentelemetry", + "opentelemetry 0.18.0", "opentelemetry-prometheus", "percent-encoding", "pin-project", @@ -1180,7 +1229,7 @@ dependencies = [ "garage_table", "garage_util", "hex", - "opentelemetry", + "opentelemetry 0.18.0", "rand", "serde", "serde_bytes", @@ -1223,7 +1272,7 @@ dependencies = [ "garage_util", "hex", "netapp", - "opentelemetry", + "opentelemetry 0.18.0", "rand", "serde", "serde_bytes", @@ -1249,7 +1298,7 @@ dependencies = [ "kube", "kuska-sodiumoxide", "netapp", - "opentelemetry", + "opentelemetry 0.18.0", "pnet_datalink", "rand", "reqwest", @@ -1277,7 +1326,7 @@ dependencies = [ "garage_util", "hex", "hexdump", - "opentelemetry", + "opentelemetry 0.18.0", "rand", "serde", "serde_bytes", @@ -1306,7 +1355,7 @@ dependencies = [ "lazy_static", "mktemp", "netapp", - "opentelemetry", + "opentelemetry 0.18.0", "rand", "rmp-serde", "serde", @@ -1330,7 +1379,7 @@ dependencies = [ "garage_util", "http", "hyper", - "opentelemetry", + "opentelemetry 0.18.0", "percent-encoding", "tracing", ] @@ -2085,6 +2134,12 @@ dependencies = [ "regex-automata", ] +[[package]] +name = "matchit" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" + [[package]] name = "md-5" version = "0.9.1" @@ -2202,7 +2257,7 @@ dependencies = [ "kuska-handshake", "kuska-sodiumoxide", "log", - "opentelemetry", + "opentelemetry 0.17.0", "opentelemetry-contrib", "pin-project", "rand", @@ -2364,8 +2419,6 @@ checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8" dependencies = [ "async-trait", "crossbeam-channel", - "dashmap", - "fnv", "futures-channel", "futures-executor", "futures-util", @@ -2375,8 +2428,16 @@ dependencies = [ "pin-project", "rand", "thiserror", - "tokio", - "tokio-stream", +] + +[[package]] +name = "opentelemetry" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d6c3d7288a106c0a363e4b0e8d308058d56902adefb16f4936f417ffef086e" +dependencies = [ + "opentelemetry_api", + "opentelemetry_sdk", ] [[package]] @@ -2386,36 +2447,88 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85637add8f60bb4cac673469c14f47a329c6cec7365c72d72cd32f2d104a721a" dependencies = [ "lazy_static", - "opentelemetry", + "opentelemetry 0.17.0", ] [[package]] name = "opentelemetry-otlp" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1a6ca9de4c8b00aa7f1a153bd76cb263287155cec642680d79d98706f3d28a" +checksum = "d1c928609d087790fc936a1067bdc310ae702bdf3b090c3f281b713622c8bbde" dependencies = [ "async-trait", "futures", "futures-util", "http", - "opentelemetry", + "opentelemetry 0.18.0", + "opentelemetry-proto", "prost", "thiserror", "tokio", "tonic", +] + +[[package]] +name = "opentelemetry-prometheus" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06c3d833835a53cf91331d2cfb27e9121f5a95261f31f08a1f79ab31688b8da8" +dependencies = [ + "opentelemetry 0.18.0", + "prometheus", + "protobuf", +] + +[[package]] +name = "opentelemetry-proto" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61a2f56df5574508dd86aaca016c917489e589ece4141df1b5e349af8d66c28" +dependencies = [ + "futures", + "futures-util", + "opentelemetry 0.18.0", + "prost", + "tonic", "tonic-build", ] [[package]] -name = "opentelemetry-prometheus" -version = "0.10.0" +name = "opentelemetry_api" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9328977e479cebe12ce0d3fcecdaea4721d234895a9440c5b5dfd113f0594ac6" +checksum = "c24f96e21e7acc813c7a8394ee94978929db2bcc46cf6b5014fc612bf7760c22" dependencies = [ - "opentelemetry", - "prometheus", - "protobuf", + "fnv", + "futures-channel", + "futures-util", + "indexmap", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca41c4933371b61c2a2f214bf16931499af4ec90543604ec828f7a625c09113" +dependencies = [ + "async-trait", + "crossbeam-channel", + "dashmap", + "fnv", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "percent-encoding", + "rand", + "thiserror", + "tokio", + "tokio-stream", ] [[package]] @@ -2640,6 +2753,16 @@ dependencies = [ "log", ] +[[package]] +name = "prettyplease" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -2696,9 +2819,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.9.0" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" +checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698" dependencies = [ "bytes", "prost-derive", @@ -2706,29 +2829,31 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.9.0" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" +checksum = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e" dependencies = [ "bytes", - "heck 0.3.3", + "heck 0.4.0", "itertools 0.10.5", "lazy_static", "log", "multimap", "petgraph", + "prettyplease", "prost", "prost-types", "regex", + "syn", "tempfile", "which", ] [[package]] name = "prost-derive" -version = "0.9.0" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" +checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d" dependencies = [ "anyhow", "itertools 0.10.5", @@ -2739,9 +2864,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.9.0" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" +checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788" dependencies = [ "bytes", "prost", @@ -3530,6 +3655,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" + [[package]] name = "synchronoise" version = "1.0.1" @@ -3700,7 +3831,6 @@ dependencies = [ "memchr", "mio", "num_cpus", - "parking_lot 0.12.1", "pin-project-lite", "signal-hook-registry", "socket2", @@ -3828,12 +3958,13 @@ dependencies = [ [[package]] name = "tonic" -version = "0.6.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a" +checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" dependencies = [ "async-stream", "async-trait", + "axum", "base64 0.13.1", "bytes", "futures-core", @@ -3849,7 +3980,7 @@ dependencies = [ "prost-derive", "tokio", "tokio-stream", - "tokio-util 0.6.10", + "tokio-util 0.7.4", "tower", "tower-layer", "tower-service", @@ -3859,10 +3990,11 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.6.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757" +checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" dependencies = [ + "prettyplease", "proc-macro2", "prost-build", "quote", @@ -3904,6 +4036,7 @@ dependencies = [ "http-body", "http-range-header", "pin-project-lite", + "tower", "tower-layer", "tower-service", "tracing", diff --git a/src/api/Cargo.toml b/src/api/Cargo.toml index 24c48604..77196a9c 100644 --- a/src/api/Cargo.toml +++ b/src/api/Cargo.toml @@ -54,8 +54,8 @@ serde_json = "1.0" quick-xml = { version = "0.21", features = [ "serialize" ] } url = "2.3" -opentelemetry = "0.17" -opentelemetry-prometheus = { version = "0.10", optional = true } +opentelemetry = "0.18" +opentelemetry-prometheus = { version = "0.11", optional = true } prometheus = { version = "0.13", optional = true } [features] diff --git a/src/block/Cargo.toml b/src/block/Cargo.toml index a7e8bc2c..f1b816c6 100644 --- a/src/block/Cargo.toml +++ b/src/block/Cargo.toml @@ -19,7 +19,7 @@ garage_rpc = { version = "0.8.1", path = "../rpc" } garage_util = { version = "0.8.1", path = "../util" } garage_table = { version = "0.8.1", path = "../table" } -opentelemetry = "0.17" +opentelemetry = "0.18" arc-swap = "1.5" async-trait = "0.1.7" diff --git a/src/garage/Cargo.toml b/src/garage/Cargo.toml index f938f356..c9361ea3 100644 --- a/src/garage/Cargo.toml +++ b/src/garage/Cargo.toml @@ -53,9 +53,9 @@ tokio = { version = "1.0", default-features = false, features = ["rt", "rt-multi netapp = "0.5" -opentelemetry = { version = "0.17", features = [ "rt-tokio" ] } -opentelemetry-prometheus = { version = "0.10", optional = true } -opentelemetry-otlp = { version = "0.10", optional = true } +opentelemetry = { version = "0.18", features = [ "rt-tokio" ] } +opentelemetry-prometheus = { version = "0.11", optional = true } +opentelemetry-otlp = { version = "0.11", optional = true } prometheus = { version = "0.13", optional = true } [dev-dependencies] diff --git a/src/model/Cargo.toml b/src/model/Cargo.toml index d1c7cd29..f72d27f2 100644 --- a/src/model/Cargo.toml +++ b/src/model/Cargo.toml @@ -36,7 +36,7 @@ serde_bytes = "0.11" futures = "0.3" futures-util = "0.3" tokio = { version = "1.0", default-features = false, features = ["rt", "rt-multi-thread", "io-util", "net", "time", "macros", "sync", "signal", "fs"] } -opentelemetry = "0.17" +opentelemetry = "0.18" netapp = "0.5" diff --git a/src/rpc/Cargo.toml b/src/rpc/Cargo.toml index 87ae15ac..f4ee8315 100644 --- a/src/rpc/Cargo.toml +++ b/src/rpc/Cargo.toml @@ -44,7 +44,7 @@ futures = "0.3" futures-util = "0.3" tokio = { version = "1.0", default-features = false, features = ["rt", "rt-multi-thread", "io-util", "net", "time", "macros", "sync", "signal", "fs"] } tokio-stream = { version = "0.1", features = ["net"] } -opentelemetry = "0.17" +opentelemetry = "0.18" netapp = { version = "0.5.2", features = ["telemetry"] } diff --git a/src/table/Cargo.toml b/src/table/Cargo.toml index a8127f50..3d74f6f4 100644 --- a/src/table/Cargo.toml +++ b/src/table/Cargo.toml @@ -18,7 +18,7 @@ garage_db = { version = "0.8.1", path = "../db" } garage_rpc = { version = "0.8.1", path = "../rpc" } garage_util = { version = "0.8.1", path = "../util" } -opentelemetry = "0.17" +opentelemetry = "0.18" async-trait = "0.1.7" arc-swap = "1.0" diff --git a/src/util/Cargo.toml b/src/util/Cargo.toml index abeccbbd..4b766cdc 100644 --- a/src/util/Cargo.toml +++ b/src/util/Cargo.toml @@ -45,7 +45,7 @@ netapp = "0.5" http = "0.2" hyper = "0.14" -opentelemetry = { version = "0.17", features = [ "rt-tokio", "metrics", "trace" ] } +opentelemetry = { version = "0.18", features = [ "rt-tokio", "metrics", "trace" ] } [dev-dependencies] mktemp = "0.5" diff --git a/src/web/Cargo.toml b/src/web/Cargo.toml index 19eaed17..fd041d95 100644 --- a/src/web/Cargo.toml +++ b/src/web/Cargo.toml @@ -28,4 +28,4 @@ futures = "0.3" http = "0.2" hyper = { version = "0.14", features = ["server", "http1", "runtime", "tcp", "stream"] } -opentelemetry = "0.17" +opentelemetry = "0.18" -- 2.43.0 From 5ec3bde885e41827a610598d849c2c84559b663c Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Sun, 22 Jan 2023 23:45:51 +0000 Subject: [PATCH 02/12] util/metrics.rs: Ported to opentelemetry 0.18. --- src/util/metrics.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/util/metrics.rs b/src/util/metrics.rs index b882a886..2ba1ed63 100644 --- a/src/util/metrics.rs +++ b/src/util/metrics.rs @@ -3,17 +3,17 @@ use std::time::Instant; use futures::{future::BoxFuture, Future, FutureExt}; use rand::Rng; -use opentelemetry::{metrics::*, trace::TraceId, KeyValue}; +use opentelemetry::{metrics::*, trace::TraceId, Context, KeyValue}; pub trait RecordDuration<'a>: 'a { type Output; fn record_duration( self, - r: &'a ValueRecorder, + r: &'a Histogram, attributes: &'a [KeyValue], ) -> BoxFuture<'a, Self::Output>; - fn bound_record_duration(self, r: &'a BoundValueRecorder) -> BoxFuture<'a, Self::Output>; + fn bound_record_duration(self, r: &'a Histogram) -> BoxFuture<'a, Self::Output>; } impl<'a, T, O> RecordDuration<'a> for T @@ -24,13 +24,14 @@ where fn record_duration( self, - r: &'a ValueRecorder, + r: &'a Histogram, attributes: &'a [KeyValue], ) -> BoxFuture<'a, Self::Output> { async move { let request_start = Instant::now(); let res = self.await; r.record( + &Context::current(), Instant::now() .saturating_duration_since(request_start) .as_secs_f64(), @@ -41,14 +42,16 @@ where .boxed() } - fn bound_record_duration(self, r: &'a BoundValueRecorder) -> BoxFuture<'a, Self::Output> { + fn bound_record_duration(self, r: &'a Histogram) -> BoxFuture<'a, Self::Output> { async move { let request_start = Instant::now(); let res = self.await; r.record( + &Context::current(), Instant::now() .saturating_duration_since(request_start) .as_secs_f64(), + &[], ); res } -- 2.43.0 From aea585b504b4d26db038e6f94002651e242fe47f Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Sun, 22 Jan 2023 23:51:28 +0000 Subject: [PATCH 03/12] rpc/system_metrics.rs: Ported to opentelemetry 0.18. --- src/rpc/system.rs | 53 ++++++++++++++++++++----------- src/rpc/system_metrics.rs | 65 +++++++-------------------------------- 2 files changed, 46 insertions(+), 72 deletions(-) diff --git a/src/rpc/system.rs b/src/rpc/system.rs index b42e49fc..016a406c 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -3,7 +3,6 @@ use std::collections::HashMap; use std::io::{Read, Write}; use std::net::{IpAddr, SocketAddr}; use std::path::{Path, PathBuf}; -use std::sync::atomic::Ordering; use std::sync::{Arc, RwLock}; use std::time::{Duration, Instant}; @@ -11,6 +10,7 @@ use arc_swap::ArcSwap; use async_trait::async_trait; use futures::{join, select}; use futures_util::future::*; +use opentelemetry::{Context, KeyValue}; use serde::{Deserialize, Serialize}; use sodiumoxide::crypto::sign::ed25519; use tokio::sync::watch; @@ -248,7 +248,12 @@ impl System { replication_mode: ReplicationMode, config: &Config, ) -> Result, Error> { + let metrics = SystemMetrics::new(); + let replication_factor = replication_mode.replication_factor(); + metrics + ._replication_factor + .observe(&Context::current(), replication_factor as u64, &[]); let node_key = gen_node_key(&config.metadata_dir).expect("Unable to read or generate node ID"); @@ -281,7 +286,14 @@ impl System { } }; - let metrics = SystemMetrics::new(replication_factor); + metrics._garage_build_info.observe( + &Context::current(), + 1, + &[KeyValue::new( + "version", + garage_util::version::garage_version(), + )], + ); let mut local_status = NodeStatus::initial(replication_factor, &cluster_layout); local_status.update_disk_usage(&config.metadata_dir, &config.data_dir, &metrics); @@ -892,6 +904,7 @@ impl NodeStatus { fn update_disk_usage(&mut self, meta_dir: &Path, data_dir: &Path, metrics: &SystemMetrics) { use systemstat::{Platform, System}; + let mounts = System::new().mounts().unwrap_or_default(); let mount_avail = |path: &Path| { @@ -906,24 +919,28 @@ impl NodeStatus { self.data_disk_avail = mount_avail(data_dir); if let Some((avail, total)) = self.meta_disk_avail { - metrics - .values - .meta_disk_avail - .store(avail, Ordering::Relaxed); - metrics - .values - .meta_disk_total - .store(total, Ordering::Relaxed); + metrics._disk_avail.observe( + &Context::current(), + avail, + &[KeyValue::new("volume", "meta")], + ); + metrics._disk_total.observe( + &Context::current(), + total, + &[KeyValue::new("volume", "meta")], + ); } if let Some((avail, total)) = self.data_disk_avail { - metrics - .values - .data_disk_avail - .store(avail, Ordering::Relaxed); - metrics - .values - .data_disk_total - .store(total, Ordering::Relaxed); + metrics._disk_avail.observe( + &Context::current(), + avail, + &[KeyValue::new("volume", "data")], + ); + metrics._disk_total.observe( + &Context::current(), + total, + &[KeyValue::new("volume", "data")], + ); } } } diff --git a/src/rpc/system_metrics.rs b/src/rpc/system_metrics.rs index 83f5fa97..9c3d039b 100644 --- a/src/rpc/system_metrics.rs +++ b/src/rpc/system_metrics.rs @@ -1,77 +1,34 @@ -use std::sync::atomic::{AtomicU64, Ordering}; -use std::sync::Arc; - -use opentelemetry::{global, metrics::*, KeyValue}; +use opentelemetry::{global, metrics::*}; /// TableMetrics reference all counter used for metrics pub struct SystemMetrics { - pub(crate) _garage_build_info: ValueObserver, - pub(crate) _replication_factor: ValueObserver, - pub(crate) _disk_avail: ValueObserver, - pub(crate) _disk_total: ValueObserver, - pub(crate) values: Arc, -} - -#[derive(Default)] -pub struct SystemMetricsValues { - pub(crate) data_disk_total: AtomicU64, - pub(crate) data_disk_avail: AtomicU64, - pub(crate) meta_disk_total: AtomicU64, - pub(crate) meta_disk_avail: AtomicU64, + pub(crate) _garage_build_info: ObservableGauge, + pub(crate) _replication_factor: ObservableGauge, + pub(crate) _disk_avail: ObservableGauge, + pub(crate) _disk_total: ObservableGauge, } impl SystemMetrics { - pub fn new(replication_factor: usize) -> Self { + pub fn new() -> Self { let meter = global::meter("garage_system"); - let values = Arc::new(SystemMetricsValues::default()); - let values1 = values.clone(); - let values2 = values.clone(); + Self { _garage_build_info: meter - .u64_value_observer("garage_build_info", move |observer| { - observer.observe( - 1, - &[KeyValue::new( - "version", - garage_util::version::garage_version(), - )], - ) - }) + .u64_observable_gauge("garage_build_info") .with_description("Garage build info") .init(), _replication_factor: meter - .u64_value_observer("garage_replication_factor", move |observer| { - observer.observe(replication_factor as u64, &[]) - }) + .u64_observable_gauge("garage_replication_factor") .with_description("Garage replication factor setting") .init(), _disk_avail: meter - .u64_value_observer("garage_local_disk_avail", move |observer| { - match values1.data_disk_avail.load(Ordering::Relaxed) { - 0 => (), - x => observer.observe(x, &[KeyValue::new("volume", "data")]), - }; - match values1.meta_disk_avail.load(Ordering::Relaxed) { - 0 => (), - x => observer.observe(x, &[KeyValue::new("volume", "metadata")]), - }; - }) + .u64_observable_gauge("garage_local_disk_avail") .with_description("Garage available disk space on each node") .init(), _disk_total: meter - .u64_value_observer("garage_local_disk_total", move |observer| { - match values2.data_disk_total.load(Ordering::Relaxed) { - 0 => (), - x => observer.observe(x, &[KeyValue::new("volume", "data")]), - }; - match values2.meta_disk_total.load(Ordering::Relaxed) { - 0 => (), - x => observer.observe(x, &[KeyValue::new("volume", "metadata")]), - }; - }) + .u64_observable_gauge("garage_local_disk_total") .with_description("Garage total disk space on each node") .init(), - values, } } } -- 2.43.0 From 8d8023b39aed1c1709aad0425ad556442fa296f1 Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Thu, 26 Jan 2023 17:32:02 +0000 Subject: [PATCH 04/12] rpc/system_metrics.rs: Adjusted disk space metric names to match node_exporter filesystem ones. --- src/rpc/system_metrics.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rpc/system_metrics.rs b/src/rpc/system_metrics.rs index 9c3d039b..7a3a84cf 100644 --- a/src/rpc/system_metrics.rs +++ b/src/rpc/system_metrics.rs @@ -22,11 +22,11 @@ impl SystemMetrics { .with_description("Garage replication factor setting") .init(), _disk_avail: meter - .u64_observable_gauge("garage_local_disk_avail") + .u64_observable_gauge("garage_local_disk_avail_bytes") .with_description("Garage available disk space on each node") .init(), _disk_total: meter - .u64_observable_gauge("garage_local_disk_total") + .u64_observable_gauge("garage_local_size_bytes") .with_description("Garage total disk space on each node") .init(), } -- 2.43.0 From 045b93bd11d0756272f86767d037e8b99c59c2d6 Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Sun, 22 Jan 2023 23:46:26 +0000 Subject: [PATCH 05/12] rpc/metrics.rs: ValueRecorder -> Histogram. --- src/rpc/metrics.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rpc/metrics.rs b/src/rpc/metrics.rs index 61f8fa79..74425fbe 100644 --- a/src/rpc/metrics.rs +++ b/src/rpc/metrics.rs @@ -7,7 +7,7 @@ pub struct RpcMetrics { pub(crate) rpc_netapp_error_counter: Counter, pub(crate) rpc_garage_error_counter: Counter, - pub(crate) rpc_duration: ValueRecorder, + pub(crate) rpc_duration: Histogram, } impl RpcMetrics { pub fn new() -> Self { @@ -30,7 +30,7 @@ impl RpcMetrics { .with_description("Number of RPC errors (errors happening when handling the RPC)") .init(), rpc_duration: meter - .f64_value_recorder("rpc.duration") + .f64_histogram("rpc.duration") .with_description("Duration of RPCs") .init(), } -- 2.43.0 From 3131052678cf117eb5d33d8c67928943c12b96cb Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Fri, 27 Jan 2023 16:42:06 +0000 Subject: [PATCH 06/12] api/generic_server.rs: Ported to opentelemetry 0.18. --- src/api/generic_server.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/api/generic_server.rs b/src/api/generic_server.rs index 62fe4e5a..cb7ee63f 100644 --- a/src/api/generic_server.rs +++ b/src/api/generic_server.rs @@ -13,7 +13,7 @@ use hyper::{HeaderMap, StatusCode}; use opentelemetry::{ global, - metrics::{Counter, ValueRecorder}, + metrics::{Counter, Histogram}, trace::{FutureExt, SpanRef, TraceContextExt, Tracer}, Context, KeyValue, }; @@ -55,7 +55,7 @@ pub(crate) struct ApiServer { // Metrics request_counter: Counter, error_counter: Counter, - request_duration: ValueRecorder, + request_duration: Histogram, } impl ApiServer { @@ -79,7 +79,7 @@ impl ApiServer { )) .init(), request_duration: meter - .f64_value_recorder(format!("api.{}.request_duration", A::API_NAME)) + .f64_histogram(format!("api.{}.request_duration", A::API_NAME)) .with_description(format!( "Duration of API calls to the various {} API endpoints", A::API_NAME_DISPLAY @@ -190,7 +190,8 @@ impl ApiServer { .record_duration(&self.request_duration, &metrics_tags[..]) .await; - self.request_counter.add(1, &metrics_tags[..]); + self.request_counter + .add(¤t_context, 1, &metrics_tags[..]); let status_code = match &res { Ok(r) => r.status(), @@ -198,6 +199,7 @@ impl ApiServer { }; if status_code.is_client_error() || status_code.is_server_error() { self.error_counter.add( + ¤t_context, 1, &[ metrics_tags[0].clone(), -- 2.43.0 From 0a3d3329663f9aeeb4a30c5aa641c10dfd197c07 Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Fri, 27 Jan 2023 16:45:52 +0000 Subject: [PATCH 07/12] rpc/rpc_helper.rs: Ported to opentelemetry 0.18. --- src/rpc/rpc_helper.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs index e59c372a..64c06da1 100644 --- a/src/rpc/rpc_helper.rs +++ b/src/rpc/rpc_helper.rs @@ -136,7 +136,10 @@ impl RpcHelper { KeyValue::new("to", format!("{:?}", to)), ]; - self.0.metrics.rpc_counter.add(1, &metric_tags); + self.0 + .metrics + .rpc_counter + .add(&Context::current(), 1, &metric_tags); let node_id = to.into(); let rpc_call = endpoint @@ -154,18 +157,18 @@ impl RpcHelper { select! { res = rpc_call => { if res.is_err() { - self.0.metrics.rpc_netapp_error_counter.add(1, &metric_tags); + self.0.metrics.rpc_netapp_error_counter.add(&Context::current(), 1, &metric_tags); } let res = res?.into_msg(); if res.is_err() { - self.0.metrics.rpc_garage_error_counter.add(1, &metric_tags); + self.0.metrics.rpc_garage_error_counter.add(&Context::current(), 1, &metric_tags); } Ok(res?) } () = timeout => { - self.0.metrics.rpc_timeout_counter.add(1, &metric_tags); + self.0.metrics.rpc_timeout_counter.add(&Context::current(), 1, &metric_tags); Err(Error::Timeout) } } -- 2.43.0 From 1e6e8db264942701db2151c6aa030734cb54dd73 Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Fri, 27 Jan 2023 17:04:16 +0000 Subject: [PATCH 08/12] block: Ported to opentelemetry 0.18. --- src/block/manager.rs | 29 +++++++++----- src/block/metrics.rs | 94 ++++++++++++++++---------------------------- src/block/resync.rs | 24 +++++++---- 3 files changed, 69 insertions(+), 78 deletions(-) diff --git a/src/block/manager.rs b/src/block/manager.rs index 051a9f93..6fc8b741 100644 --- a/src/block/manager.rs +++ b/src/block/manager.rs @@ -129,12 +129,17 @@ impl BlockManager { .netapp .endpoint("garage_block/manager.rs/Rpc".to_string()); - let metrics = BlockManagerMetrics::new( - compression_level, - rc.rc.clone(), - resync.queue.clone(), - resync.errors.clone(), - ); + let metrics = + BlockManagerMetrics::new(rc.rc.clone(), resync.queue.clone(), resync.errors.clone()); + + match compression_level { + Some(v) => metrics + .compression_level + .observe(&Context::current(), v as u64, &[]), + None => metrics + .compression_level + .observe(&Context::current(), 0_u64, &[]), + } let scrub_persister = PersisterShared::new(&system.metadata_dir, "scrub_info"); @@ -475,7 +480,9 @@ impl BlockManager { )) .await?; - self.metrics.bytes_written.add(write_size); + self.metrics + .bytes_written + .add(&Context::current(), write_size, &[]); Ok(()) } @@ -510,7 +517,7 @@ impl BlockManager { self.metrics .bytes_read - .add(data.inner_buffer().len() as u64); + .add(&Context::current(), data.inner_buffer().len() as u64, &[]); Ok(data) } @@ -542,7 +549,9 @@ impl BlockManager { }; if data.verify(*hash).is_err() { - self.metrics.corruption_counter.add(1); + self.metrics + .corruption_counter + .add(&Context::current(), 1, &[]); self.lock_mutate(hash) .await @@ -742,7 +751,7 @@ impl BlockManagerLocked { path.set_extension("zst"); } fs::remove_file(path).await?; - mgr.metrics.delete_counter.add(1); + mgr.metrics.delete_counter.add(&Context::current(), 1, &[]); } Ok(()) } diff --git a/src/block/metrics.rs b/src/block/metrics.rs index 6659df32..a1ae0af4 100644 --- a/src/block/metrics.rs +++ b/src/block/metrics.rs @@ -5,82 +5,61 @@ use garage_db::counted_tree_hack::CountedTree; /// TableMetrics reference all counter used for metrics pub struct BlockManagerMetrics { - pub(crate) _compression_level: ValueObserver, - pub(crate) _rc_size: ValueObserver, - pub(crate) _resync_queue_len: ValueObserver, - pub(crate) _resync_errored_blocks: ValueObserver, + pub(crate) compression_level: ObservableGauge, + pub(crate) _rc_size: ObservableGauge, + pub(crate) _resync_queue_len: ObservableGauge, + pub(crate) _resync_errored_blocks: ObservableGauge, - pub(crate) resync_counter: BoundCounter, - pub(crate) resync_error_counter: BoundCounter, - pub(crate) resync_duration: BoundValueRecorder, + pub(crate) resync_counter: Counter, + pub(crate) resync_error_counter: Counter, + pub(crate) resync_duration: Histogram, pub(crate) resync_send_counter: Counter, - pub(crate) resync_recv_counter: BoundCounter, + pub(crate) resync_recv_counter: Counter, - pub(crate) bytes_read: BoundCounter, - pub(crate) block_read_duration: BoundValueRecorder, - pub(crate) bytes_written: BoundCounter, - pub(crate) block_write_duration: BoundValueRecorder, - pub(crate) delete_counter: BoundCounter, + pub(crate) bytes_read: Counter, + pub(crate) block_read_duration: Histogram, + pub(crate) bytes_written: Counter, + pub(crate) block_write_duration: Histogram, + pub(crate) delete_counter: Counter, - pub(crate) corruption_counter: BoundCounter, + pub(crate) corruption_counter: Counter, } impl BlockManagerMetrics { - pub fn new( - compression_level: Option, - rc_tree: db::Tree, - resync_queue: CountedTree, - resync_errors: CountedTree, - ) -> Self { + pub fn new(rc_tree: db::Tree, resync_queue: CountedTree, resync_errors: CountedTree) -> Self { let meter = global::meter("garage_model/block"); Self { - _compression_level: meter - .u64_value_observer("block.compression_level", move |observer| { - match compression_level { - Some(v) => observer.observe(v as u64, &[]), - None => observer.observe(0_u64, &[]), - } - }) + compression_level: meter + .u64_observable_gauge("block.compression_level") .with_description("Garage compression level for node") .init(), _rc_size: meter - .u64_value_observer("block.rc_size", move |observer| { - if let Ok(Some(v)) = rc_tree.fast_len() { - observer.observe(v as u64, &[]) - } - }) + .u64_observable_gauge("block.rc_size") .with_description("Number of blocks known to the reference counter") .init(), _resync_queue_len: meter - .u64_value_observer("block.resync_queue_length", move |observer| { - observer.observe(resync_queue.len() as u64, &[]) - }) + .u64_observable_gauge("block.resync_queue_length") .with_description( "Number of block hashes queued for local check and possible resync", ) .init(), _resync_errored_blocks: meter - .u64_value_observer("block.resync_errored_blocks", move |observer| { - observer.observe(resync_errors.len() as u64, &[]) - }) + .u64_observable_gauge("block.resync_errored_blocks") .with_description("Number of block hashes whose last resync resulted in an error") .init(), resync_counter: meter .u64_counter("block.resync_counter") .with_description("Number of calls to resync_block") - .init() - .bind(&[]), + .init(), resync_error_counter: meter .u64_counter("block.resync_error_counter") .with_description("Number of calls to resync_block that returned an error") - .init() - .bind(&[]), + .init(), resync_duration: meter - .f64_value_recorder("block.resync_duration") + .f64_histogram("block.resync_duration") .with_description("Duration of resync_block operations") - .init() - .bind(&[]), + .init(), resync_send_counter: meter .u64_counter("block.resync_send_counter") .with_description("Number of blocks sent to another node in resync operations") @@ -88,40 +67,33 @@ impl BlockManagerMetrics { resync_recv_counter: meter .u64_counter("block.resync_recv_counter") .with_description("Number of blocks received from other nodes in resync operations") - .init() - .bind(&[]), + .init(), bytes_read: meter .u64_counter("block.bytes_read") .with_description("Number of bytes read from disk") - .init() - .bind(&[]), + .init(), block_read_duration: meter - .f64_value_recorder("block.read_duration") + .f64_histogram("block.read_duration") .with_description("Duration of block read operations") - .init() - .bind(&[]), + .init(), bytes_written: meter .u64_counter("block.bytes_written") .with_description("Number of bytes written to disk") - .init() - .bind(&[]), + .init(), block_write_duration: meter - .f64_value_recorder("block.write_duration") + .f64_histogram("block.write_duration") .with_description("Duration of block write operations") - .init() - .bind(&[]), + .init(), delete_counter: meter .u64_counter("block.delete_counter") .with_description("Number of blocks deleted") - .init() - .bind(&[]), + .init(), corruption_counter: meter .u64_counter("block.corruption_counter") .with_description("Data corruptions detected on block reads") - .init() - .bind(&[]), + .init(), } } } diff --git a/src/block/resync.rs b/src/block/resync.rs index ea280ad4..865fb289 100644 --- a/src/block/resync.rs +++ b/src/block/resync.rs @@ -302,10 +302,16 @@ impl BlockResyncManager { .bound_record_duration(&manager.metrics.resync_duration) .await; - manager.metrics.resync_counter.add(1); + manager + .metrics + .resync_counter + .add(&Context::current(), 1, &[]); if let Err(e) = &res { - manager.metrics.resync_error_counter.add(1); + manager + .metrics + .resync_error_counter + .add(&Context::current(), 1, &[]); error!("Error when resyncing {:?}: {}", hash, e); let err_counter = match self.errors.get(hash.as_slice())? { @@ -413,10 +419,11 @@ impl BlockResyncManager { ); for node in need_nodes.iter() { - manager - .metrics - .resync_send_counter - .add(1, &[KeyValue::new("to", format!("{:?}", node))]); + manager.metrics.resync_send_counter.add( + &Context::current(), + 1, + &[KeyValue::new("to", format!("{:?}", node))], + ); } let block = manager.read_block(hash).await?; @@ -459,7 +466,10 @@ impl BlockResyncManager { let block_data = manager.rpc_get_raw_block(hash, None).await?; - manager.metrics.resync_recv_counter.add(1); + manager + .metrics + .resync_recv_counter + .add(&Context::current(), 1, &[]); manager.write_block(hash, &block_data).await?; } -- 2.43.0 From 2d584889f2d982a32bc1d2bc556c7bc88990fa7c Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Fri, 27 Jan 2023 17:29:32 +0000 Subject: [PATCH 09/12] table: Ported to opentelemetry 0.18. --- src/table/data.rs | 14 +++++-- src/table/metrics.rs | 90 +++++++++++--------------------------------- src/table/sync.rs | 5 ++- src/table/table.rs | 26 ++++++++++--- 4 files changed, 59 insertions(+), 76 deletions(-) diff --git a/src/table/data.rs b/src/table/data.rs index 26cc3a5a..d8cd935e 100644 --- a/src/table/data.rs +++ b/src/table/data.rs @@ -2,6 +2,8 @@ use core::borrow::Borrow; use std::convert::TryInto; use std::sync::Arc; +use opentelemetry::Context; + use serde_bytes::ByteBuf; use tokio::sync::Notify; @@ -242,7 +244,9 @@ impl TableData { })?; if let Some((new_entry, new_bytes_hash)) = changed { - self.metrics.internal_update_counter.add(1); + self.metrics + .internal_update_counter + .add(&Context::current(), 1, &[]); let is_tombstone = new_entry.is_tombstone(); self.merkle_todo_notify.notify_one(); @@ -284,7 +288,9 @@ impl TableData { })?; if removed { - self.metrics.internal_delete_counter.add(1); + self.metrics + .internal_delete_counter + .add(&Context::current(), 1, &[]); self.merkle_todo_notify.notify_one(); } Ok(removed) @@ -312,7 +318,9 @@ impl TableData { })?; if removed { - self.metrics.internal_delete_counter.add(1); + self.metrics + .internal_delete_counter + .add(&Context::current(), 1, &[]); self.merkle_todo_notify.notify_one(); } Ok(removed) diff --git a/src/table/metrics.rs b/src/table/metrics.rs index 8318a84f..82cfcb68 100644 --- a/src/table/metrics.rs +++ b/src/table/metrics.rs @@ -1,22 +1,22 @@ -use opentelemetry::{global, metrics::*, KeyValue}; +use opentelemetry::{global, metrics::*}; use garage_db as db; use garage_db::counted_tree_hack::CountedTree; /// TableMetrics reference all counter used for metrics pub struct TableMetrics { - pub(crate) _table_size: ValueObserver, - pub(crate) _merkle_tree_size: ValueObserver, - pub(crate) _merkle_todo_len: ValueObserver, - pub(crate) _gc_todo_len: ValueObserver, + pub(crate) _table_size: ObservableGauge, + pub(crate) _merkle_tree_size: ObservableGauge, + pub(crate) _merkle_todo_len: ObservableGauge, + pub(crate) _gc_todo_len: ObservableGauge, - pub(crate) get_request_counter: BoundCounter, - pub(crate) get_request_duration: BoundValueRecorder, - pub(crate) put_request_counter: BoundCounter, - pub(crate) put_request_duration: BoundValueRecorder, + pub(crate) get_request_counter: Counter, + pub(crate) get_request_duration: Histogram, + pub(crate) put_request_counter: Counter, + pub(crate) put_request_duration: Histogram, - pub(crate) internal_update_counter: BoundCounter, - pub(crate) internal_delete_counter: BoundCounter, + pub(crate) internal_update_counter: Counter, + pub(crate) internal_delete_counter: Counter, pub(crate) sync_items_sent: Counter, pub(crate) sync_items_received: Counter, @@ -32,91 +32,47 @@ impl TableMetrics { let meter = global::meter(table_name); TableMetrics { _table_size: meter - .u64_value_observer( - "table.size", - move |observer| { - if let Ok(Some(v)) = store.fast_len() { - observer.observe( - v as u64, - &[KeyValue::new("table_name", table_name)], - ); - } - }, - ) + .u64_observable_gauge("table.size") .with_description("Number of items in table") .init(), _merkle_tree_size: meter - .u64_value_observer( - "table.merkle_tree_size", - move |observer| { - if let Ok(Some(v)) = merkle_tree.fast_len() { - observer.observe( - v as u64, - &[KeyValue::new("table_name", table_name)], - ); - } - }, - ) + .u64_observable_gauge("table.merkle_tree_size") .with_description("Number of nodes in table's Merkle tree") .init(), _merkle_todo_len: meter - .u64_value_observer( - "table.merkle_updater_todo_queue_length", - move |observer| { - if let Ok(v) = merkle_todo.len() { - observer.observe( - v as u64, - &[KeyValue::new("table_name", table_name)], - ); - } - }, - ) + .u64_observable_gauge("table.merkle_updater_todo_queue_length") .with_description("Merkle tree updater TODO queue length") .init(), _gc_todo_len: meter - .u64_value_observer( - "table.gc_todo_queue_length", - move |observer| { - observer.observe( - gc_todo.len() as u64, - &[KeyValue::new("table_name", table_name)], - ); - }, - ) + .u64_observable_gauge("table.gc_todo_queue_length") .with_description("Table garbage collector TODO queue length") .init(), get_request_counter: meter .u64_counter("table.get_request_counter") .with_description("Number of get/get_range requests internally made on this table") - .init() - .bind(&[KeyValue::new("table_name", table_name)]), + .init(), get_request_duration: meter - .f64_value_recorder("table.get_request_duration") + .f64_histogram("table.get_request_duration") .with_description("Duration of get/get_range requests internally made on this table, in seconds") - .init() - .bind(&[KeyValue::new("table_name", table_name)]), + .init(), put_request_counter: meter .u64_counter("table.put_request_counter") .with_description("Number of insert/insert_many requests internally made on this table") - .init() - .bind(&[KeyValue::new("table_name", table_name)]), + .init(), put_request_duration: meter - .f64_value_recorder("table.put_request_duration") + .f64_histogram("table.put_request_duration") .with_description("Duration of insert/insert_many requests internally made on this table, in seconds") - .init() - .bind(&[KeyValue::new("table_name", table_name)]), + .init(), internal_update_counter: meter .u64_counter("table.internal_update_counter") .with_description("Number of value updates where the value actually changes (includes creation of new key and update of existing key)") - .init() - .bind(&[KeyValue::new("table_name", table_name)]), + .init(), internal_delete_counter: meter .u64_counter("table.internal_delete_counter") .with_description("Number of value deletions in the tree (due to GC or repartitioning)") - .init() - .bind(&[KeyValue::new("table_name", table_name)]), + .init(), sync_items_sent: meter .u64_counter("table.sync_items_sent") diff --git a/src/table/sync.rs b/src/table/sync.rs index 92a353c6..5cc6b9a9 100644 --- a/src/table/sync.rs +++ b/src/table/sync.rs @@ -5,7 +5,7 @@ use std::time::{Duration, Instant}; use arc_swap::ArcSwapOption; use async_trait::async_trait; use futures_util::stream::*; -use opentelemetry::KeyValue; +use opentelemetry::{Context, KeyValue}; use rand::Rng; use serde::{Deserialize, Serialize}; use serde_bytes::ByteBuf; @@ -235,6 +235,7 @@ impl TableSyncer { for to in nodes.iter() { self.data.metrics.sync_items_sent.add( + &Context::current(), values.len() as u64, &[ KeyValue::new("table_name", F::TABLE_NAME), @@ -428,6 +429,7 @@ impl TableSyncer { .collect::>(); self.data.metrics.sync_items_sent.add( + &Context::current(), values.len() as u64, &[ KeyValue::new("table_name", F::TABLE_NAME), @@ -470,6 +472,7 @@ impl EndpointHandler for TableSync } SyncRpc::Items(items) => { self.data.metrics.sync_items_received.add( + &Context::current(), items.len() as u64, &[ KeyValue::new("table_name", F::TABLE_NAME), diff --git a/src/table/table.rs b/src/table/table.rs index 7ad79677..8ea2f09c 100644 --- a/src/table/table.rs +++ b/src/table/table.rs @@ -9,7 +9,7 @@ use serde_bytes::ByteBuf; use opentelemetry::{ trace::{FutureExt, TraceContextExt, Tracer}, - Context, + Context, KeyValue, }; use garage_db as db; @@ -110,7 +110,11 @@ impl Table { .with_context(Context::current_with_span(span)) .await?; - self.data.metrics.put_request_counter.add(1); + self.data.metrics.put_request_counter.add( + &Context::current(), + 1, + &[KeyValue::new("table_name", F::TABLE_NAME)], + ); Ok(()) } @@ -154,7 +158,11 @@ impl Table { .with_context(Context::current_with_span(span)) .await?; - self.data.metrics.put_request_counter.add(1); + self.data.metrics.put_request_counter.add( + &Context::current(), + 1, + &[KeyValue::new("table_name", F::TABLE_NAME)], + ); Ok(()) } @@ -220,7 +228,11 @@ impl Table { .with_context(Context::current_with_span(span)) .await?; - self.data.metrics.get_request_counter.add(1); + self.data.metrics.get_request_counter.add( + &Context::current(), + 1, + &[KeyValue::new("table_name", F::TABLE_NAME)], + ); Ok(res) } @@ -306,7 +318,11 @@ impl Table { .with_context(Context::current_with_span(span)) .await?; - self.data.metrics.get_request_counter.add(1); + self.data.metrics.get_request_counter.add( + &Context::current(), + 1, + &[KeyValue::new("table_name", F::TABLE_NAME)], + ); Ok(res) } -- 2.43.0 From 930e5f167d340bb05fe374d4b856ccc2b3f4ebe4 Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Fri, 27 Jan 2023 17:34:43 +0000 Subject: [PATCH 10/12] web: Ported to opentelemetry 0.18. --- src/web/web_server.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/web/web_server.rs b/src/web/web_server.rs index 5719da54..eb1f2474 100644 --- a/src/web/web_server.rs +++ b/src/web/web_server.rs @@ -11,7 +11,7 @@ use hyper::{ use opentelemetry::{ global, - metrics::{Counter, ValueRecorder}, + metrics::{Counter, Histogram}, trace::{FutureExt, TraceContextExt, Tracer}, Context, KeyValue, }; @@ -34,7 +34,7 @@ use garage_util::metrics::{gen_trace_id, RecordDuration}; struct WebMetrics { request_counter: Counter, error_counter: Counter, - request_duration: ValueRecorder, + request_duration: Histogram, } impl WebMetrics { @@ -50,7 +50,7 @@ impl WebMetrics { .with_description("Number of requests to the web endpoint resulting in errors") .init(), request_duration: meter - .f64_value_recorder("web.request_duration") + .f64_histogram("web.request_duration") .with_description("Duration of requests to the web endpoint") .init(), } @@ -127,7 +127,9 @@ impl WebServer { .await; // More instrumentation - self.metrics.request_counter.add(1, &metrics_tags[..]); + self.metrics + .request_counter + .add(&Context::current(), 1, &metrics_tags[..]); // Returning the result match res { @@ -144,6 +146,7 @@ impl WebServer { error ); self.metrics.error_counter.add( + &Context::current(), 1, &[ metrics_tags[0].clone(), -- 2.43.0 From e8250145087ff2a46659c71716d0fbdfdcfe0d55 Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Fri, 27 Jan 2023 17:37:03 +0000 Subject: [PATCH 11/12] garage/server.rs: Ported to opentelemetry 0.18. --- src/garage/server.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/garage/server.rs b/src/garage/server.rs index 16f1b625..4a56987e 100644 --- a/src/garage/server.rs +++ b/src/garage/server.rs @@ -1,5 +1,7 @@ use std::path::PathBuf; +use opentelemetry::sdk::export::metrics::aggregation; +use opentelemetry::sdk::metrics::{controllers, processors, selectors}; use tokio::sync::watch; use garage_util::background::*; @@ -33,7 +35,15 @@ pub async fn run_server(config_file: PathBuf) -> Result<(), Error> { // ---- Initialize Garage internals ---- #[cfg(feature = "metrics")] - let metrics_exporter = opentelemetry_prometheus::exporter().init(); + let controller = controllers::basic( + processors::factory( + selectors::simple::histogram([1.0, 2.0, 5.0, 10.0, 20.0, 50.0]), + aggregation::cumulative_temporality_selector(), + ) + .with_memory(true), + ) + .build(); + let metrics_exporter = opentelemetry_prometheus::exporter(controller).init(); info!("Initializing Garage main data store..."); let garage = Garage::new(config.clone())?; -- 2.43.0 From 9521c8c254a7d547a1a67c5c25e2e7d522fe7d4a Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 30 Jan 2023 23:02:11 +0100 Subject: [PATCH 12/12] Update Cargo.nix --- Cargo.nix | 383 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 282 insertions(+), 101 deletions(-) diff --git a/Cargo.nix b/Cargo.nix index 642735cf..9081c442 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -32,7 +32,7 @@ args@{ ignoreLockHash, }: let - nixifiedLockHash = "9941a539c374cfd67691e633af6c6a5da9e8badbb7b14159b3ff24a7cf5ddf8a"; + nixifiedLockHash = "29076cf27fdc58a0e8012371ecd8cdc0d3251c6b2603cdd4441a6cb69eb9db44"; workspaceSrc = if args.workspaceSrc == null then ./. else args.workspaceSrc; currentLockHash = builtins.hashFile "sha256" (workspaceSrc + /Cargo.lock); lockHashIgnored = if ignoreLockHash @@ -547,6 +547,58 @@ in }; }); + "registry+https://github.com/rust-lang/crates.io-index".axum."0.6.4" = overridableMkRustCrate (profileName: rec { + name = "axum"; + version = "0.6.4"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "e5694b64066a2459918d8074c2ce0d5a88f409431994c2356617c8ae0c4721fc"; }; + dependencies = { + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "async_trait" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.63" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "axum_core" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".axum-core."0.3.2" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "bitflags" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."1.3.2" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "bytes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.3.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.25" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "http" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "http_body" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "hyper" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.23" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "itoa" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."1.0.5" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "matchit" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".matchit."0.7.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "memchr" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.5.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "mime" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".mime."0.3.16" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "percent_encoding" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.2.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "pin_project_lite" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.152" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "sync_wrapper" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sync_wrapper."0.1.1" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tower" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower."0.4.13" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tower_http" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-http."0.3.5" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tower_layer" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-layer."0.3.2" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tower_service" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-service."0.3.2" { inherit profileName; }).out; + }; + buildDependencies = { + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "rustversion" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".rustversion."1.0.11" { profileName = "__noProfile"; }).out; + }; + }); + + "registry+https://github.com/rust-lang/crates.io-index".axum-core."0.3.2" = overridableMkRustCrate (profileName: rec { + name = "axum-core"; + version = "0.3.2"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "1cae3e661676ffbacb30f1a824089a8c9150e71017f7e1e38f2aa32009188d34"; }; + dependencies = { + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "async_trait" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.63" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "bytes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.3.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.25" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "http" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "http_body" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "mime" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".mime."0.3.16" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tower_layer" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-layer."0.3.2" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tower_service" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-service."0.3.2" { inherit profileName; }).out; + }; + buildDependencies = { + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "rustversion" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".rustversion."1.0.11" { profileName = "__noProfile"; }).out; + }; + }); + "registry+https://github.com/rust-lang/crates.io-index".backoff."0.4.0" = overridableMkRustCrate (profileName: rec { name = "backoff"; version = "0.4.0"; @@ -1120,17 +1172,17 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".dashmap."4.0.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".dashmap."5.4.0" = overridableMkRustCrate (profileName: rec { name = "dashmap"; - version = "4.0.2"; + version = "5.4.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c"; }; - features = builtins.concatLists [ - [ "default" ] - ]; + src = fetchCratesIo { inherit name version; sha256 = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc"; }; dependencies = { cfg_if = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; }).out; - num_cpus = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num_cpus."1.15.0" { inherit profileName; }).out; + hashbrown = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hashbrown."0.12.3" { inherit profileName; }).out; + lock_api = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lock_api."0.4.9" { inherit profileName; }).out; + once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.0" { inherit profileName; }).out; + parking_lot_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot_core."0.9.6" { inherit profileName; }).out; }; }); @@ -1570,9 +1622,9 @@ in hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; sodiumoxide = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".kuska-sodiumoxide."0.2.5-0" { inherit profileName; }).out; netapp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".netapp."0.5.2" { inherit profileName; }).out; - opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "opentelemetry_otlp" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry-otlp."0.10.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" then "opentelemetry_prometheus" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry-prometheus."0.10.0" { inherit profileName; }).out; + opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.18.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "opentelemetry_otlp" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry-otlp."0.11.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" then "opentelemetry_prometheus" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry-prometheus."0.11.0" { inherit profileName; }).out; parse_duration = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".parse_duration."2.1.1" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/prometheus" then "prometheus" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prometheus."0.13.3" { inherit profileName; }).out; rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out; @@ -1635,8 +1687,8 @@ in md5 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".md-5."0.10.5" { inherit profileName; }).out; multer = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".multer."2.0.4" { inherit profileName; }).out; nom = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".nom."7.1.3" { inherit profileName; }).out; - opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" then "opentelemetry_prometheus" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry-prometheus."0.10.0" { inherit profileName; }).out; + opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.18.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" then "opentelemetry_prometheus" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry-prometheus."0.11.0" { inherit profileName; }).out; percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.2.0" { inherit profileName; }).out; pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.0.12" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/prometheus" then "prometheus" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prometheus."0.13.3" { inherit profileName; }).out; @@ -1673,7 +1725,7 @@ in garage_table = (rustPackages."unknown".garage_table."0.8.1" { inherit profileName; }).out; garage_util = (rustPackages."unknown".garage_util."0.8.1" { inherit profileName; }).out; hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; - opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; + opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.18.0" { inherit profileName; }).out; rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out; serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.152" { inherit profileName; }).out; serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.8" { inherit profileName; }).out; @@ -1743,7 +1795,7 @@ in garage_util = (rustPackages."unknown".garage_util."0.8.1" { inherit profileName; }).out; hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; netapp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".netapp."0.5.2" { inherit profileName; }).out; - opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; + opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.18.0" { inherit profileName; }).out; rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out; serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.152" { inherit profileName; }).out; serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.8" { inherit profileName; }).out; @@ -1782,7 +1834,7 @@ in ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "kube" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".kube."0.75.0" { inherit profileName; }).out; sodiumoxide = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".kuska-sodiumoxide."0.2.5-0" { inherit profileName; }).out; netapp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".netapp."0.5.2" { inherit profileName; }).out; - opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; + opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.18.0" { inherit profileName; }).out; pnet_datalink = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pnet_datalink."0.28.0" { inherit profileName; }).out; rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "reqwest" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".reqwest."0.11.14" { inherit profileName; }).out; @@ -1813,7 +1865,7 @@ in garage_util = (rustPackages."unknown".garage_util."0.8.1" { inherit profileName; }).out; hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; hexdump = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hexdump."0.1.1" { inherit profileName; }).out; - opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; + opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.18.0" { inherit profileName; }).out; rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out; serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.152" { inherit profileName; }).out; serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.8" { inherit profileName; }).out; @@ -1847,7 +1899,7 @@ in hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.23" { inherit profileName; }).out; lazy_static = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; }).out; netapp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".netapp."0.5.2" { inherit profileName; }).out; - opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; + opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.18.0" { inherit profileName; }).out; rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out; rmp_serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."0.15.5" { inherit profileName; }).out; serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.152" { inherit profileName; }).out; @@ -1877,7 +1929,7 @@ in garage_util = (rustPackages."unknown".garage_util."0.8.1" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out; hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.23" { inherit profileName; }).out; - opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; + opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.18.0" { inherit profileName; }).out; percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.2.0" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; @@ -2022,7 +2074,7 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "default") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "default") ]; }); @@ -2474,9 +2526,7 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "default") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "use_alloc") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "use_std") ]; dependencies = { ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "either" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".either."1.8.1" { inherit profileName; }).out; @@ -2927,6 +2977,16 @@ in }; }); + "registry+https://github.com/rust-lang/crates.io-index".matchit."0.7.0" = overridableMkRustCrate (profileName: rec { + name = "matchit"; + version = "0.7.0"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40"; }; + features = builtins.concatLists [ + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "default") + ]; + }); + "registry+https://github.com/rust-lang/crates.io-index".md-5."0.9.1" = overridableMkRustCrate (profileName: rec { name = "md-5"; version = "0.9.1"; @@ -3330,23 +3390,15 @@ in features = builtins.concatLists [ [ "async-trait" ] [ "crossbeam-channel" ] - [ "dashmap" ] [ "default" ] - [ "fnv" ] - [ "metrics" ] [ "percent-encoding" ] [ "pin-project" ] [ "rand" ] - [ "rt-tokio" ] - [ "tokio" ] - [ "tokio-stream" ] [ "trace" ] ]; dependencies = { async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.63" { profileName = "__noProfile"; }).out; crossbeam_channel = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crossbeam-channel."0.5.6" { inherit profileName; }).out; - dashmap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".dashmap."4.0.2" { inherit profileName; }).out; - fnv = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fnv."1.0.7" { inherit profileName; }).out; futures_channel = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-channel."0.3.25" { inherit profileName; }).out; futures_executor = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-executor."0.3.25" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.25" { inherit profileName; }).out; @@ -3356,8 +3408,23 @@ in pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.0.12" { inherit profileName; }).out; rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out; thiserror = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.38" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.25.0" { inherit profileName; }).out; - tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.11" { inherit profileName; }).out; + }; + }); + + "registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.18.0" = overridableMkRustCrate (profileName: rec { + name = "opentelemetry"; + version = "0.18.0"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "69d6c3d7288a106c0a363e4b0e8d308058d56902adefb16f4936f417ffef086e"; }; + features = builtins.concatLists [ + [ "default" ] + [ "metrics" ] + [ "rt-tokio" ] + [ "trace" ] + ]; + dependencies = { + opentelemetry_api = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry_api."0.18.0" { inherit profileName; }).out; + opentelemetry_sdk = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry_sdk."0.18.0" { inherit profileName; }).out; }; }); @@ -3375,46 +3442,132 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".opentelemetry-otlp."0.10.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".opentelemetry-otlp."0.11.0" = overridableMkRustCrate (profileName: rec { name = "opentelemetry-otlp"; - version = "0.10.0"; + version = "0.11.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "9d1a6ca9de4c8b00aa7f1a153bd76cb263287155cec642680d79d98706f3d28a"; }; + src = fetchCratesIo { inherit name version; sha256 = "d1c928609d087790fc936a1067bdc310ae702bdf3b090c3f281b713622c8bbde"; }; features = builtins.concatLists [ (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "default") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "grpc-tonic") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "http") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "prost") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "tokio") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "tonic") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "tonic-build") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "trace") ]; dependencies = { ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "async_trait" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.63" { profileName = "__noProfile"; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.25" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.25" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "http" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "opentelemetry" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost."0.9.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "opentelemetry" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.18.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "opentelemetry_proto" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry-proto."0.1.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost."0.11.6" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "thiserror" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.38" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.25.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tonic" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tonic."0.6.2" { inherit profileName; }).out; - }; - buildDependencies = { - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tonic_build" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".tonic-build."0.6.2" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tonic" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tonic."0.8.3" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".opentelemetry-prometheus."0.10.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".opentelemetry-prometheus."0.11.0" = overridableMkRustCrate (profileName: rec { name = "opentelemetry-prometheus"; - version = "0.10.0"; + version = "0.11.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "9328977e479cebe12ce0d3fcecdaea4721d234895a9440c5b5dfd113f0594ac6"; }; + src = fetchCratesIo { inherit name version; sha256 = "06c3d833835a53cf91331d2cfb27e9121f5a95261f31f08a1f79ab31688b8da8"; }; dependencies = { - ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" then "opentelemetry" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" then "opentelemetry" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.18.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" then "prometheus" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prometheus."0.13.3" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" then "protobuf" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".protobuf."2.28.0" { inherit profileName; }).out; }; }); + "registry+https://github.com/rust-lang/crates.io-index".opentelemetry-proto."0.1.0" = overridableMkRustCrate (profileName: rec { + name = "opentelemetry-proto"; + version = "0.1.0"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "d61a2f56df5574508dd86aaca016c917489e589ece4141df1b5e349af8d66c28"; }; + features = builtins.concatLists [ + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "build-client") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "gen-tonic") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "prost") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "tonic") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "tonic-build") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "traces") + ]; + dependencies = { + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.25" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.25" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "opentelemetry" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.18.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost."0.11.6" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tonic" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tonic."0.8.3" { inherit profileName; }).out; + }; + buildDependencies = { + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tonic_build" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".tonic-build."0.8.4" { profileName = "__noProfile"; }).out; + }; + }); + + "registry+https://github.com/rust-lang/crates.io-index".opentelemetry_api."0.18.0" = overridableMkRustCrate (profileName: rec { + name = "opentelemetry_api"; + version = "0.18.0"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "c24f96e21e7acc813c7a8394ee94978929db2bcc46cf6b5014fc612bf7760c22"; }; + features = builtins.concatLists [ + [ "default" ] + [ "fnv" ] + [ "metrics" ] + [ "pin-project-lite" ] + [ "trace" ] + ]; + dependencies = { + fnv = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fnv."1.0.7" { inherit profileName; }).out; + futures_channel = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-channel."0.3.25" { inherit profileName; }).out; + futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.25" { inherit profileName; }).out; + indexmap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.9.2" { inherit profileName; }).out; + ${ if hostPlatform.parsed.cpu.name == "wasm32" then "js_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.60" { inherit profileName; }).out; + once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.0" { inherit profileName; }).out; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out; + thiserror = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.38" { inherit profileName; }).out; + }; + }); + + "registry+https://github.com/rust-lang/crates.io-index".opentelemetry_sdk."0.18.0" = overridableMkRustCrate (profileName: rec { + name = "opentelemetry_sdk"; + version = "0.18.0"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "1ca41c4933371b61c2a2f214bf16931499af4ec90543604ec828f7a625c09113"; }; + features = builtins.concatLists [ + [ "async-trait" ] + [ "crossbeam-channel" ] + [ "dashmap" ] + [ "default" ] + [ "fnv" ] + [ "metrics" ] + [ "percent-encoding" ] + [ "rand" ] + [ "rt-tokio" ] + [ "tokio" ] + [ "tokio-stream" ] + [ "trace" ] + ]; + dependencies = { + async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.63" { profileName = "__noProfile"; }).out; + crossbeam_channel = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crossbeam-channel."0.5.6" { inherit profileName; }).out; + dashmap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".dashmap."5.4.0" { inherit profileName; }).out; + fnv = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fnv."1.0.7" { inherit profileName; }).out; + futures_channel = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-channel."0.3.25" { inherit profileName; }).out; + futures_executor = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-executor."0.3.25" { inherit profileName; }).out; + futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.25" { inherit profileName; }).out; + once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.0" { inherit profileName; }).out; + opentelemetry_api = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry_api."0.18.0" { inherit profileName; }).out; + percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.2.0" { inherit profileName; }).out; + rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out; + thiserror = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.38" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.25.0" { inherit profileName; }).out; + tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.11" { inherit profileName; }).out; + }; + }); + "registry+https://github.com/rust-lang/crates.io-index".ordered-float."2.10.0" = overridableMkRustCrate (profileName: rec { name = "ordered-float"; version = "2.10.0"; @@ -3478,11 +3631,11 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "default") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "default") ]; dependencies = { - ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "lock_api" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lock_api."0.4.9" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "parking_lot_core" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot_core."0.9.6" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "lock_api" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lock_api."0.4.9" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "parking_lot_core" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot_core."0.9.6" { inherit profileName; }).out; }; }); @@ -3507,11 +3660,11 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf"; }; dependencies = { - ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "cfg_if" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") && hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.139" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") && hostPlatform.parsed.kernel.name == "redox" then "syscall" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".redox_syscall."0.2.16" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "smallvec" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".smallvec."1.10.0" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") && hostPlatform.isWindows then "windows_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.42.0" { inherit profileName; }).out; + cfg_if = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; }).out; + ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.139" { inherit profileName; }).out; + ${ if hostPlatform.parsed.kernel.name == "redox" then "syscall" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".redox_syscall."0.2.16" { inherit profileName; }).out; + smallvec = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".smallvec."1.10.0" { inherit profileName; }).out; + ${ if hostPlatform.isWindows then "windows_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.42.0" { inherit profileName; }).out; }; }); @@ -3690,6 +3843,17 @@ in }; }); + "registry+https://github.com/rust-lang/crates.io-index".prettyplease."0.1.23" = overridableMkRustCrate (profileName: rec { + name = "prettyplease"; + version = "0.1.23"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78"; }; + dependencies = { + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.50" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.107" { inherit profileName; }).out; + }; + }); + "registry+https://github.com/rust-lang/crates.io-index".proc-macro-error."1.0.4" = overridableMkRustCrate (profileName: rec { name = "proc-macro-error"; version = "1.0.4"; @@ -3767,11 +3931,11 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".prost."0.9.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".prost."0.11.6" = overridableMkRustCrate (profileName: rec { name = "prost"; - version = "0.9.0"; + version = "0.11.6"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"; }; + src = fetchCratesIo { inherit name version; sha256 = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698"; }; features = builtins.concatLists [ (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "default") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "prost-derive") @@ -3779,38 +3943,44 @@ in ]; dependencies = { ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "bytes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.3.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost_derive" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".prost-derive."0.9.0" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost_derive" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".prost-derive."0.11.6" { profileName = "__noProfile"; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".prost-build."0.9.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".prost-build."0.11.6" = overridableMkRustCrate (profileName: rec { name = "prost-build"; - version = "0.9.0"; + version = "0.11.6"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"; }; + src = fetchCratesIo { inherit name version; sha256 = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e"; }; + features = builtins.concatLists [ + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "default") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "format") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "prettyplease") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "syn") + ]; dependencies = { ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "bytes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.3.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "heck" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".heck."0.3.3" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "heck" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".heck."0.4.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "itertools" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itertools."0.10.5" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "lazy_static" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "log" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.17" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "multimap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".multimap."0.8.3" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "petgraph" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".petgraph."0.6.2" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost."0.9.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost_types" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost-types."0.9.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prettyplease" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prettyplease."0.1.23" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost."0.11.6" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost_types" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost-types."0.11.6" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "regex" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.7.1" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.107" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tempfile" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tempfile."3.3.0" { inherit profileName; }).out; - }; - buildDependencies = { - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "which" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".which."4.4.0" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "which" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".which."4.4.0" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".prost-derive."0.9.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".prost-derive."0.11.6" = overridableMkRustCrate (profileName: rec { name = "prost-derive"; - version = "0.9.0"; + version = "0.11.6"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"; }; + src = fetchCratesIo { inherit name version; sha256 = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d"; }; dependencies = { ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "anyhow" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".anyhow."1.0.68" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "itertools" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itertools."0.10.5" { inherit profileName; }).out; @@ -3820,14 +3990,14 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".prost-types."0.9.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".prost-types."0.11.6" = overridableMkRustCrate (profileName: rec { name = "prost-types"; - version = "0.9.0"; + version = "0.11.6"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"; }; + src = fetchCratesIo { inherit name version; sha256 = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788"; }; dependencies = { ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "bytes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.3.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost."0.9.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost."0.11.6" { inherit profileName; }).out; }; }); @@ -4913,6 +5083,13 @@ in }; }); + "registry+https://github.com/rust-lang/crates.io-index".sync_wrapper."0.1.1" = overridableMkRustCrate (profileName: rec { + name = "sync_wrapper"; + version = "0.1.1"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8"; }; + }); + "registry+https://github.com/rust-lang/crates.io-index".synchronoise."1.0.1" = overridableMkRustCrate (profileName: rec { name = "synchronoise"; version = "1.0.1"; @@ -5120,7 +5297,6 @@ in [ "bytes" ] [ "default" ] [ "fs" ] - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "full") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "k2v-client/cli") "io-std") [ "io-util" ] [ "libc" ] @@ -5129,7 +5305,6 @@ in [ "mio" ] [ "net" ] [ "num_cpus" ] - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "parking_lot") [ "process" ] [ "rt" ] [ "rt-multi-thread" ] @@ -5147,7 +5322,6 @@ in memchr = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.5.0" { inherit profileName; }).out; mio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".mio."0.8.5" { inherit profileName; }).out; num_cpus = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num_cpus."1.15.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "parking_lot" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot."0.12.1" { inherit profileName; }).out; pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out; ${ if hostPlatform.isUnix then "signal_hook_registry" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".signal-hook-registry."1.4.0" { inherit profileName; }).out; ${ if !(hostPlatform.parsed.cpu.name == "wasm32" || hostPlatform.parsed.cpu.name == "wasm64") then "socket2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".socket2."0.4.7" { inherit profileName; }).out; @@ -5234,7 +5408,6 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "codec") [ "default" ] [ "io" ] ]; @@ -5324,13 +5497,15 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".tonic."0.6.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".tonic."0.8.3" = overridableMkRustCrate (profileName: rec { name = "tonic"; - version = "0.6.2"; + version = "0.8.3"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a"; }; + src = fetchCratesIo { inherit name version; sha256 = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb"; }; features = builtins.concatLists [ (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "async-trait") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "axum") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "channel") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "codegen") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "default") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "h2") @@ -5347,6 +5522,7 @@ in dependencies = { ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "async_stream" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".async-stream."0.3.3" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "async_trait" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.63" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "axum" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".axum."0.6.4" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "base64" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.13.1" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "bytes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.3.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures_core" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.25" { inherit profileName; }).out; @@ -5358,11 +5534,11 @@ in ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "hyper_timeout" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper-timeout."0.4.1" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "percent_encoding" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.2.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "pin_project" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.0.12" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost1" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost."0.9.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost_derive" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".prost-derive."0.9.0" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost1" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost."0.11.6" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost_derive" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".prost-derive."0.11.6" { profileName = "__noProfile"; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.25.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tokio_stream" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.11" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tokio_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.6.10" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tokio_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.7.4" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tower" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower."0.4.13" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tower_layer" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-layer."0.3.2" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tower_service" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-service."0.3.2" { inherit profileName; }).out; @@ -5371,19 +5547,21 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".tonic-build."0.6.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".tonic-build."0.8.4" = overridableMkRustCrate (profileName: rec { name = "tonic-build"; - version = "0.6.2"; + version = "0.8.4"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757"; }; + src = fetchCratesIo { inherit name version; sha256 = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4"; }; features = builtins.concatLists [ + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "default") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "prost") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "prost-build") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "transport") ]; dependencies = { + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prettyplease" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prettyplease."0.1.23" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.50" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost_build" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost-build."0.9.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost_build" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost-build."0.11.6" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.23" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.107" { inherit profileName; }).out; }; @@ -5444,23 +5622,26 @@ in features = builtins.concatLists [ (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "auth") (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "base64") - (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "default") - (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "map-response-body") + (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "default") + (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "map-response-body") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "tower") (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "trace") (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "tracing") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "util") ]; dependencies = { ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "base64" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.13.1" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "bitflags" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."1.3.2" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "bytes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.3.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "futures_core" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.25" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "futures_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.25" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "http" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "http_body" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "http_range_header" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-range-header."0.3.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "pin_project_lite" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tower_layer" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-layer."0.3.2" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tower_service" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-service."0.3.2" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "bitflags" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."1.3.2" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "bytes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.3.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "futures_core" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.25" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "futures_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.25" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "http" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "http_body" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "http_range_header" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-range-header."0.3.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "pin_project_lite" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tower" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower."0.4.13" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tower_layer" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-layer."0.3.2" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tower_service" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-service."0.3.2" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tracing" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; }); @@ -6053,7 +6234,7 @@ in [ "Win32_System" ] [ "Win32_System_Console" ] [ "Win32_System_IO" ] - (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "Win32_System_LibraryLoader") + [ "Win32_System_LibraryLoader" ] [ "Win32_System_Memory" ] [ "Win32_System_Pipes" ] [ "Win32_System_SystemServices" ] -- 2.43.0