Add a thread sanitizer CI lane and Event Hubs thread safety tests
メンテナーはふだん 1 日以内に返信
@j7nw4r がすでに取り組んでいます。
2026年8月5日 から。
評価
この issue はまだ評価されていません。
説明
Summary
The Event Hubs library has no thread safety test and no sanitizer lane in CI. The races in #7284 thus went into main with no warning, and a new race can do the same. A thread sanitizer build and a small test suite let CI hold the thread safety guarantee.
Parent: #7284. Severity tags follow the key in #7252. The code anchors refer to commit 2de7c583e.
Motivation
A thread sanitizer finds all three defects in #7284. It needs one test that shares a client across threads. No such test exists. The stress test applies load (test/eventhubs-stress-test/). It does not share one client across threads, and it does not run under a sanitizer.
A sanitizer lane also protects the locking rework, which is the largest change in this workstream. #7286 changes EnsureSender to a double-checked write. #7288 moves to a std::shared_mutex. A small error in either change gives a rare race, not a test failure.
The repository can already run an ASan lane or a UBSan lane. A TSan job can then extend it. Read the CI definitions before you add a job.
Proposal
Build support.
- Add a CMake option that turns on
-fsanitize=threadfor clang and gcc. [GA quality bar] - Put ASan and UBSan on the same option. The option selects one sanitizer, because a binary cannot hold the thread sanitizer and the address sanitizer together. [GA quality bar]
- Add a CI job that builds the Event Hubs tests with the thread sanitizer and runs the thread safety tests. [GA quality bar]
Tests.
- Add a test for the unlocked map read. N threads call
Sendto N different partitions that no thread used before. The test uses one sharedProducerClient. [GA quality bar] - Add a shared-client stress test. One
ProducerClient, many threads, sends to the same partition and to different partitions. The test counts the messages that arrive. [GA quality bar] - Add a wrong-use test. A
TryAddduring aSendon the same batch fails each time, and the batch stays correct. [GA quality bar] - Add a processor test. Parallel partition handlers write to a checkpoint store. The test loses no checkpoint and duplicates no checkpoint. [GA quality bar]
- Add a lifecycle test for the races in #7255: a parallel
SendandClose, then a parallelStartandStop. The two workstreams then share one suite. [GA quality bar] - Extend the stress test to apply load to one shared client (
test/eventhubs-stress-test/). [Post GA]
The map-read test must cause a thread sanitizer error before #7285. It must pass after #7285.
The tests that need a broker must use the existing test broker, not a live namespace. The lane then stays cheap enough for every pull request. #7270 pinned the broker hash, so the target is stable.
Validation
- The thread sanitizer lane runs in CI. A reported race fails the build.
- The map-read test causes a thread sanitizer error when you revert #7285.
- The full test suite passes under the thread sanitizer with no suppressions. A necessary suppression has a comment that gives the reason and the issue that removes it.
- The lane is fast enough to run on every pull request.
- 主要言語
- C++
- スター
- 206
- フォーク
- 178
- 平均マージ
- 2日 8時間
- マージ済み PR(30日)
- 36
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
Azure/azure-sdk-for-cpp のほかの issue
-
bug EngSys
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
Azure/azure-sdk-for-cpp#7362 ·
メンテナーはふだん 1 日以内に返信
-
Client needs-team-attention Service Attention Storage
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
Azure/azure-sdk-for-cpp#7347 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
Client Event Hubs needs-team-attention Service Attention
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
Azure/azure-sdk-for-cpp#7333 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Azure Storage STG105 Feature Tests再び着手できるかも @Jinming-Hu が 32 日前に担当しましたが、オープン中のプルリクエストはありません。 オープンClient Storage
Azure/azure-sdk-for-cpp#7449 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
Azure.Core bug test-enhancement
難易度 3/5 1〜2日 初心者へのやさしさ 66/100
Azure/azure-sdk-for-cpp#7401 ·
メンテナーはふだん 1 日以内に返信
Azure/azure-sdk-for-cpp の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
arvidn/libtorrent#9126 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
Sunrisepeak/mcpp-language-server#80 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
xiaoyifang/goldendict-ng#3148 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 91/100
triton-inference-server/server#9069 ·
メンテナーはふだん 1 日以内に返信