Stream additional block metadata via plugin (#22023) (#22179)

* Stream additional block metadata through plugin
blockhash, block_height, block_time, rewards are streamed

(cherry picked from commit f14928a970)

Co-authored-by: Lijun Wang <83639177+lijunwangs@users.noreply.github.com>
This commit is contained in:
mergify[bot]
2021-12-30 05:44:12 +00:00
committed by GitHub
parent 0cd45400ca
commit 6a556c5adb
13 changed files with 383 additions and 12 deletions

View File

@ -26,6 +26,7 @@ use {
voting_service::VoteOp,
window_service::DuplicateSlotReceiver,
},
solana_accountsdb_plugin_manager::block_metadata_notifier_interface::BlockMetadataNotifierLock,
solana_client::rpc_response::SlotUpdate,
solana_entry::entry::VerifyRecyclers,
solana_gossip::cluster_info::ClusterInfo,
@ -327,6 +328,7 @@ impl ReplayStage {
cost_update_sender: Sender<CostUpdate>,
voting_sender: Sender<VoteOp>,
drop_bank_sender: Sender<Vec<Arc<Bank>>>,
block_metadata_notifier: Option<BlockMetadataNotifierLock>,
) -> Self {
let ReplayStageConfig {
vote_account,
@ -432,6 +434,7 @@ impl ReplayStage {
&cost_update_sender,
&mut duplicate_slots_to_repair,
&ancestor_hashes_replay_update_sender,
block_metadata_notifier.clone(),
);
replay_active_banks_time.stop();
@ -1988,6 +1991,7 @@ impl ReplayStage {
cost_update_sender: &Sender<CostUpdate>,
duplicate_slots_to_repair: &mut DuplicateSlotsToRepair,
ancestor_hashes_replay_update_sender: &AncestorHashesReplayUpdateSender,
block_metadata_notifier: Option<BlockMetadataNotifierLock>,
) -> bool {
let mut did_complete_bank = false;
let mut tx_count = 0;
@ -2143,6 +2147,16 @@ impl ReplayStage {
}
}
Self::record_rewards(&bank, rewards_recorder_sender);
if let Some(ref block_metadata_notifier) = block_metadata_notifier {
let block_metadata_notifier = block_metadata_notifier.read().unwrap();
block_metadata_notifier.notify_block_metadata(
bank.slot(),
&bank.last_blockhash().to_string(),
&bank.rewards,
Some(bank.clock().unix_timestamp),
Some(bank.block_height()),
)
}
} else {
trace!(
"bank {} not completed tick_height: {}, max_tick_height: {}",

View File

@ -26,6 +26,7 @@ use {
voting_service::VotingService,
},
crossbeam_channel::unbounded,
solana_accountsdb_plugin_manager::block_metadata_notifier_interface::BlockMetadataNotifierLock,
solana_gossip::cluster_info::ClusterInfo,
solana_ledger::{
blockstore::Blockstore, blockstore_processor::TransactionStatusSender,
@ -143,6 +144,7 @@ impl Tvu {
cost_model: &Arc<RwLock<CostModel>>,
accounts_package_channel: (AccountsPackageSender, AccountsPackageReceiver),
last_full_snapshot_slot: Option<Slot>,
block_metadata_notifier: Option<BlockMetadataNotifierLock>,
) -> Self {
let Sockets {
repair: repair_socket,
@ -333,6 +335,7 @@ impl Tvu {
cost_update_sender,
voting_sender,
drop_bank_sender,
block_metadata_notifier,
);
let ledger_cleanup_service = tvu_config.max_ledger_shreds.map(|max_ledger_shreds| {
@ -501,6 +504,7 @@ pub mod tests {
&Arc::new(RwLock::new(CostModel::default())),
accounts_package_channel,
None,
None,
);
exit.store(true, Ordering::Relaxed);
tvu.join().unwrap();

View File

@ -425,6 +425,13 @@ impl Validator {
accountsdb_plugin_service.get_transaction_notifier()
});
let block_metadata_notifier =
accountsdb_plugin_service
.as_ref()
.and_then(|accountsdb_plugin_service| {
accountsdb_plugin_service.get_block_metadata_notifier()
});
info!(
"AccountsDb plugin: accounts_update_notifier: {} transaction_notifier: {}",
accounts_update_notifier.is_some(),
@ -876,6 +883,7 @@ impl Validator {
&cost_model,
accounts_package_channel,
last_full_snapshot_slot,
block_metadata_notifier,
);
let tpu = Tpu::new(