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

Commit

Permalink
improve prioritization cache accuracy
Browse files Browse the repository at this point in the history
  • Loading branch information
tao-stones committed Aug 2, 2023
1 parent 67b2f89 commit 09c4ab8
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 6 deletions.
5 changes: 0 additions & 5 deletions core/src/replay_stage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2719,7 +2719,6 @@ impl ReplayStage {
ancestor_hashes_replay_update_sender: &AncestorHashesReplayUpdateSender,
block_metadata_notifier: Option<BlockMetadataNotifierLock>,
replay_result_vec: &[ReplaySlotFromBlockstore],
prioritization_fee_cache: &PrioritizationFeeCache,
purge_repair_slot_counter: &mut PurgeRepairSlotCounter,
) -> bool {
// TODO: See if processing of blockstore replay results and bank completion can be made thread safe.
Expand Down Expand Up @@ -2795,9 +2794,6 @@ impl ReplayStage {
warn!("cost_update_sender failed sending bank stats: {:?}", err)
});

// finalize block's minimum prioritization fee cache for this bank
prioritization_fee_cache.finalize_priority_fee(bank.slot());

assert_ne!(bank.hash(), Hash::default());
// Needs to be updated before `check_slot_agrees_with_cluster()` so that
// any updates in `check_slot_agrees_with_cluster()` on fork choice take
Expand Down Expand Up @@ -2985,7 +2981,6 @@ impl ReplayStage {
ancestor_hashes_replay_update_sender,
block_metadata_notifier,
&replay_result_vec,
prioritization_fee_cache,
purge_repair_slot_counter,
)
} else {
Expand Down
1 change: 1 addition & 0 deletions core/src/validator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -989,6 +989,7 @@ impl Validator {
optimistically_confirmed_bank,
rpc_subscriptions.clone(),
confirmed_bank_subscribers,
prioritization_fee_cache.clone(),
)),
Some(BankNotificationSenderConfig {
sender: bank_notification_sender,
Expand Down
14 changes: 13 additions & 1 deletion rpc/src/optimistically_confirmed_bank_tracker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ use {
crate::rpc_subscriptions::RpcSubscriptions,
crossbeam_channel::{Receiver, RecvTimeoutError, Sender},
solana_rpc_client_api::response::{SlotTransactionStats, SlotUpdate},
solana_runtime::{bank::Bank, bank_forks::BankForks},
solana_runtime::{
bank::Bank, bank_forks::BankForks, prioritization_fee_cache::PrioritizationFeeCache,
},
solana_sdk::{clock::Slot, timing::timestamp},
std::{
collections::HashSet,
Expand Down Expand Up @@ -92,6 +94,7 @@ impl OptimisticallyConfirmedBankTracker {
optimistically_confirmed_bank: Arc<RwLock<OptimisticallyConfirmedBank>>,
subscriptions: Arc<RpcSubscriptions>,
slot_notification_subscribers: Option<Arc<RwLock<Vec<SlotNotificationSender>>>>,
prioritization_fee_cache: Arc<PrioritizationFeeCache>,
) -> Self {
let mut pending_optimistically_confirmed_banks = HashSet::new();
let mut last_notified_confirmed_slot: Slot = 0;
Expand All @@ -114,6 +117,7 @@ impl OptimisticallyConfirmedBankTracker {
&mut highest_confirmed_slot,
&mut newest_root_slot,
&slot_notification_subscribers,
&prioritization_fee_cache,
) {
break;
}
Expand All @@ -122,6 +126,7 @@ impl OptimisticallyConfirmedBankTracker {
Self { thread_hdl }
}

#[allow(clippy::too_many_arguments)]
fn recv_notification(
receiver: &Receiver<BankNotification>,
bank_forks: &Arc<RwLock<BankForks>>,
Expand All @@ -132,6 +137,7 @@ impl OptimisticallyConfirmedBankTracker {
highest_confirmed_slot: &mut Slot,
newest_root_slot: &mut Slot,
slot_notification_subscribers: &Option<Arc<RwLock<Vec<SlotNotificationSender>>>>,
prioritization_fee_cache: &Arc<PrioritizationFeeCache>,
) -> Result<(), RecvTimeoutError> {
let notification = receiver.recv_timeout(Duration::from_secs(1))?;
Self::process_notification(
Expand All @@ -144,6 +150,7 @@ impl OptimisticallyConfirmedBankTracker {
highest_confirmed_slot,
newest_root_slot,
slot_notification_subscribers,
prioritization_fee_cache,
);
Ok(())
}
Expand Down Expand Up @@ -249,6 +256,7 @@ impl OptimisticallyConfirmedBankTracker {
}
}

#[allow(clippy::too_many_arguments)]
pub fn process_notification(
notification: BankNotification,
bank_forks: &Arc<RwLock<BankForks>>,
Expand All @@ -259,6 +267,7 @@ impl OptimisticallyConfirmedBankTracker {
highest_confirmed_slot: &mut Slot,
newest_root_slot: &mut Slot,
slot_notification_subscribers: &Option<Arc<RwLock<Vec<SlotNotificationSender>>>>,
prioritization_fee_cache: &Arc<PrioritizationFeeCache>,
) {
debug!("received bank notification: {:?}", notification);
match notification {
Expand Down Expand Up @@ -298,6 +307,9 @@ impl OptimisticallyConfirmedBankTracker {
slot,
timestamp: timestamp(),
});

// finalize block's minimum prioritization fee cache for this bank
prioritization_fee_cache.finalize_priority_fee(slot);
}
BankNotification::Frozen(bank) => {
let frozen_slot = bank.slot();
Expand Down

0 comments on commit 09c4ab8

Please sign in to comment.