You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@texera.apache.org by gi...@apache.org on 2026/09/04 01:03:17 UTC
(texera) 01/01: fix(pyamber, test, v1.2): stabilize flaky AtomicInteger get_and_set deadlock test (#7402)
This is an automated email from the ASF dual-hosted git repository.
github-merge-queue[bot] pushed a commit to branch gh-readonly-queue/release/v1.2/pr-7402-e49f3379f1a5eac75d7fbfbb54a14503f168da87
in repository https://gitbox.apache.org/repos/asf/texera.git
commit fc9387d3cf063a309ea1e0c9cfedd2b911046db6
Author: github-actions[bot] <41...@users.noreply.github.com>
AuthorDate: Fri Sep 4 01:02:54 2026 +0000
fix(pyamber, test, v1.2): stabilize flaky AtomicInteger get_and_set deadlock test (#7402)
### What changes were proposed in this PR?
Automated backport of #7295 to `release/v1.2`.
Source: d2fe4ba34e0e76679eb14499c854d487ed953a09 ยท [automation
run](https://github.com/apache/texera/actions/runs/31231086260)
### Any related issues, documentation, discussions?
Backport of #7295. Originally linked #7294.
### How was this PR tested?
Release-branch CI runs on this branch once the build is fixed and this
PR is marked ready for review.
### Was this PR authored or co-authored using generative AI tooling?
No.
Co-authored-by: Meng Wang <me...@uci.edu>
Co-authored-by: Yicong Huang <17...@users.noreply.github.com>
---
amber/src/test/python/core/util/test_atomic.py | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/amber/src/test/python/core/util/test_atomic.py b/amber/src/test/python/core/util/test_atomic.py
index 824b25b671..c8021234e0 100644
--- a/amber/src/test/python/core/util/test_atomic.py
+++ b/amber/src/test/python/core/util/test_atomic.py
@@ -85,8 +85,11 @@ class TestAtomicIntegerSingleThreaded:
# scheduling delay alone could let the assertions below pass even on
# a fixed implementation.
assert started.wait(timeout=2.0), "worker thread never started"
- # Give get_and_set a moment to either deadlock or return.
- completed.wait(timeout=0.5)
+ # Join instead of waiting on `completed`: the worker sets that event
+ # before it exits, so `is_alive()` is only reliable after a join. A
+ # fixed implementation joins in microseconds; a deadlocked get_and_set
+ # stays alive past the timeout and still trips the assertion below.
+ worker.join(timeout=5)
assert not errors, (
f"get_and_set raised before reaching the deadlock spin: {errors[0]!r}"
)