Skip to content

Commit d78291c

Browse files
committed
stage timeouts + panicks
1 parent e8416e2 commit d78291c

File tree

1 file changed

+45
-1
lines changed

1 file changed

+45
-1
lines changed

local-cluster/tests/local_cluster.rs

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6934,13 +6934,40 @@ fn test_alpenglow_ensure_liveness_after_intertwined_notar_and_skip_fallbacks() {
69346934
assert_eq!(NUM_NODES, vote_pubkey_to_node_index.len());
69356935

69366936
/// Helper struct to manage experiment state and vote pattern tracking
6937-
#[derive(PartialEq, Eq)]
6937+
#[derive(Debug, PartialEq, Eq)]
69386938
enum Stage {
69396939
Stability,
69406940
ObserveSkipFallbacks,
69416941
ObserveLiveness,
69426942
}
69436943

6944+
impl Stage {
6945+
fn timeout(&self) -> Duration {
6946+
match self {
6947+
Stage::Stability => Duration::from_secs(60),
6948+
Stage::ObserveSkipFallbacks => Duration::from_secs(120),
6949+
Stage::ObserveLiveness => Duration::from_secs(180),
6950+
}
6951+
}
6952+
6953+
fn name(&self) -> &'static str {
6954+
match self {
6955+
Stage::Stability => "Stability",
6956+
Stage::ObserveSkipFallbacks => "ObserveSkipFallbacks",
6957+
Stage::ObserveLiveness => "ObserveLiveness",
6958+
}
6959+
}
6960+
6961+
fn all() -> Vec<Stage> {
6962+
vec![
6963+
Stage::Stability,
6964+
Stage::ObserveSkipFallbacks,
6965+
Stage::ObserveLiveness,
6966+
]
6967+
}
6968+
}
6969+
6970+
#[derive(Debug)]
69446971
struct ExperimentState {
69456972
stage: Stage,
69466973
vote_type_bitmap: HashMap<u64, [u8; 4]>, // slot -> [node_vote_pattern; 4]
@@ -7019,6 +7046,8 @@ fn test_alpenglow_ensure_liveness_after_intertwined_notar_and_skip_fallbacks() {
70197046
let mut buffer = [0u8; 65_535];
70207047
let mut experiment_state = ExperimentState::new();
70217048

7049+
let timer = std::time::Instant::now();
7050+
70227051
loop {
70237052
let bytes_received = vote_listener_socket
70247053
.recv(&mut buffer)
@@ -7037,6 +7066,21 @@ fn test_alpenglow_ensure_liveness_after_intertwined_notar_and_skip_fallbacks() {
70377066
.as_alpenglow_transaction_ref()
70387067
.expect("Failed to get alpenglow vote reference");
70397068

7069+
// Stage timeouts
7070+
let elapsed_time = timer.elapsed();
7071+
7072+
for stage in Stage::all() {
7073+
if elapsed_time > stage.timeout() {
7074+
panic!(
7075+
"Timeout during {} stage. node_c_turbine_disabled: {:#?}. Latest vote: {:#?}. Experiment state: {:#?}",
7076+
stage.name(),
7077+
node_c_turbine_disabled.load(Ordering::Acquire),
7078+
vote,
7079+
experiment_state
7080+
);
7081+
}
7082+
}
7083+
70407084
// Stage 1: Wait for stability, then introduce partition at slot 50
70417085
if vote.slot() == 50 && !node_c_turbine_disabled.load(Ordering::Acquire) {
70427086
node_c_turbine_disabled.store(true, Ordering::Release);

0 commit comments

Comments
 (0)