Skip to content

Commit

Permalink
ci: fix spurious CI failure
Browse files Browse the repository at this point in the history
PR #5720 introduced runtime self-tuning. It included a test that
attempts to verify self-tuning logic. The test is heavily reliant on
timing details. This patch attempts to make the test a bit more reliable
by not assuming tuning will converge within a set amount of time.
  • Loading branch information
carllerche committed Jun 1, 2023
1 parent c748f49 commit 6ffe521
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 17 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ jobs:
toolchain: ${{ env.rust_nightly }}
- uses: Swatinem/rust-cache@v2
- name: asan
run: cargo test --workspace --all-features --target x86_64-unknown-linux-gnu --tests -- --test-threads 1
run: cargo test --workspace --all-features --target x86_64-unknown-linux-gnu --tests -- --test-threads 1 --nocapture
env:
RUSTFLAGS: -Z sanitizer=address
# Ignore `trybuild` errors as they are irrelevant and flaky on nightly
Expand Down
25 changes: 9 additions & 16 deletions tokio/tests/rt_threaded.rs
Original file line number Diff line number Diff line change
Expand Up @@ -627,7 +627,6 @@ fn test_tuning() {
}

// Now, hammer the injection queue until the interval drops.
let mut i = 0;
let mut n = 0;
loop {
let curr = interval.load(Relaxed);
Expand All @@ -645,18 +644,16 @@ fn test_tuning() {
break;
}

let counter = counter.clone();
let interval = interval.clone();
if Arc::strong_count(&interval) < 5_000 {
let counter = counter.clone();
let interval = interval.clone();

if i <= 5_000 {
i += 1;
rt.spawn(async move {
let prev = counter.swap(0, Relaxed);
interval.store(prev, Relaxed);
});

std::thread::yield_now();
} else {
std::thread::sleep(Duration::from_micros(500));
}
}

Expand All @@ -682,7 +679,6 @@ fn test_tuning() {
}

// Now, hammer the injection queue until the interval reaches the expected range.
let mut i = 0;
let mut n = 0;
loop {
let curr = interval.load(Relaxed);
Expand All @@ -697,20 +693,17 @@ fn test_tuning() {
break;
}

let counter = counter.clone();
let interval = interval.clone();
if Arc::strong_count(&interval) <= 5_000 {
let counter = counter.clone();
let interval = interval.clone();

if i <= 5_000 {
i += 1;
rt.spawn(async move {
let prev = counter.swap(0, Relaxed);
interval.store(prev, Relaxed);
});

std::thread::yield_now();
} else {
std::thread::sleep(Duration::from_micros(500));
}

std::thread::yield_now();
}

flag.store(false, Relaxed);
Expand Down

0 comments on commit 6ffe521

Please sign in to comment.