From 01304b91c56c60e6855ec8cb7e1c4ef5ab3a7657 Mon Sep 17 00:00:00 2001 From: haoran Date: Fri, 19 Aug 2022 10:39:15 -0500 Subject: [PATCH 1/5] refactor: extract store_stake_accounts fn --- runtime/src/bank.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 32ece32f8892d1..6d8ab2443b4166 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -3182,14 +3182,7 @@ impl Bank { m.stop(); metrics.redeem_rewards_us += m.as_us(); - // store stake account even if stakers_reward is 0 - // because credits observed has changed - let mut m = Measure::start("store_stake_account"); - self.store_accounts((self.slot(), &stake_rewards[..])); - m.stop(); - metrics - .store_stake_accounts_us - .fetch_add(m.as_us(), Relaxed); + self.store_stake_accounts(&stake_rewards, metrics); let mut m = Measure::start("store_vote_accounts"); let mut vote_rewards = vote_account_rewards @@ -3239,6 +3232,17 @@ impl Bank { point_value.rewards as f64 / point_value.points as f64 } + fn store_stake_accounts(&self, stake_rewards: &Vec, metrics: &mut RewardsMetrics) { + // store stake account even if stakers_reward is 0 + // because credits observed has changed + let mut m = Measure::start("store_stake_account"); + self.store_accounts((self.slot(), &stake_rewards[..])); + m.stop(); + metrics + .store_stake_accounts_us + .fetch_add(m.as_us(), Relaxed); + } + fn update_recent_blockhashes_locked(&self, locked_blockhash_queue: &BlockhashQueue) { #[allow(deprecated)] self.update_sysvar_account(&sysvar::recent_blockhashes::id(), |account| { From 9eb7ae4c2fbb9630c0be15428b8d5e45f21ad0eb Mon Sep 17 00:00:00 2001 From: haoran Date: Fri, 19 Aug 2022 10:47:37 -0500 Subject: [PATCH 2/5] refactor: extract store_vote_account fn --- runtime/src/bank.rs | 58 ++++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 6d8ab2443b4166..8594d4cc091d7b 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -3183,9 +3183,40 @@ impl Bank { metrics.redeem_rewards_us += m.as_us(); self.store_stake_accounts(&stake_rewards, metrics); + let mut vote_rewards = self.store_vote_accounts(vote_account_rewards, metrics); + let additional_reserve = stake_rewards.len() + vote_rewards.len(); + { + let mut rewards = self.rewards.write().unwrap(); + rewards.reserve(additional_reserve); + rewards.append(&mut vote_rewards); + stake_rewards + .into_iter() + .filter(|x| x.get_stake_reward() > 0) + .for_each(|x| rewards.push((x.stake_pubkey, x.stake_reward_info))); + } + + point_value.rewards as f64 / point_value.points as f64 + } + + fn store_stake_accounts(&self, stake_rewards: &Vec, metrics: &mut RewardsMetrics) { + // store stake account even if stakers_reward is 0 + // because credits observed has changed + let mut m = Measure::start("store_stake_account"); + self.store_accounts((self.slot(), &stake_rewards[..])); + m.stop(); + metrics + .store_stake_accounts_us + .fetch_add(m.as_us(), Relaxed); + } + + fn store_vote_accounts( + &self, + vote_account_rewards: DashMap, + metrics: &mut RewardsMetrics, + ) -> Vec<(Pubkey, RewardInfo)> { let mut m = Measure::start("store_vote_accounts"); - let mut vote_rewards = vote_account_rewards + let vote_rewards = vote_account_rewards .into_iter() .filter_map( |(vote_pubkey, (mut vote_account, commission, vote_rewards, vote_needs_store))| { @@ -3217,30 +3248,7 @@ impl Bank { m.stop(); metrics.store_vote_accounts_us.fetch_add(m.as_us(), Relaxed); - - let additional_reserve = stake_rewards.len() + vote_rewards.len(); - { - let mut rewards = self.rewards.write().unwrap(); - rewards.reserve(additional_reserve); - rewards.append(&mut vote_rewards); - stake_rewards - .into_iter() - .filter(|x| x.get_stake_reward() > 0) - .for_each(|x| rewards.push((x.stake_pubkey, x.stake_reward_info))); - } - - point_value.rewards as f64 / point_value.points as f64 - } - - fn store_stake_accounts(&self, stake_rewards: &Vec, metrics: &mut RewardsMetrics) { - // store stake account even if stakers_reward is 0 - // because credits observed has changed - let mut m = Measure::start("store_stake_account"); - self.store_accounts((self.slot(), &stake_rewards[..])); - m.stop(); - metrics - .store_stake_accounts_us - .fetch_add(m.as_us(), Relaxed); + vote_rewards } fn update_recent_blockhashes_locked(&self, locked_blockhash_queue: &BlockhashQueue) { From 2f14a677dc8112fcc564a4e2ce174dbbf08eb87c Mon Sep 17 00:00:00 2001 From: haoran Date: Fri, 19 Aug 2022 10:55:21 -0500 Subject: [PATCH 3/5] refactor: extract reward history update fn --- runtime/src/bank.rs | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 8594d4cc091d7b..14a2a572603702 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -3183,18 +3183,8 @@ impl Bank { metrics.redeem_rewards_us += m.as_us(); self.store_stake_accounts(&stake_rewards, metrics); - let mut vote_rewards = self.store_vote_accounts(vote_account_rewards, metrics); - - let additional_reserve = stake_rewards.len() + vote_rewards.len(); - { - let mut rewards = self.rewards.write().unwrap(); - rewards.reserve(additional_reserve); - rewards.append(&mut vote_rewards); - stake_rewards - .into_iter() - .filter(|x| x.get_stake_reward() > 0) - .for_each(|x| rewards.push((x.stake_pubkey, x.stake_reward_info))); - } + let vote_rewards = self.store_vote_accounts(vote_account_rewards, metrics); + self.update_reward_history(stake_rewards, vote_rewards); point_value.rewards as f64 / point_value.points as f64 } @@ -3251,6 +3241,21 @@ impl Bank { vote_rewards } + fn update_reward_history( + &self, + stake_rewards: Vec, + mut vote_rewards: Vec<(Pubkey, RewardInfo)>, + ) { + let additional_reserve = stake_rewards.len() + vote_rewards.len(); + let mut rewards = self.rewards.write().unwrap(); + rewards.reserve(additional_reserve); + rewards.append(&mut vote_rewards); + stake_rewards + .into_iter() + .filter(|x| x.get_stake_reward() > 0) + .for_each(|x| rewards.push((x.stake_pubkey, x.stake_reward_info))); + } + fn update_recent_blockhashes_locked(&self, locked_blockhash_queue: &BlockhashQueue) { #[allow(deprecated)] self.update_sysvar_account(&sysvar::recent_blockhashes::id(), |account| { From 4cbf6439d8ff9f9838afc9bed28a055b451e5ebc Mon Sep 17 00:00:00 2001 From: haoran Date: Fri, 19 Aug 2022 11:35:15 -0500 Subject: [PATCH 4/5] clippy: slice --- runtime/src/bank.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 6d8ab2443b4166..56e67e0848804b 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -3232,11 +3232,11 @@ impl Bank { point_value.rewards as f64 / point_value.points as f64 } - fn store_stake_accounts(&self, stake_rewards: &Vec, metrics: &mut RewardsMetrics) { + fn store_stake_accounts(&self, stake_rewards: &[StakeReward], metrics: &mut RewardsMetrics) { // store stake account even if stakers_reward is 0 // because credits observed has changed let mut m = Measure::start("store_stake_account"); - self.store_accounts((self.slot(), &stake_rewards[..])); + self.store_accounts((self.slot(), stake_rewards)); m.stop(); metrics .store_stake_accounts_us From 9508b23e9c9ef85c216c53bce83acdf9dc253619 Mon Sep 17 00:00:00 2001 From: Haoran Yi Date: Fri, 19 Aug 2022 15:42:48 -0500 Subject: [PATCH 5/5] clippy: slice --- runtime/src/bank.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 8594d4cc091d7b..3862382bb56bb0 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -3199,11 +3199,11 @@ impl Bank { point_value.rewards as f64 / point_value.points as f64 } - fn store_stake_accounts(&self, stake_rewards: &Vec, metrics: &mut RewardsMetrics) { + fn store_stake_accounts(&self, stake_rewards: &[StakeReward], metrics: &mut RewardsMetrics) { // store stake account even if stakers_reward is 0 // because credits observed has changed let mut m = Measure::start("store_stake_account"); - self.store_accounts((self.slot(), &stake_rewards[..])); + self.store_accounts((self.slot(), stake_rewards)); m.stop(); metrics .store_stake_accounts_us