Skip to content

Commit f568275

Browse files
committed
fix flakiness in forked-tenure-is-ignored
1 parent e1c09f7 commit f568275

File tree

1 file changed

+33
-12
lines changed

1 file changed

+33
-12
lines changed

testnet/stacks-node/src/tests/nakamoto_integrations.rs

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ use stacks::chainstate::stacks::address::{PoxAddress, StacksAddressExtensions};
4747
use stacks::chainstate::stacks::boot::{
4848
MINERS_NAME, SIGNERS_VOTING_FUNCTION_NAME, SIGNERS_VOTING_NAME,
4949
};
50-
use stacks::chainstate::stacks::db::StacksChainState;
50+
use stacks::chainstate::stacks::db::{StacksChainState, StacksHeaderInfo};
5151
use stacks::chainstate::stacks::miner::{
5252
BlockBuilder, BlockLimitFunction, TransactionEvent, TransactionResult, TransactionSuccessEvent,
5353
};
@@ -304,6 +304,30 @@ pub fn get_stackerdb_slot_version(
304304
})
305305
}
306306

307+
pub fn get_last_block_in_current_tenure(
308+
sortdb: &SortitionDB,
309+
chainstate: &StacksChainState,
310+
) -> Option<StacksHeaderInfo> {
311+
let ch = SortitionDB::get_canonical_burn_chain_tip(sortdb.conn())
312+
.unwrap()
313+
.consensus_hash;
314+
let mut tenure_blocks = test_observer::get_blocks();
315+
tenure_blocks.retain(|block| {
316+
let consensus_hash = block.get("consensus_hash").unwrap().as_str().unwrap();
317+
consensus_hash == format!("0x{ch}")
318+
});
319+
let last_block = tenure_blocks.last()?.clone();
320+
let last_block_id = StacksBlockId::from_hex(
321+
&last_block
322+
.get("index_block_hash")
323+
.unwrap()
324+
.as_str()
325+
.unwrap()[2..],
326+
)
327+
.unwrap();
328+
NakamotoChainState::get_block_header(chainstate.db(), &last_block_id).unwrap()
329+
}
330+
307331
pub fn add_initial_balances(
308332
conf: &mut Config,
309333
accounts: usize,
@@ -5023,7 +5047,7 @@ fn forked_tenure_is_ignored() {
50235047
thread::sleep(Duration::from_secs(1));
50245048
}
50255049

5026-
info!("Tenure B broadcasted but did not process a block. Issue the next bitcon block and unstall block commits.");
5050+
info!("Tenure B broadcasted but did not process a block. Issue the next bitcoin block and unstall block commits.");
50275051

50285052
// the block will be stored, not processed, so load it out of staging
50295053
let tip_sn = SortitionDB::get_canonical_burn_chain_tip(sortdb.conn())
@@ -5070,16 +5094,17 @@ fn forked_tenure_is_ignored() {
50705094
.lock()
50715095
.expect("Mutex poisoned")
50725096
.get_stacks_blocks_processed();
5097+
let block_in_tenure = get_last_block_in_current_tenure(&sortdb, &chainstate).is_some();
50735098
Ok(commits_count > commits_before
50745099
&& blocks_count > blocks_before
5075-
&& blocks_processed > blocks_processed_before)
5100+
&& blocks_processed > blocks_processed_before
5101+
&& block_in_tenure)
50765102
})
50775103
.unwrap();
50785104

50795105
info!("Tenure C produced a block!");
5080-
let block_tenure_c = NakamotoChainState::get_canonical_block_header(chainstate.db(), &sortdb)
5081-
.unwrap()
5082-
.unwrap();
5106+
5107+
let block_tenure_c = get_last_block_in_current_tenure(&sortdb, &chainstate).unwrap();
50835108
let blocks = test_observer::get_mined_nakamoto_blocks();
50845109
let block_c = blocks.last().unwrap();
50855110
info!("Tenure C tip block: {}", &block_tenure_c.index_block_hash());
@@ -5132,9 +5157,7 @@ fn forked_tenure_is_ignored() {
51325157

51335158
info!("Tenure C produced a second block!");
51345159

5135-
let block_2_tenure_c = NakamotoChainState::get_canonical_block_header(chainstate.db(), &sortdb)
5136-
.unwrap()
5137-
.unwrap();
5160+
let block_2_tenure_c = get_last_block_in_current_tenure(&sortdb, &chainstate).unwrap();
51385161
let blocks = test_observer::get_mined_nakamoto_blocks();
51395162
let block_2_c = blocks.last().unwrap();
51405163

@@ -5165,9 +5188,7 @@ fn forked_tenure_is_ignored() {
51655188
})
51665189
.unwrap();
51675190

5168-
let block_tenure_d = NakamotoChainState::get_canonical_block_header(chainstate.db(), &sortdb)
5169-
.unwrap()
5170-
.unwrap();
5191+
let block_tenure_d = get_last_block_in_current_tenure(&sortdb, &chainstate).unwrap();
51715192
let blocks = test_observer::get_mined_nakamoto_blocks();
51725193
let block_d = blocks.last().unwrap();
51735194

0 commit comments

Comments
 (0)