Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

storage: MSan use-after-dtor flake at exit in tests calling EnableGrpcMetricsImpl

Đang mở
#16,587 0 bình luận 0 reaction 1 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@kalragauri đang làm issue này rồi.

Từ ngày 23/10/2026.

Đánh giá

Issue này chưa được đánh giá.

Mô tả

api: storage type: bug
Description

Unit tests introduced in #16538 that call storage_internal::EnableGrpcMetricsImpl() are flaky under MemorySanitizer (msan-ci and msan-storage-ci), failing at process exit with a use-of-uninitialized-value (use-after-dtor) error:

  • //google/cloud/storage:internal_grpc_channel_metrics_test:
    • ChannelMetrics.RegisteredAuthorityHonorsOption
  • //google/cloud/storage:internal_grpc_metrics_exporter_impl_test:
    • GrpcMetricsExporter.FindMeterProviderAfterEnable
    • GrpcMetricsExporter.ConcurrentEnableFindsSameProvider
Root Cause
  1. EnableGrpcMetricsImpl() creates an OpenTelemetry MeterProvider with a PeriodicExportingMetricReader background thread (DoBackgroundWork()) and intentionally retains it in two process-lifetime singletons that are never destroyed at exit (ExporterRegistry::Singleton() and gRPC's global OpenTelemetryPluginBuilder::BuildAndRegisterGlobal()).
  2. In opentelemetry-cpp 1.24.0, PeriodicExportingMetricReader::DoBackgroundWork() runs its first CollectAndExportOnce() immediately when the worker thread starts.
  3. Instruments without a custom AggregationConfig (such as the gRPC WRR/xDS/RLS counters and gauges) use AggregationConfig::GetOrDefault(), which returns a pointer to a function-local static const AggregationConfig default_config{} (and ViewRegistry::FindViews() uses static const View view("")).
  4. When the unit test binary finishes main() and calls exit(), __cxa_atexit runs AggregationConfig::~AggregationConfig() on default_config (which MSan poisons via __sanitizer_dtor_callback_fields), while the leaked PeriodicExportingMetricReader background thread is concurrently executing SyncMetricStorage::Collect() and reading aggregation_config_->cardinality_limit_.
Example Stack Trace
==12==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x7ff25512eae8 in opentelemetry::v1::sdk::metrics::AttributesHashMapWithCustomHash<opentelemetry::v1::sdk::metrics::FilteredOrderedAttributeMapHash>::AttributesHashMapWithCustomHash(unsigned long) .../opentelemetry/sdk/metrics/state/attributes_hashmap.h:53:9
    #1 0x7ff25512eae8 in opentelemetry::v1::sdk::metrics::SyncMetricStorage::Collect(...) .../external/opentelemetry-cpp+/sdk/src/metrics/state/sync_metric_storage.cc:39:35
    #2 0x7ff2550d38fe in opentelemetry::v1::sdk::metrics::Meter::Collect(...) .../external/opentelemetry-cpp+/sdk/src/metrics/meter.cc:661:28
...
    #10 0x7ff255080e64 in opentelemetry::v1::sdk::metrics::PeriodicExportingMetricReader::CollectAndExportOnce() .../external/opentelemetry-cpp+/sdk/src/metrics/export/periodic_exporting_metric_reader.cc:172:11
    #11 0x7ff255080e64 in opentelemetry::v1::sdk::metrics::PeriodicExportingMetricReader::DoBackgroundWork() .../external/opentelemetry-cpp+/sdk/src/metrics/export/periodic_exporting_metric_reader.cc:107:19

  Member fields were destroyed
    #0 0x492ed1 in __sanitizer_dtor_callback_fields
    #1 0x7ff257252416 in opentelemetry::v1::sdk::metrics::AggregationConfig::~AggregationConfig() .../opentelemetry/sdk/metrics/aggregation/aggregation_config.h:37:10
    #3 0x4938bf in MSanCxaAtExitWrapper(void*)
    #4 0x7ff24dd6e70d in exit
Example CI Builds
Ngôn ngữ chính
C++
Star
659
Fork
475
Merge trung bình
1 ngày 12 giờ
Pull request đã merge (30 ngày)
77

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của googleapis/google-cloud-cpp

Tất cả issue của googleapis/google-cloud-cpp

Issue tương tự

Thêm issue về C++

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.