diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index 6d355db452..cf798ef396 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -269,6 +269,8 @@ re-introduced in a future date, along with the ability to change the cardinality limit. - *Breaking* Removed unused `opentelemetry_sdk::Error` enum. +- *Breaking* Resource.get() modified to require reference to Key instead of owned. + Replace `get(Key::from_static_str("key"))` with `get(&Key::from_static_str("key"))` - *Breaking* (Affects custom Exporter authors only) Moved `ExportError` trait from `opentelemetry::export::ExportError` to `opentelemetry_sdk::ExportError` - *Breaking (Affects custom SpanExporter, SpanProcessor authors only)*: Rename namespaces for Span exporter structs/traits before: diff --git a/opentelemetry-sdk/src/logs/log_emitter.rs b/opentelemetry-sdk/src/logs/log_emitter.rs index 7c7e3a9509..a1e911bb28 100644 --- a/opentelemetry-sdk/src/logs/log_emitter.rs +++ b/opentelemetry-sdk/src/logs/log_emitter.rs @@ -403,22 +403,22 @@ mod tests { assert_eq!( provider .resource() - .get(Key::from_static_str(resource_key)) + .get(&Key::from_static_str(resource_key)) .map(|v| v.to_string()), expect.map(|s| s.to_string()) ); }; let assert_telemetry_resource = |provider: &super::LoggerProvider| { assert_eq!( - provider.resource().get(TELEMETRY_SDK_LANGUAGE.into()), + provider.resource().get(&TELEMETRY_SDK_LANGUAGE.into()), Some(Value::from("rust")) ); assert_eq!( - provider.resource().get(TELEMETRY_SDK_NAME.into()), + provider.resource().get(&TELEMETRY_SDK_NAME.into()), Some(Value::from("opentelemetry")) ); assert_eq!( - provider.resource().get(TELEMETRY_SDK_VERSION.into()), + provider.resource().get(&TELEMETRY_SDK_VERSION.into()), Some(Value::from(env!("CARGO_PKG_VERSION"))) ); }; diff --git a/opentelemetry-sdk/src/metrics/meter_provider.rs b/opentelemetry-sdk/src/metrics/meter_provider.rs index 011de1f41c..881082714f 100644 --- a/opentelemetry-sdk/src/metrics/meter_provider.rs +++ b/opentelemetry-sdk/src/metrics/meter_provider.rs @@ -319,7 +319,7 @@ mod tests { assert_eq!( provider.inner.pipes.0[0] .resource - .get(Key::from_static_str(resource_key)) + .get(&Key::from_static_str(resource_key)) .map(|v| v.to_string()), expect.map(|s| s.to_string()) ); @@ -328,19 +328,19 @@ mod tests { assert_eq!( provider.inner.pipes.0[0] .resource - .get(TELEMETRY_SDK_LANGUAGE.into()), + .get(&TELEMETRY_SDK_LANGUAGE.into()), Some(Value::from("rust")) ); assert_eq!( provider.inner.pipes.0[0] .resource - .get(TELEMETRY_SDK_NAME.into()), + .get(&TELEMETRY_SDK_NAME.into()), Some(Value::from("opentelemetry")) ); assert_eq!( provider.inner.pipes.0[0] .resource - .get(TELEMETRY_SDK_VERSION.into()), + .get(&TELEMETRY_SDK_VERSION.into()), Some(Value::from(env!("CARGO_PKG_VERSION"))) ); }; diff --git a/opentelemetry-sdk/src/resource/env.rs b/opentelemetry-sdk/src/resource/env.rs index 38801228c0..b4ea198c37 100644 --- a/opentelemetry-sdk/src/resource/env.rs +++ b/opentelemetry-sdk/src/resource/env.rs @@ -84,7 +84,7 @@ impl ResourceDetector for SdkProvidedResourceDetector { .or_else(|| { EnvResourceDetector::new() .detect() - .get(Key::new(super::SERVICE_NAME)) + .get(&Key::new(super::SERVICE_NAME)) }) .unwrap_or_else(|| "unknown_service".into()), )]) @@ -138,14 +138,14 @@ mod tests { // Ensure no env var set let no_env = SdkProvidedResourceDetector.detect(); assert_eq!( - no_env.get(Key::from_static_str(crate::resource::SERVICE_NAME)), + no_env.get(&Key::from_static_str(crate::resource::SERVICE_NAME)), Some(Value::from("unknown_service")), ); temp_env::with_var(OTEL_SERVICE_NAME, Some("test service"), || { let with_service = SdkProvidedResourceDetector.detect(); assert_eq!( - with_service.get(Key::from_static_str(crate::resource::SERVICE_NAME)), + with_service.get(&Key::from_static_str(crate::resource::SERVICE_NAME)), Some(Value::from("test service")), ) }); @@ -156,7 +156,7 @@ mod tests { || { let with_service = SdkProvidedResourceDetector.detect(); assert_eq!( - with_service.get(Key::from_static_str(crate::resource::SERVICE_NAME)), + with_service.get(&Key::from_static_str(crate::resource::SERVICE_NAME)), Some(Value::from("test service1")), ) }, @@ -171,7 +171,7 @@ mod tests { || { let with_service = SdkProvidedResourceDetector.detect(); assert_eq!( - with_service.get(Key::from_static_str(crate::resource::SERVICE_NAME)), + with_service.get(&Key::from_static_str(crate::resource::SERVICE_NAME)), Some(Value::from("test service")) ); }, diff --git a/opentelemetry-sdk/src/resource/mod.rs b/opentelemetry-sdk/src/resource/mod.rs index c7a26978ea..722fcf81ed 100644 --- a/opentelemetry-sdk/src/resource/mod.rs +++ b/opentelemetry-sdk/src/resource/mod.rs @@ -54,10 +54,11 @@ pub struct Resource { impl Resource { /// Creates a [ResourceBuilder] that allows you to configure multiple aspects of the Resource. /// - /// This [ResourceBuilder] will always include the following [ResourceDetector]s: + /// This [ResourceBuilder] will include the following [ResourceDetector]s: /// - [SdkProvidedResourceDetector] /// - [TelemetryResourceDetector] /// - [EnvResourceDetector] + /// If you'd like to start from an empty resource, use [Resource::builder_empty]. pub fn builder() -> ResourceBuilder { ResourceBuilder { resource: Self::from_detectors(&[ @@ -138,8 +139,6 @@ impl Resource { } /// Create a new `Resource` from resource detectors. - /// - /// timeout will be applied to each detector. fn from_detectors(detectors: &[Box]) -> Self { let mut resource = Resource::empty(); for detector in detectors { @@ -227,8 +226,8 @@ impl Resource { } /// Retrieve the value from resource associate with given key. - pub fn get(&self, key: Key) -> Option { - self.inner.attrs.get(&key).cloned() + pub fn get(&self, key: &Key) -> Option { + self.inner.attrs.get(key).cloned() } } @@ -260,8 +259,6 @@ impl<'a> IntoIterator for &'a Resource { pub trait ResourceDetector { /// detect returns an initialized Resource based on gathered information. /// - /// timeout is used in case the detection operation takes too much time. - /// /// If source information to construct a Resource is inaccessible, an empty Resource should be returned /// /// If source information to construct a Resource is invalid, for example, diff --git a/opentelemetry-sdk/src/trace/provider.rs b/opentelemetry-sdk/src/trace/provider.rs index 449bc81349..776eb8a68a 100644 --- a/opentelemetry-sdk/src/trace/provider.rs +++ b/opentelemetry-sdk/src/trace/provider.rs @@ -552,7 +552,7 @@ mod tests { provider .config() .resource - .get(Key::from_static_str(resource_key)) + .get(&Key::from_static_str(resource_key)) .map(|v| v.to_string()), expect.map(|s| s.to_string()) ); @@ -562,15 +562,18 @@ mod tests { provider .config() .resource - .get(TELEMETRY_SDK_LANGUAGE.into()), + .get(&TELEMETRY_SDK_LANGUAGE.into()), Some(Value::from("rust")) ); assert_eq!( - provider.config().resource.get(TELEMETRY_SDK_NAME.into()), + provider.config().resource.get(&TELEMETRY_SDK_NAME.into()), Some(Value::from("opentelemetry")) ); assert_eq!( - provider.config().resource.get(TELEMETRY_SDK_VERSION.into()), + provider + .config() + .resource + .get(&TELEMETRY_SDK_VERSION.into()), Some(Value::from(env!("CARGO_PKG_VERSION"))) ); }; diff --git a/opentelemetry-sdk/src/trace/span_processor.rs b/opentelemetry-sdk/src/trace/span_processor.rs index e83b72c958..12e2d654f3 100644 --- a/opentelemetry-sdk/src/trace/span_processor.rs +++ b/opentelemetry-sdk/src/trace/span_processor.rs @@ -1222,7 +1222,7 @@ mod tests { exported_resource .as_ref() .unwrap() - .get(Key::new("service.name")), + .get(&Key::new("service.name")), Some(Value::from("test_service")) ); } diff --git a/opentelemetry-zipkin/src/exporter/mod.rs b/opentelemetry-zipkin/src/exporter/mod.rs index 6af1206784..dbfd549076 100644 --- a/opentelemetry-zipkin/src/exporter/mod.rs +++ b/opentelemetry-zipkin/src/exporter/mod.rs @@ -116,7 +116,7 @@ impl ZipkinPipelineBuilder { } else { let service_name = SdkProvidedResourceDetector .detect() - .get(semcov::resource::SERVICE_NAME.into()) + .get(&semcov::resource::SERVICE_NAME.into()) .unwrap() .to_string(); (