From 76a68c26c9b753d2c989c81f6f84b7a2d17a4330 Mon Sep 17 00:00:00 2001 From: Sagar Dhawan Date: Mon, 25 Nov 2019 15:34:51 -0800 Subject: [PATCH] Track a Bank's parent slot independently from parent bank (#7131) --- core/src/broadcast_stage/standard_broadcast_run.rs | 8 +------- runtime/src/bank.rs | 7 +++++++ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/core/src/broadcast_stage/standard_broadcast_run.rs b/core/src/broadcast_stage/standard_broadcast_run.rs index 5a2100181c..36d48c23ef 100644 --- a/core/src/broadcast_stage/standard_broadcast_run.rs +++ b/core/src/broadcast_stage/standard_broadcast_run.rs @@ -141,13 +141,7 @@ impl StandardBroadcastRun { { self.slot_broadcast_start = Some(Instant::now()); let slot = bank.slot(); - let parent_slot = { - if let Some(parent_bank) = bank.parent() { - parent_bank.slot() - } else { - 0 - } - }; + let parent_slot = bank.parent_slot(); self.current_slot_and_parent = Some((slot, parent_slot)); receive_elapsed = Duration::new(0, 0); diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index abd065d33c..4a7131376d 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -180,6 +180,8 @@ pub struct Bank { /// Hash of this Bank's parent's state parent_hash: Hash, + parent_slot: u64, + /// The number of transactions processed without error #[serde(serialize_with = "serialize_atomicu64")] #[serde(deserialize_with = "deserialize_atomicu64")] @@ -358,6 +360,7 @@ impl Bank { epoch_stakes: parent.epoch_stakes.clone(), storage_accounts: RwLock::new(parent.storage_accounts.read().unwrap().clone()), parent_hash: parent.hash(), + parent_slot: parent.slot(), collector_id: *collector_id, collector_fees: AtomicU64::new(0), ancestors: HashMap::new(), @@ -662,6 +665,10 @@ impl Bank { self.rc.parent.read().unwrap().clone() } + pub fn parent_slot(&self) -> u64 { + self.parent_slot + } + fn process_genesis_config(&mut self, genesis_config: &GenesisConfig) { // Bootstrap leader collects fees until `new_from_parent` is called. self.fee_calculator = genesis_config.fee_calculator.clone();