Skip to content

Commit 4f2de12

Browse files
authored
fix: Pass immutable metrics to PushMetricExporter (#2947)
1 parent 1d610a2 commit 4f2de12

File tree

10 files changed

+17
-14
lines changed

10 files changed

+17
-14
lines changed

opentelemetry-otlp/src/exporter/http/metrics.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use opentelemetry_sdk::metrics::data::ResourceMetrics;
99
use super::OtlpHttpClient;
1010

1111
impl MetricsClient for OtlpHttpClient {
12-
async fn export(&self, metrics: &mut ResourceMetrics) -> OTelSdkResult {
12+
async fn export(&self, metrics: &ResourceMetrics) -> OTelSdkResult {
1313
let client = self
1414
.client
1515
.lock()

opentelemetry-otlp/src/exporter/http/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,11 +326,11 @@ impl OtlpHttpClient {
326326
#[cfg(feature = "metrics")]
327327
fn build_metrics_export_body(
328328
&self,
329-
metrics: &mut ResourceMetrics,
329+
metrics: &ResourceMetrics,
330330
) -> Option<(Vec<u8>, &'static str)> {
331331
use opentelemetry_proto::tonic::collector::metrics::v1::ExportMetricsServiceRequest;
332332

333-
let req: ExportMetricsServiceRequest = (&*metrics).into();
333+
let req: ExportMetricsServiceRequest = metrics.into();
334334

335335
match self.protocol {
336336
#[cfg(feature = "http-json")]

opentelemetry-otlp/src/exporter/tonic/metrics.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ impl TonicMetricsClient {
5252
}
5353

5454
impl MetricsClient for TonicMetricsClient {
55-
async fn export(&self, metrics: &mut ResourceMetrics) -> OTelSdkResult {
55+
async fn export(&self, metrics: &ResourceMetrics) -> OTelSdkResult {
5656
let (mut client, metadata, extensions) = self
5757
.inner
5858
.lock()
@@ -81,7 +81,7 @@ impl MetricsClient for TonicMetricsClient {
8181
.export(Request::from_parts(
8282
metadata,
8383
extensions,
84-
ExportMetricsServiceRequest::from(&*metrics),
84+
ExportMetricsServiceRequest::from(metrics),
8585
))
8686
.await
8787
.map_err(|e| OTelSdkError::InternalFailure(format!("{e:?}")))?;

opentelemetry-otlp/src/metric.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ impl HasHttpConfig for MetricExporterBuilder<HttpExporterBuilderSet> {
123123
pub(crate) trait MetricsClient: fmt::Debug + Send + Sync + 'static {
124124
fn export(
125125
&self,
126-
metrics: &mut ResourceMetrics,
126+
metrics: &ResourceMetrics,
127127
) -> impl std::future::Future<Output = OTelSdkResult> + Send;
128128
fn shutdown(&self) -> OTelSdkResult;
129129
}
@@ -149,7 +149,7 @@ impl Debug for MetricExporter {
149149
}
150150

151151
impl PushMetricExporter for MetricExporter {
152-
async fn export(&self, metrics: &mut ResourceMetrics) -> OTelSdkResult {
152+
async fn export(&self, metrics: &ResourceMetrics) -> OTelSdkResult {
153153
match &self.client {
154154
#[cfg(feature = "grpc-tonic")]
155155
SupportedTransportClient::Tonic(client) => client.export(metrics).await,

opentelemetry-sdk/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ also modified to suppress telemetry before invoking exporters.
4343
- *Breaking* `Aggregation` enum moved behind feature flag
4444
"spec_unstable_metrics_views". This was only required when using Views.
4545
[#2928](https://github.com/open-telemetry/opentelemetry-rust/pull/2928)
46+
- *Breaking* change, affecting custom `PushMetricExporter` authors:
47+
- The `export` method on `PushMetricExporter` now accepts `&ResourceMetrics`
48+
instead of `&mut ResourceMetrics`.
4649

4750
## 0.29.0
4851

opentelemetry-sdk/src/metrics/exporter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub trait PushMetricExporter: Send + Sync + 'static {
1818
/// considered unrecoverable and will be logged.
1919
fn export(
2020
&self,
21-
metrics: &mut ResourceMetrics,
21+
metrics: &ResourceMetrics,
2222
) -> impl std::future::Future<Output = OTelSdkResult> + Send;
2323

2424
/// Flushes any metric data held by an exporter.

opentelemetry-sdk/src/metrics/in_memory_exporter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ impl InMemoryMetricExporter {
237237
}
238238

239239
impl PushMetricExporter for InMemoryMetricExporter {
240-
async fn export(&self, metrics: &mut ResourceMetrics) -> OTelSdkResult {
240+
async fn export(&self, metrics: &ResourceMetrics) -> OTelSdkResult {
241241
self.metrics
242242
.lock()
243243
.map(|mut metrics_guard| {

opentelemetry-sdk/src/metrics/periodic_reader.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ impl<E: PushMetricExporter> PeriodicReaderInner<E> {
411411

412412
// Relying on futures executor to execute async call.
413413
// TODO: Pass timeout to exporter
414-
futures_executor::block_on(self.exporter.export(&mut rm))
414+
futures_executor::block_on(self.exporter.export(&rm))
415415
}
416416

417417
fn force_flush(&self) -> OTelSdkResult {
@@ -553,7 +553,7 @@ mod tests {
553553
}
554554

555555
impl PushMetricExporter for MetricExporterThatFailsOnlyOnFirst {
556-
async fn export(&self, _metrics: &mut ResourceMetrics) -> OTelSdkResult {
556+
async fn export(&self, _metrics: &ResourceMetrics) -> OTelSdkResult {
557557
if self.count.fetch_add(1, Ordering::Relaxed) == 0 {
558558
Err(OTelSdkError::InternalFailure("export failed".into()))
559559
} else {
@@ -584,7 +584,7 @@ mod tests {
584584
}
585585

586586
impl PushMetricExporter for MockMetricExporter {
587-
async fn export(&self, _metrics: &mut ResourceMetrics) -> OTelSdkResult {
587+
async fn export(&self, _metrics: &ResourceMetrics) -> OTelSdkResult {
588588
Ok(())
589589
}
590590

opentelemetry-sdk/src/metrics/periodic_reader_with_async_runtime.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ impl<E: PushMetricExporter, RT: Runtime> PeriodicReaderWorker<E, RT> {
259259
message = "Calling exporter's export method with collected metrics.",
260260
count = self.rm.scope_metrics.len(),
261261
);
262-
let export = self.reader.exporter.export(&mut self.rm);
262+
let export = self.reader.exporter.export(&self.rm);
263263
let timeout = self.runtime.delay(self.timeout);
264264
pin_mut!(export);
265265
pin_mut!(timeout);

opentelemetry-stdout/src/metrics/exporter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ impl fmt::Debug for MetricExporter {
4242

4343
impl PushMetricExporter for MetricExporter {
4444
/// Write Metrics to stdout
45-
async fn export(&self, metrics: &mut ResourceMetrics) -> OTelSdkResult {
45+
async fn export(&self, metrics: &ResourceMetrics) -> OTelSdkResult {
4646
if self.is_shutdown.load(atomic::Ordering::SeqCst) {
4747
Err(opentelemetry_sdk::error::OTelSdkError::AlreadyShutdown)
4848
} else {

0 commit comments

Comments
 (0)