Skip to content
This repository was archived by the owner on Jan 22, 2025. It is now read-only.

Commit 2f090a5

Browse files
authored
Define PohRecorder set_bank related test helper methods (#33626)
Define PohRecorder set_bank related test methods
1 parent 7006a6f commit 2f090a5

12 files changed

+95
-33
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

banking-bench/Cargo.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,15 @@ solana-ledger = { workspace = true }
2121
solana-logger = { workspace = true }
2222
solana-measure = { workspace = true }
2323
solana-perf = { workspace = true }
24-
solana-poh = { workspace = true }
24+
solana-poh = { workspace = true, features = ["dev-context-only-utils"] }
2525
solana-runtime = { workspace = true }
2626
solana-sdk = { workspace = true }
2727
solana-streamer = { workspace = true }
2828
solana-tpu-client = { workspace = true }
2929
solana-version = { workspace = true }
3030

31+
[features]
32+
dev-context-only-utils = []
33+
3134
[package.metadata.docs.rs]
3235
targets = ["x86_64-unknown-linux-gnu"]

banking-bench/src/main.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,10 @@ fn main() {
549549
);
550550

551551
assert!(poh_recorder.read().unwrap().bank().is_none());
552-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
552+
poh_recorder
553+
.write()
554+
.unwrap()
555+
.set_bank_for_test(bank.clone());
553556
assert!(poh_recorder.read().unwrap().bank().is_some());
554557
debug!(
555558
"new_bank_time: {}us insert_time: {}us poh_time: {}us",

core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ serial_test = { workspace = true }
8989
# See order-crates-for-publishing.py for using this unusual `path = "."`
9090
solana-core = { path = ".", features = ["dev-context-only-utils"] }
9191
solana-logger = { workspace = true }
92+
solana-poh = { workspace = true, features = ["dev-context-only-utils"] }
9293
solana-program-runtime = { workspace = true }
9394
solana-runtime = { workspace = true, features = ["dev-context-only-utils"] }
9495
solana-sdk = { workspace = true, features = ["dev-context-only-utils"] }

core/src/banking_stage.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1071,7 +1071,10 @@ mod tests {
10711071

10721072
let poh_simulator = simulate_poh(record_receiver, &poh_recorder);
10731073

1074-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
1074+
poh_recorder
1075+
.write()
1076+
.unwrap()
1077+
.set_bank_for_test(bank.clone());
10751078
let pubkey = solana_sdk::pubkey::new_rand();
10761079
let keypair2 = Keypair::new();
10771080
let pubkey2 = solana_sdk::pubkey::new_rand();

core/src/banking_stage/consume_worker.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,10 @@ mod tests {
283283
..
284284
} = &test_frame;
285285
let worker_thread = std::thread::spawn(move || worker.run());
286-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
286+
poh_recorder
287+
.write()
288+
.unwrap()
289+
.set_bank_for_test(bank.clone());
287290

288291
let pubkey1 = Pubkey::new_unique();
289292

@@ -325,7 +328,10 @@ mod tests {
325328
..
326329
} = &test_frame;
327330
let worker_thread = std::thread::spawn(move || worker.run());
328-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
331+
poh_recorder
332+
.write()
333+
.unwrap()
334+
.set_bank_for_test(bank.clone());
329335

330336
let pubkey1 = Pubkey::new_unique();
331337
let pubkey2 = Pubkey::new_unique();
@@ -370,7 +376,10 @@ mod tests {
370376
..
371377
} = &test_frame;
372378
let worker_thread = std::thread::spawn(move || worker.run());
373-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
379+
poh_recorder
380+
.write()
381+
.unwrap()
382+
.set_bank_for_test(bank.clone());
374383

375384
let pubkey1 = Pubkey::new_unique();
376385
let pubkey2 = Pubkey::new_unique();

core/src/banking_stage/consumer.rs

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -805,7 +805,10 @@ mod tests {
805805
let recorder = poh_recorder.new_recorder();
806806
let poh_recorder = Arc::new(RwLock::new(poh_recorder));
807807

808-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
808+
poh_recorder
809+
.write()
810+
.unwrap()
811+
.set_bank_for_test(bank.clone());
809812

810813
let poh_simulator = simulate_poh(record_receiver, &poh_recorder);
811814

@@ -966,7 +969,10 @@ mod tests {
966969

967970
let poh_simulator = simulate_poh(record_receiver, &poh_recorder);
968971

969-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
972+
poh_recorder
973+
.write()
974+
.unwrap()
975+
.set_bank_for_test(bank.clone());
970976
let (replay_vote_sender, _replay_vote_receiver) = unbounded();
971977
let committer = Committer::new(
972978
None,
@@ -1093,7 +1099,10 @@ mod tests {
10931099

10941100
let poh_simulator = simulate_poh(record_receiver, &poh_recorder);
10951101

1096-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
1102+
poh_recorder
1103+
.write()
1104+
.unwrap()
1105+
.set_bank_for_test(bank.clone());
10971106
let (replay_vote_sender, _replay_vote_receiver) = unbounded();
10981107
let committer = Committer::new(
10991108
None,
@@ -1179,7 +1188,10 @@ mod tests {
11791188

11801189
let poh_simulator = simulate_poh(record_receiver, &poh_recorder);
11811190

1182-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
1191+
poh_recorder
1192+
.write()
1193+
.unwrap()
1194+
.set_bank_for_test(bank.clone());
11831195
let (replay_vote_sender, _replay_vote_receiver) = unbounded();
11841196
let committer = Committer::new(
11851197
None,
@@ -1328,7 +1340,10 @@ mod tests {
13281340
let recorder = poh_recorder.new_recorder();
13291341
let poh_recorder = Arc::new(RwLock::new(poh_recorder));
13301342

1331-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
1343+
poh_recorder
1344+
.write()
1345+
.unwrap()
1346+
.set_bank_for_test(bank.clone());
13321347

13331348
let poh_simulator = simulate_poh(record_receiver, &poh_recorder);
13341349

@@ -1628,7 +1643,10 @@ mod tests {
16281643

16291644
let poh_simulator = simulate_poh(record_receiver, &poh_recorder);
16301645

1631-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
1646+
poh_recorder
1647+
.write()
1648+
.unwrap()
1649+
.set_bank_for_test(bank.clone());
16321650

16331651
let shreds = entries_to_test_shreds(
16341652
&entries,
@@ -1765,7 +1783,10 @@ mod tests {
17651783

17661784
let poh_simulator = simulate_poh(record_receiver, &poh_recorder);
17671785

1768-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
1786+
poh_recorder
1787+
.write()
1788+
.unwrap()
1789+
.set_bank_for_test(bank.clone());
17691790

17701791
let shreds = entries_to_test_shreds(
17711792
&entries,
@@ -1864,7 +1885,7 @@ mod tests {
18641885
assert_eq!(buffered_packet_batches.len(), num_conflicting_transactions);
18651886
// When the working bank in poh_recorder is Some, all packets should be processed.
18661887
// Multi-Iterator will process them 1-by-1 if all txs are conflicting.
1867-
poh_recorder.write().unwrap().set_bank(bank, false);
1888+
poh_recorder.write().unwrap().set_bank_for_test(bank);
18681889
let bank_start = poh_recorder.read().unwrap().bank_start().unwrap();
18691890
let banking_stage_stats = BankingStageStats::default();
18701891
consumer.consume_buffered_packets(
@@ -1942,7 +1963,7 @@ mod tests {
19421963
assert_eq!(buffered_packet_batches.len(), num_conflicting_transactions);
19431964
// When the working bank in poh_recorder is Some, all packets should be processed.
19441965
// Multi-Iterator will process them 1-by-1 if all txs are conflicting.
1945-
poh_recorder.write().unwrap().set_bank(bank, false);
1966+
poh_recorder.write().unwrap().set_bank_for_test(bank);
19461967
let bank_start = poh_recorder.read().unwrap().bank_start().unwrap();
19471968
consumer.consume_buffered_packets(
19481969
&bank_start,
@@ -1995,7 +2016,10 @@ mod tests {
19952016
// When the working bank in poh_recorder is Some, all packets should be processed
19962017
// except except for retryable errors. Manually take the lock of a transaction to
19972018
// simulate another thread processing a transaction with that lock.
1998-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
2019+
poh_recorder
2020+
.write()
2021+
.unwrap()
2022+
.set_bank_for_test(bank.clone());
19992023
let bank_start = poh_recorder.read().unwrap().bank_start().unwrap();
20002024

20012025
let lock_account = transactions[0].message.account_keys[1];
@@ -2116,7 +2140,7 @@ mod tests {
21162140
assert_eq!(buffered_packet_batches.len(), num_conflicting_transactions);
21172141
// When the working bank in poh_recorder is Some, all packets should be processed.
21182142
// Multi-Iterator will process them 1-by-1 if all txs are conflicting.
2119-
poh_recorder.write().unwrap().set_bank(bank, false);
2143+
poh_recorder.write().unwrap().set_bank_for_test(bank);
21202144
let bank_start = poh_recorder.read().unwrap().bank_start().unwrap();
21212145
let banking_stage_stats = BankingStageStats::default();
21222146
consumer.consume_buffered_packets(

core/src/banking_stage/decision_maker.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,10 @@ mod tests {
164164

165165
// Currently Leader - Consume
166166
{
167-
poh_recorder.write().unwrap().set_bank(bank.clone(), false);
167+
poh_recorder
168+
.write()
169+
.unwrap()
170+
.set_bank_for_test(bank.clone());
168171
let decision = decision_maker.make_consume_or_forward_decision();
169172
assert_matches!(decision, BufferedPacketsDecision::Consume(_));
170173
}

poh/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ bincode = { workspace = true }
2727
rand = { workspace = true }
2828
solana-logger = { workspace = true }
2929
solana-perf = { workspace = true }
30+
solana-poh = { path = ".", features = ["dev-context-only-utils"] }
31+
32+
[features]
33+
dev-context-only-utils = []
3034

3135
[lib]
3236
crate-type = ["lib"]

poh/src/poh_recorder.rs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,16 @@ impl PohRecorder {
642642
let _ = self.flush_cache(false);
643643
}
644644

645+
#[cfg(feature = "dev-context-only-utils")]
646+
pub fn set_bank_for_test(&mut self, bank: Arc<Bank>) {
647+
self.set_bank(bank, false)
648+
}
649+
650+
#[cfg(test)]
651+
pub fn set_bank_with_transaction_index_for_test(&mut self, bank: Arc<Bank>) {
652+
self.set_bank(bank, true)
653+
}
654+
645655
// Flush cache will delay flushing the cache for a bank until it past the WorkingBank::min_tick_height
646656
// On a record flush will flush the cache at the WorkingBank::min_tick_height, since a record
647657
// occurs after the min_tick_height was generated
@@ -1219,7 +1229,7 @@ mod tests {
12191229
Arc::new(AtomicBool::default()),
12201230
);
12211231

1222-
poh_recorder.set_bank(bank, false);
1232+
poh_recorder.set_bank_for_test(bank);
12231233
assert!(poh_recorder.working_bank.is_some());
12241234
poh_recorder.clear_bank();
12251235
assert!(poh_recorder.working_bank.is_none());
@@ -1253,7 +1263,7 @@ mod tests {
12531263
let bank1 = Arc::new(Bank::new_from_parent(bank0, &Pubkey::default(), 1));
12541264

12551265
// Set a working bank
1256-
poh_recorder.set_bank(bank1.clone(), false);
1266+
poh_recorder.set_bank_for_test(bank1.clone());
12571267

12581268
// Tick until poh_recorder.tick_height == working bank's min_tick_height
12591269
let num_new_ticks = bank1.tick_height() - poh_recorder.tick_height();
@@ -1322,7 +1332,7 @@ mod tests {
13221332
);
13231333
assert_eq!(poh_recorder.tick_height, bank.max_tick_height() + 1);
13241334

1325-
poh_recorder.set_bank(bank.clone(), false);
1335+
poh_recorder.set_bank_for_test(bank.clone());
13261336
poh_recorder.tick();
13271337

13281338
assert_eq!(poh_recorder.tick_height, bank.max_tick_height() + 2);
@@ -1363,7 +1373,7 @@ mod tests {
13631373

13641374
bank0.fill_bank_with_ticks_for_tests();
13651375
let bank1 = Arc::new(Bank::new_from_parent(bank0, &Pubkey::default(), 1));
1366-
poh_recorder.set_bank(bank1.clone(), false);
1376+
poh_recorder.set_bank_for_test(bank1.clone());
13671377
// Let poh_recorder tick up to bank1.tick_height() - 1
13681378
for _ in 0..bank1.tick_height() - 1 {
13691379
poh_recorder.tick()
@@ -1404,7 +1414,7 @@ mod tests {
14041414
Arc::new(AtomicBool::default()),
14051415
);
14061416

1407-
poh_recorder.set_bank(bank.clone(), false);
1417+
poh_recorder.set_bank_for_test(bank.clone());
14081418
let tx = test_tx();
14091419
let h1 = hash(b"hello world!");
14101420

@@ -1448,7 +1458,7 @@ mod tests {
14481458

14491459
bank0.fill_bank_with_ticks_for_tests();
14501460
let bank1 = Arc::new(Bank::new_from_parent(bank0, &Pubkey::default(), 1));
1451-
poh_recorder.set_bank(bank1.clone(), false);
1461+
poh_recorder.set_bank_for_test(bank1.clone());
14521462

14531463
// Record up to exactly min tick height
14541464
let min_tick_height = poh_recorder.working_bank.as_ref().unwrap().min_tick_height;
@@ -1502,7 +1512,7 @@ mod tests {
15021512
Arc::new(AtomicBool::default()),
15031513
);
15041514

1505-
poh_recorder.set_bank(bank.clone(), false);
1515+
poh_recorder.set_bank_for_test(bank.clone());
15061516
let num_ticks_to_max = bank.max_tick_height() - poh_recorder.tick_height;
15071517
for _ in 0..num_ticks_to_max {
15081518
poh_recorder.tick();
@@ -1542,7 +1552,7 @@ mod tests {
15421552
Arc::new(AtomicBool::default()),
15431553
);
15441554

1545-
poh_recorder.set_bank(bank.clone(), true);
1555+
poh_recorder.set_bank_with_transaction_index_for_test(bank.clone());
15461556
poh_recorder.tick();
15471557
assert_eq!(
15481558
poh_recorder
@@ -1616,7 +1626,7 @@ mod tests {
16161626

16171627
bank0.fill_bank_with_ticks_for_tests();
16181628
let bank1 = Arc::new(Bank::new_from_parent(bank0, &Pubkey::default(), 1));
1619-
poh_recorder.set_bank(bank1, false);
1629+
poh_recorder.set_bank_for_test(bank1);
16201630

16211631
// Check we can make two ticks without hitting min_tick_height
16221632
let remaining_ticks_to_min =
@@ -1764,7 +1774,7 @@ mod tests {
17641774
Arc::new(AtomicBool::default()),
17651775
);
17661776

1767-
poh_recorder.set_bank(bank.clone(), false);
1777+
poh_recorder.set_bank_for_test(bank.clone());
17681778
assert_eq!(bank.slot(), 0);
17691779
poh_recorder.reset(bank, Some((4, 4)));
17701780
assert!(poh_recorder.working_bank.is_none());
@@ -1796,7 +1806,7 @@ mod tests {
17961806
None,
17971807
Arc::new(AtomicBool::default()),
17981808
);
1799-
poh_recorder.set_bank(bank, false);
1809+
poh_recorder.set_bank_for_test(bank);
18001810
poh_recorder.clear_bank();
18011811
assert!(receiver.try_recv().is_ok());
18021812
}
@@ -1831,7 +1841,7 @@ mod tests {
18311841
Arc::new(AtomicBool::default()),
18321842
);
18331843

1834-
poh_recorder.set_bank(bank.clone(), false);
1844+
poh_recorder.set_bank_for_test(bank.clone());
18351845

18361846
// Simulate ticking much further than working_bank.max_tick_height
18371847
let max_tick_height = poh_recorder.working_bank.as_ref().unwrap().max_tick_height;
@@ -2126,7 +2136,7 @@ mod tests {
21262136
// Move the bank up a slot (so that max_tick_height > slot 0's tick_height)
21272137
let bank = Arc::new(Bank::new_from_parent(bank, &Pubkey::default(), 1));
21282138
// If we set the working bank, the node should be leader within next 2 slots
2129-
poh_recorder.set_bank(bank.clone(), false);
2139+
poh_recorder.set_bank_for_test(bank.clone());
21302140
assert!(poh_recorder.would_be_leader(2 * bank.ticks_per_slot()));
21312141
}
21322142
}
@@ -2160,7 +2170,7 @@ mod tests {
21602170
for _ in 0..(bank.ticks_per_slot() * 3) {
21612171
poh_recorder.tick();
21622172
}
2163-
poh_recorder.set_bank(bank.clone(), false);
2173+
poh_recorder.set_bank_for_test(bank.clone());
21642174
assert!(!bank.is_hash_valid_for_age(&genesis_hash, 0));
21652175
assert!(bank.is_hash_valid_for_age(&genesis_hash, 1));
21662176
}

poh/src/poh_service.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ mod tests {
498498
hashes_per_batch,
499499
record_receiver,
500500
);
501-
poh_recorder.write().unwrap().set_bank(bank, false);
501+
poh_recorder.write().unwrap().set_bank_for_test(bank);
502502

503503
// get some events
504504
let mut hashes = 0;

scripts/check-dev-context-only-utils.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ source ci/rust-version.sh nightly
2929
# reason to bend dev-context-only-utils's original intention and that listed
3030
# package isn't part of released binaries.
3131
declare tainted_packages=(
32+
solana-banking-bench
3233
solana-ledger-tool
3334
)
3435

0 commit comments

Comments
 (0)