Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

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

Ouverte
#16,587 0 commentaires 0 réactions 1 personne assignée Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@kalragauri y travaille déjà.

Depuis le 23/10/2026.

Évaluation

Cette issue n'a pas encore été évaluée.

Description

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
Langage dominant
C++
Étoiles
659
Forks
475
Merge moyen
1 j 12 h
PR mergées (30 j)
77

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de googleapis/google-cloud-cpp

Toutes les issues de googleapis/google-cloud-cpp

Issues similaires

Plus d'issues C++

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.