Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Abierto
#16,587 0 comentarios 0 reacciones 1 asignado Ver en GitHub

Los mantenedores suelen responder en 1 día

@kalragauri ya está trabajando en esto.

Desde el 23/10/2026.

Evaluación

Este issue todavía no se ha evaluado.

Descripción

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
Lenguaje dominante
C++
Estrellas
659
Forks
475
Merge medio
1 d 12 h
PR fusionados (30 d)
77

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de googleapis/google-cloud-cpp

Todos los issues de googleapis/google-cloud-cpp

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.