AddCallback() for metrics (gauge) causes a `pure virtual method called` error
メンテナーはふだん 1 日以内に返信
@lalitb がすでに取り組んでいます。
2025年8月25日 から。
評価
この issue はまだ評価されていません。
説明
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) ()
- 主要言語
- C++
- スター
- 1.4k
- フォーク
- 660
- 平均マージ
- 1日 12時間
- マージ済み PR(30日)
- 47
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
open-telemetry/opentelemetry-cpp のほかの issue
-
Baggage::ToHeader/FromHeader use form-style `+` for space, which other W3C Baggage implementations read as a literal plus対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンbug triage/accepted
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
open-telemetry/opentelemetry-cpp#4745 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
needs-triage
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
open-telemetry/opentelemetry-cpp#4697 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
TracerContext construction might result in a terminate再び着手できるかも @akshat-lakhera が 25 日前に担当しましたが、オープン中のプルリクエストはありません。 オープンtriage/accepted
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
open-telemetry/opentelemetry-cpp#4684 · コメント 2 件 · リアクション 2 件 ·
メンテナーはふだん 1 日以内に返信
-
[CI] Add Ubuntu 26.04 runners to the CI workflow再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープンtriage/accepted
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
open-telemetry/opentelemetry-cpp#4596 · コメント 2 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
[BUG] Resource::Create() throws bad_variant_access if process.executable.name isn't a string対応中かも @ryux1 が 59 日前に担当しました。 オープンbug help wanted triage/accepted
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
open-telemetry/opentelemetry-cpp#4535 · コメント 1 件 · リアクション 2 件 ·
メンテナーはふだん 1 日以内に返信
open-telemetry/opentelemetry-cpp の issue をすべて見る
似ている issue
-
documentation enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
QuantStack/git2cpp#203 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
BaptisteHudyma/Lamp-Da#588 ·
メンテナーはふだん 1 日以内に返信
-
bug macOS networking
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
docling-project/docling-parse#448 ·
メンテナーはふだん 5 日以内に返信