[BUG] func_otlp_grpc segfaults during a TLS case after ctest reports everything passing, failing the job

オープン
#4,489 コメント 5 件 リアクション 1 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
48/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
cmake, cpp, github-actions, grpc

調査の方向性

functional/otlp/CMakeLists.txt と、ctest の後に func_otlp_grpc を実行する ci/do_ci.sh および run_test_mode.sh のパスから始めてください。引用されている CI の実行とテスト出力を使って、断続的に発生する cert-unreadable TLS ケースと、その teardown の挙動を調査してください。ctest が成功した後に TLS functional test がセグメンテーションフォルトを起こさず、ジョブ結果を誤解を招く状態のままにしなくなれば完了です。

索引モデルが issue の本文から書いたものです。

説明

bug triage/accepted

Describe your environment

GitHub hosted Linux runners, main at 1c2b007a. Seen on two different maintainer mode jobs:

  • CMake gcc 14 (maintainer mode, async)
  • CMake clang 18 (maintainer mode, yaml config)

Steps to reproduce

I do not have a local reproduction. It shows up on CI, and both sightings below are on pull requests that do not touch the OTLP gRPC exporter.

What is the expected behavior?

ci/do_ci.sh reports the job's result from the tests. When ctest reports every test passing, the job passes.

What is the actual behavior?

The job fails with exit code 139 after ctest has already reported everything green. The crash is in the functional gRPC binary that runs after ctest, on a TLS case:

100% tests passed, 0 tests failed out of 1593
...
Running test cert-unreadable on secure https://localhost:4317 with server https
I0000 ssl_transport_security.cc:2160] Handshake failed with error SSL_ERROR_SSL: error:0A
./run_test_mode.sh: line 67: 34560 Segmentation fault (core dumped) "${TEST_BIN_DIR}/${TEST_EXECUTABLE}" --debug --m
##[error]Process completed with exit code 139

Two sightings, two days apart, two compilers:

PR job run
#4453 CMake gcc 14 (maintainer mode, async) 97488993921
#4337 CMake clang 18 (maintainer mode, yaml config) 97837662928

Additional context

Neither pull request can be the cause, and that is checkable rather than argued. functional/otlp/CMakeLists.txt links the crashing binary against two targets:

target_link_libraries(func_otlp_grpc ${CMAKE_THREAD_LIBS_INIT}
                      opentelemetry_trace opentelemetry_exporter_otlp_grpc)

#4337 changes only exporters/elasticsearch/, and grep -rn -i elasticsearch functional/ returns nothing. #4453 changes only exporters/otlp/src/otlp_http_client.cc and its test. Neither is in that binary's link closure.

For #4453 there is a second measurement: the head that passed this job and the head that failed it differ only in comments, 0 non-comment changed lines. One passed, one failed.

It is not constant. CMake clang 18 (maintainer mode, yaml config) was green on 11 of the last 12 main commits, so this reads as a race in the functional test or in the gRPC TLS teardown rather than something that reproduces on demand.

What it costs today is that a red job on a pull request has to be opened and read before it can be dismissed, and the log looks alarming because ctest is green immediately above it.

主要言語
C++
スター
1.4k
フォーク
658
平均マージ
2日 6時間
マージ済み PR(30日)
55

環境構築

Codespaces で開く

このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

open-telemetry/opentelemetry-cpp のほかの issue

open-telemetry/opentelemetry-cpp の issue をすべて見る

似ている issue

C++ の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。