Skip to content

Commit bd04283

Browse files
committed
Fix flakiness by ensuring block commits confirm the expected stacks block
Signed-off-by: Jacinta Ferrant <[email protected]>
1 parent d937efd commit bd04283

File tree

2 files changed

+23
-32
lines changed

2 files changed

+23
-32
lines changed

stacks-node/src/tests/signer/mod.rs

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,11 +1103,24 @@ impl<Z: SpawnedSignerTrait> SignerTest<Z> {
11031103
/// Mine a BTC block and wait for a new Stacks block to be mined
11041104
/// Note: do not use nakamoto blocks mined heuristic if running a test with multiple miners
11051105
fn mine_nakamoto_block(&self, timeout: Duration, use_nakamoto_blocks_mined: bool) {
1106-
let mined_before = self.running_nodes.counters.naka_mined_blocks.get();
11071106
let info_before = get_chain_info(&self.running_nodes.conf);
11081107
let mined_btc_block_time = Instant::now();
11091108
info!("Pausing stacks block mining");
11101109
TEST_MINE_SKIP.set(true);
1110+
1111+
let Counters {
1112+
naka_submitted_commits: commits_submitted,
1113+
naka_submitted_commit_last_burn_height: commits_last_burn_height,
1114+
naka_submitted_commit_last_stacks_tip: commits_last_stacks_tip,
1115+
naka_mined_blocks: mined_blocks,
1116+
..
1117+
} = self.running_nodes.counters.clone();
1118+
1119+
let commits_before = commits_submitted.load(Ordering::SeqCst);
1120+
let commit_burn_height_before = commits_last_burn_height.load(Ordering::SeqCst);
1121+
let commits_stacks_tip_before = commits_last_stacks_tip.load(Ordering::SeqCst);
1122+
let mined_before = mined_blocks.load(Ordering::SeqCst);
1123+
11111124
next_block_and(
11121125
&self.running_nodes.btc_regtest_controller,
11131126
timeout.as_secs(),
@@ -1128,13 +1141,15 @@ impl<Z: SpawnedSignerTrait> SignerTest<Z> {
11281141
info!("Unpausing stacks block mining");
11291142
let mined_block_time = Instant::now();
11301143
TEST_MINE_SKIP.set(false);
1144+
// Ensure that the tenure change transaction is mined and that the subsequent block commit confirms it
11311145
wait_for(timeout.as_secs(), || {
1132-
let info_after = get_chain_info(&self.running_nodes.conf);
1133-
let blocks_mined = self.running_nodes.counters.naka_mined_blocks.get();
1134-
// println!("HERE BEFORE {}, AFTER {}", info_before.stacks_tip_height, info_after.stacks_tip_height);
1135-
// println!("HERE BEFORE {mined_before}, AFTER {blocks_mined}");
1136-
Ok(info_after.stacks_tip_height > info_before.stacks_tip_height
1137-
&& (!use_nakamoto_blocks_mined || blocks_mined > mined_before))
1146+
Ok(commits_submitted.load(Ordering::SeqCst) > commits_before
1147+
&& commits_last_burn_height.load(Ordering::SeqCst) >= commit_burn_height_before
1148+
&& commits_last_stacks_tip.load(Ordering::SeqCst) >= commits_stacks_tip_before
1149+
&& get_chain_info(&self.running_nodes.conf).stacks_tip_height
1150+
> info_before.stacks_tip_height
1151+
&& (!use_nakamoto_blocks_mined
1152+
|| mined_blocks.load(Ordering::SeqCst) > mined_before))
11381153
})
11391154
.expect("Failed to mine Tenure Change block");
11401155
info!(

stacks-node/src/tests/signer/v0.rs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -175,31 +175,7 @@ impl<Z: SpawnedSignerTrait> SignerTest<Z> {
175175
// Note, we don't use `nakamoto_blocks_mined` counter, because there
176176
// could be other miners mining blocks.
177177
info!("Waiting for first Epoch 3.0 tenure to start");
178-
let info = get_chain_info(&self.running_nodes.conf);
179-
next_block_and(&self.running_nodes.btc_regtest_controller, 30, || {
180-
Ok(get_chain_info(&self.running_nodes.conf).burn_block_height > info.burn_block_height)
181-
})
182-
.unwrap();
183-
let info = get_chain_info(&self.running_nodes.conf);
184-
info!(
185-
"Waiting for signers to agree on expected tenure id: {}",
186-
info.pox_consensus
187-
);
188-
let res = wait_for_state_machine_update_by_miner_tenure_id(
189-
30,
190-
&info.pox_consensus,
191-
&self.signer_addresses_versions(),
192-
);
193-
if res.is_err() {
194-
warn!("Signer updates failed to update but attempting to continue test anyway");
195-
}
196-
TEST_MINE_SKIP.set(false);
197-
let height_before = info.stacks_tip_height;
198-
info!("Waiting for first Nakamoto block: {}", height_before + 1);
199-
wait_for(30, || {
200-
Ok(get_chain_info(&self.running_nodes.conf).stacks_tip_height > height_before)
201-
})
202-
.expect("Timed out waiting for first Nakamoto block after 3.0 boundary");
178+
self.mine_nakamoto_block(Duration::from_secs(60), false);
203179
info!("Ready to mine Nakamoto blocks!");
204180
}
205181
}

0 commit comments

Comments
 (0)