mirror of https://github.com/grpc/grpc.git
[OTel] Remove global fallback for meter provider (#34190)
Based on updates at https://github.com/grpc/proposal/pull/380 <!-- If you know who should review your pull request, please assign it to that person, otherwise the pull request would get assigned randomly. If your pull request is for a specific language, please add the appropriate lang label. -->
This commit is contained in:
parent
81db191c2b
commit
f5e02f6c62
|
|
@ -26,7 +26,6 @@
|
|||
|
||||
#include "opentelemetry/metrics/meter.h"
|
||||
#include "opentelemetry/metrics/meter_provider.h"
|
||||
#include "opentelemetry/metrics/provider.h"
|
||||
#include "opentelemetry/nostd/shared_ptr.h"
|
||||
#include "opentelemetry/nostd/unique_ptr.h"
|
||||
|
||||
|
|
@ -118,13 +117,12 @@ OpenTelemetryPluginBuilder& OpenTelemetryPluginBuilder::DisableMetrics(
|
|||
void OpenTelemetryPluginBuilder::BuildAndRegisterGlobal() {
|
||||
opentelemetry::nostd::shared_ptr<opentelemetry::metrics::MeterProvider>
|
||||
meter_provider = meter_provider_;
|
||||
if (meter_provider == nullptr) {
|
||||
meter_provider = opentelemetry::metrics::Provider::GetMeterProvider();
|
||||
}
|
||||
auto meter = meter_provider->GetMeter("grpc");
|
||||
delete g_otel_plugin_state_;
|
||||
g_otel_plugin_state_ = new struct OTelPluginState;
|
||||
g_otel_plugin_state_->meter_provider = std::move(meter_provider);
|
||||
if (meter_provider == nullptr) {
|
||||
return;
|
||||
}
|
||||
auto meter = meter_provider->GetMeter("grpc");
|
||||
if (metrics_.contains(OTelClientAttemptStartedInstrumentName())) {
|
||||
g_otel_plugin_state_->client.attempt.started = meter->CreateUInt64Counter(
|
||||
std::string(OTelClientAttemptStartedInstrumentName()));
|
||||
|
|
@ -166,6 +164,7 @@ void OpenTelemetryPluginBuilder::BuildAndRegisterGlobal() {
|
|||
meter->CreateUInt64Histogram(std::string(
|
||||
OTelServerCallRcvdTotalCompressedMessageSizeInstrumentName()));
|
||||
}
|
||||
g_otel_plugin_state_->meter_provider = std::move(meter_provider);
|
||||
grpc_core::ServerCallTracerFactory::RegisterGlobal(
|
||||
new grpc::internal::OpenTelemetryServerCallTracerFactory);
|
||||
grpc_core::CoreConfiguration::RegisterBuilder(
|
||||
|
|
|
|||
|
|
@ -64,23 +64,18 @@ class OTelPluginEnd2EndTest : public ::testing::Test {
|
|||
protected:
|
||||
using ::testing::Test::SetUp;
|
||||
void SetUp(const absl::flat_hash_set<absl::string_view>& metric_names,
|
||||
bool global_meter_provider = false) {
|
||||
bool test_no_meter_provider = false) {
|
||||
// We are resetting the MeterProvider and OpenTelemetry plugin at the start
|
||||
// of each test to avoid test results from one test carrying over to another
|
||||
// test. (Some measurements can get arbitrarily delayed.)
|
||||
auto meter_provider =
|
||||
std::make_shared<opentelemetry::sdk::metrics::MeterProvider>();
|
||||
reader_.reset(new grpc::testing::MockMetricReader);
|
||||
meter_provider->AddMetricReader(reader_);
|
||||
grpc_core::CoreConfiguration::Reset();
|
||||
grpc::internal::OpenTelemetryPluginBuilder ot_builder;
|
||||
ot_builder.EnableMetrics(metric_names);
|
||||
if (global_meter_provider) {
|
||||
opentelemetry::metrics::Provider::SetMeterProvider(
|
||||
opentelemetry::nostd::shared_ptr<
|
||||
opentelemetry::metrics::MeterProvider>(
|
||||
std::move(meter_provider)));
|
||||
} else {
|
||||
if (!test_no_meter_provider) {
|
||||
auto meter_provider =
|
||||
std::make_shared<opentelemetry::sdk::metrics::MeterProvider>();
|
||||
reader_.reset(new grpc::testing::MockMetricReader);
|
||||
meter_provider->AddMetricReader(reader_);
|
||||
ot_builder.SetMeterProvider(std::move(meter_provider));
|
||||
}
|
||||
ot_builder.BuildAndRegisterGlobal();
|
||||
|
|
@ -395,23 +390,11 @@ TEST_F(OTelPluginEnd2EndTest, ServerCallRcvdTotalCompressedMessageSize) {
|
|||
EXPECT_EQ(*status_value, "OK");
|
||||
}
|
||||
|
||||
// Make sure that things work with the global meter provider as well
|
||||
TEST_F(OTelPluginEnd2EndTest, UseGlobalMeterProvider) {
|
||||
SetUp({grpc::internal::OTelClientAttemptStartedInstrumentName()});
|
||||
// Make sure that no meter provider results in normal operations.
|
||||
TEST_F(OTelPluginEnd2EndTest, NoMeterProviderRegistered) {
|
||||
SetUp({grpc::internal::OTelClientAttemptStartedInstrumentName()},
|
||||
/*test_no_meter_provider=*/true);
|
||||
SendRPC();
|
||||
const char* kMetricName = "grpc.client.attempt.started";
|
||||
auto data = ReadCurrentMetricsData(
|
||||
[&](const absl::flat_hash_map<
|
||||
std::string,
|
||||
std::vector<opentelemetry::sdk::metrics::PointDataAttributes>>&
|
||||
data) { return !data.contains(kMetricName); });
|
||||
ASSERT_EQ(data[kMetricName].size(), 1);
|
||||
auto point_data = absl::get_if<opentelemetry::sdk::metrics::SumPointData>(
|
||||
&data[kMetricName][0].point_data);
|
||||
ASSERT_NE(point_data, nullptr);
|
||||
auto client_started_value = absl::get_if<int64_t>(&point_data->value_);
|
||||
ASSERT_NE(client_started_value, nullptr);
|
||||
ASSERT_EQ(*client_started_value, 1);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
|
|||
Loading…
Reference in New Issue