AddCallback() for metrics (gauge) causes a `pure virtual method called` error
Los mantenedores suelen responder en 1 día
@lalitb ya está trabajando en esto.
Desde el 25/8/2025.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
The opentelemetry was built through CMake and imported as a cc_library with .so files into my Bazel environment.
- OpenTelemetry - v1.18.0
- Openssl - v3.0.15
- curl -v8.10.1
- abseil v20240116.1
Steps to reproduce
void GaugeMetric::gauge_callback(metrics_api::ObserverResult result,
void *state)
{
auto *instance = static_cast<GaugeMetric *>(state);
if (opentelemetry::nostd::holds_alternative<opentelemetry::nostd::shared_ptr<metrics_api::ObserverResultT<double> > >(result))
{
auto observer_result = opentelemetry::nostd::get<opentelemetry::nostd::shared_ptr<metrics_api::ObserverResultT<double> > >(result);
if (!instance->baggage.is_empty())
{
MaStr<Str> bag { { "test_baggage", "test_fixture" } };
std::initializer_list<std::pair<opentelemetry::nostd::string_view, opentelemetry::common::AttributeValue> > attributes = {
{ "key1", 123 },
{ "key2", 45.6 },
{ "key3", "value" },
};
observer_result->Observe(instance->value.load(), bag);
std::cout << "after" << std::endl;
}
else
{
observer_result->Observe(instance->value.load());
}
}
}
void GaugeMetric::set_value(const double& val)
{
std::call_once(flag, [&]()
{
double_gauge->AddCallback(GaugeMetric::gauge_callback, this);
});
value.store(val);
}
CleanUp code:
auto meter_provider = dynamic_cast<metric_sdk::MeterProvider *>(metrics_api::Provider::GetMeterProvider().get());
if (meter_provider)
{
meter_provider->ForceFlush();
GB_DEBUG("Metrics force flushed.");
}
While program termination, ForceFlush() is invoked which calls the Callback() function for GaueMetrics which ends in
pure virtual method called
terminate called without an active exception
Note: all my bazel tests pass, this is only an error occuring during program termination.
What is the expected behavior?
If the program does not add any baggage to Gauge Callback and uses only
observer_result->Observe(instance->value.load());
the program terminates normally as expected. But adding baggage (map or std::initializer_list<std::pair<opentelemetry::nostd::string_view, opentelemetry::common::AttributeValue> > ) gives virtual method called error
Additional context
Stacktrace:
Thread 17 "test" received signal SIGABRT, Aborted.
[Switching to Thread 0x7ffff4dfe640 (LWP 113816)]
__pthread_kill_implementation (no_tid=0, signo=6, threadid=140737301702208) at ./nptl/pthread_kill.c:44
44 ./nptl/pthread_kill.c: No such file or directory.
(gdb) bt
#0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=140737301702208) at ./nptl/pthread_kill.c:44
#1 __pthread_kill_internal (signo=6, threadid=140737301702208) at ./nptl/pthread_kill.c:78
#2 __GI___pthread_kill (threadid=140737301702208, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#3 0x00007ffff5c42476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#4 0x00007ffff5c287f3 in __GI_abort () at ./stdlib/abort.c:79
#5 0x00007ffff60a2b9e in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007ffff60ae20c in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#7 0x00007ffff60ae277 in std::terminate() () from /lib/x86_64-linux-gnu/libstdc++.so.6
#8 0x00007ffff60aefa5 in __cxa_pure_virtual () from /lib/x86_64-linux-gnu/libstdc++.so.6
#9 0x00007ffff6ee1ee2 in opentelemetry::v1::sdk::metrics::FilteredOrderedAttributeMap::FilteredOrderedAttributeMap(opentelemetry::v1::common::KeyValueIterable const&, opentelemetry::v1::sdk::metrics::AttributesProcessor const*)::{lambda(opentelemetry::v1::nostd::string_view, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v1::nostd::string_view, opentelemetry::v1::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<opentelemetry::v1::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v1::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned char const, 18446744073709551615ul> >)#1}::operator()(opentelemetry::v1::nostd::string_view, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v1::nostd::string_view, opentelemetry::v1::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<opentelemetry::v1::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v1::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned char const, 18446744073709551615ul> >) const ()
from /home/siyer/.cache/bazel/_bazel_siyer/3c4caa948cf49a66edd7db3c22f83b3e/execroot/_main/bazel-out/k8-fastbuild/bin/instrumentation_manager/../_solib_k8/_U_A_Aard_Uopentelemetry-cpp_S_S_Card_Uopentelemetry-cpp_Ux86_U64_Ulibs___Uopentelemetry-cpp_Ux86_Slib/libopentelemetry_metrics.so
#10 0x00007ffff6ee2126 in opentelemetry::v1::nostd::function_ref<bool (opentelemetry::v1::nostd::string_view, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v1::nostd::string_view, opentelemetry::v1::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<opentelemetry::v1::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v1::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned char const, 18446744073709551615ul> >)>::BindTo<opentelemetry::v1::sdk::metrics::FilteredOrderedAttributeMap::FilteredOrderedAttributeMap(opentelemetry::v1::common::KeyValueIterable const&, opentelemetry::v1::sdk::metrics::AttributesProcessor const*)::{lambda(opentelemetry::v1::nostd::string_view, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v1::nostd::string_view, opentelemetry::v1::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<opentelemetry::v1::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v1::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned char const, 18446744073709551615ul> >)#1}>(opentelemetry::v1::sdk::metrics::FilteredOrderedAttributeMap::FilteredOrderedAttributeMap(opentelemetry::v1::common::KeyValueIterable const&, opentelemetry::v1::sdk::metrics::AttributesProcessor const*)::{lambda(opentelemetry::v1::nostd::string_view, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v1::nostd::string_view, opentelemetry::v1::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<opentelemetry::v1::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v1::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned char const, 18446744073709551615ul> >)#1}&)::{lambda(void*, opentelemetry::v1::nostd::string_view, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v1::nostd::string_view, opentelemetry::v1::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<opentelemetry::v1::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v1::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned char const, 18446744073709551615ul> >)#1}::operator()(void*, opentelemetry::v1::nostd::string_view, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v1::nostd::string_view, opentelemetry::v1::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<opentelemetry::v1::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v1::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned char const, 18446744073709551615ul> >) const ()
from /home/siyer/.cache/bazel/_bazel_siyer/3c4caa948cf49a66edd7db3c22f83b3e/execroot/_main/bazel-out/k8-fastbuild/bin/instrumentation_manager/../_solib_k8/_U_A_Aard_Uopentelemetry-cpp_S_S_Card_Uopentelemetry-cpp_Ux86_U64_Ulibs___Uopentelemetry-cpp_Ux86_Slib/libopentelemetry_metrics.so
#11 0x00007ffff6ee2180 in opentelemetry::v1::nostd::function_ref<bool (opentelemetry::v1::nostd::string_view, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v1::nostd::string_view, opentelemetry::v1::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<opentelemetry::v1::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v1::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned char const, 18446744073709551615ul> >)>::BindTo<opentelemetry::v1::sdk::metrics::FilteredOrderedAttributeMap::FilteredOrderedAttributeMap(opentelemetry::v1::common::KeyValueIterable const&, opentelemetry::v1::sdk::metrics::AttributesProcessor const*)::{lambda(opentelemetry::v1::nostd::string_view, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v1::nostd::string_view, opentelemetry::v1::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<opentelemetry::v1::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v1::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned char const, 18446744073709551615ul> >)#1}>(opentelemetry::v1::sdk::metrics::FilteredOrderedAttributeMap::FilteredOrderedAttributeMap(opentelemetry::v1::common::KeyValueIterable const&, opentelemetry::v1::sdk::metrics::AttributesProcessor const*)::{lambda(opentelemetry::v1::nostd::string_view, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v1::nostd::string_view, opentelemetry::v1::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<opentelemetry::v1::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v1::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned char const, 18446744073709551615ul> >)#1}&)::{lambda(void*, opentelemetry::v1::nostd::string_view, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v1::nostd::string_view, opentelemetry::v1::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<opentelemetry::v1::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v1::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned char const, 18446744073709551615ul> >)#1}::_FUN(void*, opentelemetry::v1::nostd::string_view, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v1::nostd::string_view, opentelemetry::v1::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<opentelemetry::v1::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v1::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned char const, 18446744073709551615ul> >) ()
from /home/siyer/.cache/bazel/_bazel_siyer/3c4caa948cf49a66edd7db3c22f83b3e/execroot/_main/bazel-out/k8-fastbuild/bin/instrumentation_manager/../_solib_k8/_U_A_Aard_Uopentelemetry-cpp_S_S_Card_Uopentelemetry-cpp_Ux86_U64_Ulibs___Uopentelemetry-cpp_Ux86_Slib/libopentelemetry_metrics.so
#12 0x00005555555963b5 in opentelemetry::v1::common::KeyValueIterableView<std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::ForEachKeyValue(opentelemetry::v1::nostd::function_ref<bool (opentelemetry::v1::nostd::string_view, absl::otel_v1::variant<bool, int, long, unsigned int, double, char const*, opentelemetry::v1::nostd::string_view, opentelemetry::v1::nostd::span<bool const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned int const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<double const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<opentelemetry::v1::nostd::string_view const, 18446744073709551615ul>, unsigned long, opentelemetry::v1::nostd::span<unsigned long const, 18446744073709551615ul>, opentelemetry::v1::nostd::span<unsigned char const, 18446744073709551615ul> >)>) const ()
#13 0x00007ffff6ee1f99 in opentelemetry::v1::sdk::metrics::FilteredOrderedAttributeMap::FilteredOrderedAttributeMap(opentelemetry::v1::common::KeyValueIterable const&, opentelemetry::v1::sdk::metrics::AttributesProcessor const*) ()
from /home/siyer/.cache/bazel/_bazel_siyer/3c4caa948cf49a66edd7db3c22f83b3e/execroot/_main/bazel-out/k8-fastbuild/bin/instrumentation_manager/../_solib_k8/_U_A_Aard_Uopentelemetry-cpp_S_S_Card_Uopentelemetry-cpp_Ux86_U64_Ulibs___Uopentelemetry-cpp_Ux86_Slib/libopentelemetry_metrics.so
#14 0x00007ffff6ee9906 in opentelemetry::v1::sdk::metrics::ObserverResultT<double>::Observe(double, opentelemetry::v1::common::KeyValueIterable const&) ()
from /home/siyer/.cache/bazel/_bazel_siyer/3c4caa948cf49a66edd7db3c22f83b3e/execroot/_main/bazel-out/k8-fastbuild/bin/instrumentation_manager/../_solib_k8/_U_A_Aard_Uopentelemetry-cpp_S_S_Card_Uopentelemetry-cpp_Ux86_U64_Ulibs___Uopentelemetry-cpp_Ux86_Slib/libopentelemetry_metrics.so
#15 0x000055555559961c in ARD::Foundation::Instrumentation::Metrics::GaugeMetric::gauge_callback(absl::otel_v1::variant<opentelemetry::v1::nostd::shared_ptr<opentelemetry::v1::metrics::ObserverResultT<long> >, opentelemetry::v1::nostd::shared_ptr<opentelemetry::v1::metrics::ObserverResultT<double> > >, void*) ()
#16 0x00007ffff6ee4ed7 in opentelemetry::v1::sdk::metrics::ObservableRegistry::Observe(opentelemetry::v1::common::SystemTimestamp) ()
from /home/siyer/.cache/bazel/_bazel_siyer/3c4caa948cf49a66edd7db3c22f83b3e/execroot/_main/bazel-out/k8-fastbuild/bin/instrumentation_manager/../_solib_k8/_U_A_Aard_Uopentelemetry-cpp_S_S_Card_Uopentelemetry-cpp_Ux86_U64_Ulibs___Uopentelemetry-cpp_Ux86_Slib/libopentelemetry_metrics.so
#17 0x00007ffff6e9611f in opentelemetry::v1::sdk::metrics::Meter::Collect(opentelemetry::v1::sdk::metrics::CollectorHandle*, opentelemetry::v1::common::SystemTimestamp) ()
- Lenguaje dominante
- C++
- Estrellas
- 1.4k
- Forks
- 660
- Merge medio
- 2 d 6 h
- PR fusionados (30 d)
- 55
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de open-telemetry/opentelemetry-cpp
-
needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
open-telemetry/opentelemetry-cpp#4745 ·
Los mantenedores suelen responder en 1 día
-
[CMake] Strengthen pkg-config installation tests to detect missing metadata and dependenciesAbiertoneeds-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
open-telemetry/opentelemetry-cpp#4697 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
TracerContext construction might result in a terminateQuizá libre de nuevo @akshat-lakhera la tomó hace 24 días y no hay ningún pull request abierto. Abiertotriage/accepted
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
open-telemetry/opentelemetry-cpp#4684 · 2 comentarios · 2 reacciones ·
Los mantenedores suelen responder en 1 día
-
[CI] Add Ubuntu 26.04 runners to the CI workflowQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abiertotriage/accepted
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
open-telemetry/opentelemetry-cpp#4596 · 2 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
[BUG] Resource::Create() throws bad_variant_access if process.executable.name isn't a stringPosiblemente ocupada @ryux1 la tomó hace 58 días. Abiertobug help wanted triage/accepted
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
open-telemetry/opentelemetry-cpp#4535 · 1 comentario · 2 reacciones ·
Los mantenedores suelen responder en 1 día
Todos los issues de open-telemetry/opentelemetry-cpp
Issues similares
-
Linux npm packaging leaves workspace files that block subsequent CI checkoutPosiblemente ocupada @Spockkk0225 la tomó hoy. Abiertoci
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
alibaba/neug#1195 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 3 días
-
QA/No release-notes/exclude tests tests/missing-coverage tests/test-quality
Dificultad 2/5 1-3 horas Aptitud para principiantes 71/100
brave/brave-browser#61019 ·
Los mantenedores suelen responder en 1 día
-
? - Needs Triage bug CUTLASS C++
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
Los mantenedores suelen responder en 4 días