ledger-tool: support Geyser accounts updates (#26909)

This commit is contained in:
Richard Patel 2022-08-09 17:44:57 +02:00 committed by GitHub
parent e2a2d271f2
commit f7c6901191
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 1 deletions

1
Cargo.lock generated
View File

@ -5499,6 +5499,7 @@ dependencies = [
"solana-cli-output",
"solana-core",
"solana-entry",
"solana-geyser-plugin-manager",
"solana-ledger",
"solana-logger 1.12.0",
"solana-measure",

View File

@ -26,6 +26,7 @@ solana-clap-utils = { path = "../clap-utils", version = "=1.12.0" }
solana-cli-output = { path = "../cli-output", version = "=1.12.0" }
solana-core = { path = "../core", version = "=1.12.0" }
solana-entry = { path = "../entry", version = "=1.12.0" }
solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.12.0" }
solana-ledger = { path = "../ledger", version = "=1.12.0" }
solana-logger = { path = "../logger", version = "=1.12.0" }
solana-measure = { path = "../measure", version = "=1.12.0" }

View File

@ -6,6 +6,7 @@ use {
crate_description, crate_name, value_t, value_t_or_exit, values_t_or_exit, App,
AppSettings, Arg, ArgMatches, SubCommand,
},
crossbeam_channel::unbounded,
dashmap::DashMap,
itertools::Itertools,
log::*,
@ -20,6 +21,7 @@ use {
},
solana_core::system_monitor_service::SystemMonitorService,
solana_entry::entry::Entry,
solana_geyser_plugin_manager::geyser_plugin_service::GeyserPluginService,
solana_ledger::{
ancestor_iterator::AncestorIterator,
bank_forks_utils,
@ -39,6 +41,7 @@ use {
},
accounts_db::{AccountsDbConfig, FillerAccountsConfig},
accounts_index::{AccountsIndexConfig, IndexLimitMb, ScanConfig},
accounts_update_notifier_interface::AccountsUpdateNotifier,
bank::{Bank, RewardCalculationEvent},
bank_forks::BankForks,
cost_model::CostModel,
@ -926,6 +929,25 @@ fn load_bank_forks(
vec![non_primary_accounts_path]
};
let mut accounts_update_notifier = Option::<AccountsUpdateNotifier>::default();
if arg_matches.is_present("geyser_plugin_config") {
let geyser_config_files = values_t_or_exit!(arg_matches, "geyser_plugin_config", String)
.into_iter()
.map(PathBuf::from)
.collect::<Vec<_>>();
let (confirmed_bank_sender, confirmed_bank_receiver) = unbounded();
drop(confirmed_bank_sender);
let geyser_service =
GeyserPluginService::new(confirmed_bank_receiver, &geyser_config_files).unwrap_or_else(
|err| {
eprintln!("Failed to setup Geyser service: {:?}", err);
exit(1);
},
);
accounts_update_notifier = geyser_service.get_accounts_update_notifier();
}
let (bank_forks, leader_schedule_cache, starting_snapshot_hashes, ..) =
bank_forks_utils::load_bank_forks(
genesis_config,
@ -935,7 +957,7 @@ fn load_bank_forks(
snapshot_config.as_ref(),
&process_options,
None,
None,
accounts_update_notifier,
);
let pruned_banks_receiver =
@ -1275,6 +1297,13 @@ fn main() {
.default_value(default_max_incremental_snapshot_archives_to_retain)
.help("The maximum number of incremental snapshot archives to hold on to when purging older snapshots.");
let geyser_plugin_args = Arg::with_name("geyser_plugin_config")
.long("geyser-plugin-config")
.value_name("FILE")
.takes_value(true)
.multiple(true)
.help("Specify the configuration file for the Geyser plugin.");
let rent = Rent::default();
let default_bootstrap_validator_lamports = &sol_to_lamports(500.0)
.max(VoteState::get_rent_exempt_reserve(&rent))
@ -1559,6 +1588,7 @@ fn main() {
.arg(&allow_dead_slots_arg)
.arg(&max_genesis_archive_unpacked_size_arg)
.arg(&debug_key_arg)
.arg(&geyser_plugin_args)
.arg(
Arg::with_name("skip_poh_verify")
.long("skip-poh-verify")
@ -1613,6 +1643,7 @@ fn main() {
.arg(&snapshot_version_arg)
.arg(&maximum_full_snapshot_archives_to_retain)
.arg(&maximum_incremental_snapshot_archives_to_retain)
.arg(&geyser_plugin_args)
.arg(
Arg::with_name("snapshot_slot")
.index(1)
@ -1785,6 +1816,7 @@ fn main() {
.arg(&account_paths_arg)
.arg(&halt_at_slot_arg)
.arg(&hard_forks_arg)
.arg(&geyser_plugin_args)
.arg(
Arg::with_name("include_sysvars")
.long("include-sysvars")
@ -1811,6 +1843,7 @@ fn main() {
.arg(&halt_at_slot_arg)
.arg(&hard_forks_arg)
.arg(&max_genesis_archive_unpacked_size_arg)
.arg(&geyser_plugin_args)
.arg(
Arg::with_name("warp_epoch")
.required(false)