Add a thread sanitizer CI lane and Event Hubs thread safety tests
Maintainer thường phản hồi trong vòng 1 ngày
@j7nw4r đang làm issue này rồi.
Từ ngày 5/8/2026.
Đánh giá
Issue này chưa được đánh giá.
Mô tả
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.
- Ngôn ngữ chính
- C++
- Star
- 206
- Fork
- 178
- Merge trung bình
- 2 ngày 15 giờ
- Pull request đã merge (30 ngày)
- 33
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của Azure/azure-sdk-for-cpp
-
bug EngSys
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
Azure/azure-sdk-for-cpp#7362 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Client needs-team-attention Service Attention Storage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Azure/azure-sdk-for-cpp#7347 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Client Event Hubs needs-team-attention Service Attention
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
Azure/azure-sdk-for-cpp#7333 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Azure Storage STG105 Feature TestsCó thể làm lại được @Jinming-Hu đã nhận 31 ngày trước và không có pull request nào đang mở. Đang mởClient Storage
Azure/azure-sdk-for-cpp#7449 · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Azure.Core bug test-enhancement
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 66/100
Azure/azure-sdk-for-cpp#7401 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của Azure/azure-sdk-for-cpp
Issue tương tự
-
documentation enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
QuantStack/git2cpp#203 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
BaptisteHudyma/Lamp-Da#588 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug macOS networking
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
docling-project/docling-parse#448 ·
Maintainer thường phản hồi trong vòng 5 ngày