Skip to content

Commit 0b712dd

Browse files
authored
[EXPORTER] fix throw in OtlpGrpcMetricExporter with shared grpc client (#3243)
1 parent 57114c5 commit 0b712dd

File tree

3 files changed

+62
-1
lines changed

3 files changed

+62
-1
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ Increment the:
2424
* [EXPORTER] Fix scope attributes missing from otlp traces metrics
2525
[#3185](https://github.com/open-telemetry/opentelemetry-cpp/pull/3185)
2626

27+
* [EXPORTER] Fix throw in OtlpGrpcMetricExporter with shared grpc client
28+
[#3243](https://github.com/open-telemetry/opentelemetry-cpp/pull/3243)
29+
2730
## [1.18 2024-11-25]
2831

2932
* [EXPORTER] Fix crash in ElasticsearchLogRecordExporter

exporters/otlp/src/otlp_grpc_metric_exporter.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ OtlpGrpcMetricExporter::OtlpGrpcMetricExporter(
5050
OtlpGrpcMetricExporter::OtlpGrpcMetricExporter(const OtlpGrpcMetricExporterOptions &options,
5151
const std::shared_ptr<OtlpGrpcClient> &client)
5252
: options_(options),
53+
aggregation_temporality_selector_{
54+
OtlpMetricUtils::ChooseTemporalitySelector(options_.aggregation_temporality)},
5355
client_(client),
5456
client_reference_guard_(OtlpGrpcClientFactory::CreateReferenceGuard())
5557
{
@@ -62,6 +64,8 @@ OtlpGrpcMetricExporter::OtlpGrpcMetricExporter(
6264
std::unique_ptr<proto::collector::metrics::v1::MetricsService::StubInterface> stub,
6365
const std::shared_ptr<OtlpGrpcClient> &client)
6466
: options_(OtlpGrpcMetricExporterOptions()),
67+
aggregation_temporality_selector_{
68+
OtlpMetricUtils::ChooseTemporalitySelector(options_.aggregation_temporality)},
6569
client_(client),
6670
client_reference_guard_(OtlpGrpcClientFactory::CreateReferenceGuard()),
6771
metrics_service_stub_(std::move(stub))

exporters/otlp/test/otlp_grpc_metric_exporter_test.cc

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525

2626
# include "opentelemetry/exporters/otlp/protobuf_include_suffix.h"
2727

28+
# include "opentelemetry/exporters/otlp/otlp_grpc_client.h"
29+
# include "opentelemetry/exporters/otlp/otlp_grpc_client_factory.h"
30+
2831
# include "opentelemetry/sdk/trace/simple_processor.h"
2932
# include "opentelemetry/sdk/trace/tracer_provider.h"
3033
# include "opentelemetry/trace/provider.h"
@@ -50,12 +53,34 @@ class OtlpGrpcMetricExporterTestPeer : public ::testing::Test
5053
{
5154
public:
5255
std::unique_ptr<sdk::metrics::PushMetricExporter> GetExporter(
53-
std::unique_ptr<proto::collector::metrics::v1::MetricsService::StubInterface> &stub_interface)
56+
const OtlpGrpcMetricExporterOptions &options)
57+
{
58+
return std::unique_ptr<sdk::metrics::PushMetricExporter>(new OtlpGrpcMetricExporter(options));
59+
}
60+
61+
std::unique_ptr<sdk::metrics::PushMetricExporter> GetExporter(
62+
std::unique_ptr<proto::collector::metrics::v1::MetricsService::StubInterface> stub_interface)
5463
{
5564
return std::unique_ptr<sdk::metrics::PushMetricExporter>(
5665
new OtlpGrpcMetricExporter(std::move(stub_interface)));
5766
}
5867

68+
std::unique_ptr<sdk::metrics::PushMetricExporter> GetExporter(
69+
std::unique_ptr<proto::collector::metrics::v1::MetricsService::StubInterface> stub_interface,
70+
std::shared_ptr<OtlpGrpcClient> client)
71+
{
72+
return std::unique_ptr<sdk::metrics::PushMetricExporter>(
73+
new OtlpGrpcMetricExporter(std::move(stub_interface), std::move(client)));
74+
}
75+
76+
std::unique_ptr<sdk::metrics::PushMetricExporter> GetExporter(
77+
const OtlpGrpcMetricExporterOptions &options,
78+
std::shared_ptr<OtlpGrpcClient> client)
79+
{
80+
return std::unique_ptr<sdk::metrics::PushMetricExporter>(
81+
new OtlpGrpcMetricExporter(options, std::move(client)));
82+
}
83+
5984
// Get the options associated with the given exporter.
6085
const OtlpGrpcMetricExporterOptions &GetOptions(std::unique_ptr<OtlpGrpcMetricExporter> &exporter)
6186
{
@@ -204,6 +229,35 @@ TEST_F(OtlpGrpcMetricExporterTestPeer, ConfigUnknownInsecureFromEnv)
204229
}
205230
# endif
206231

232+
TEST_F(OtlpGrpcMetricExporterTestPeer, CheckGetAggregationTemporality)
233+
{
234+
auto options = OtlpGrpcMetricExporterOptions();
235+
options.aggregation_temporality = PreferredAggregationTemporality::kCumulative;
236+
237+
auto client = OtlpGrpcClientFactory::Create(options);
238+
239+
auto exporter0 = GetExporter(options);
240+
auto exporter1 = GetExporter(client->MakeMetricsServiceStub());
241+
auto exporter2 = GetExporter(options, client);
242+
auto exporter3 = GetExporter(client->MakeMetricsServiceStub(), client);
243+
244+
EXPECT_EQ(
245+
opentelemetry::sdk::metrics::AggregationTemporality::kCumulative,
246+
exporter0->GetAggregationTemporality(opentelemetry::sdk::metrics::InstrumentType::kCounter));
247+
248+
EXPECT_EQ(
249+
opentelemetry::sdk::metrics::AggregationTemporality::kCumulative,
250+
exporter1->GetAggregationTemporality(opentelemetry::sdk::metrics::InstrumentType::kCounter));
251+
252+
EXPECT_EQ(
253+
opentelemetry::sdk::metrics::AggregationTemporality::kCumulative,
254+
exporter2->GetAggregationTemporality(opentelemetry::sdk::metrics::InstrumentType::kCounter));
255+
256+
EXPECT_EQ(
257+
opentelemetry::sdk::metrics::AggregationTemporality::kCumulative,
258+
exporter3->GetAggregationTemporality(opentelemetry::sdk::metrics::InstrumentType::kCounter));
259+
}
260+
207261
} // namespace otlp
208262
} // namespace exporter
209263
OPENTELEMETRY_END_NAMESPACE

0 commit comments

Comments
 (0)