Paginate rpc query to get feature accounts (#25978)
This commit is contained in:
parent
f48d0b2b36
commit
d4c4e28b5f
|
@ -8,7 +8,9 @@ use {
|
|||
serde::{Deserialize, Serialize},
|
||||
solana_clap_utils::{input_parsers::*, input_validators::*, keypair::*},
|
||||
solana_cli_output::{cli_version::CliVersion, QuietDisplay, VerboseDisplay},
|
||||
solana_client::{client_error::ClientError, rpc_client::RpcClient},
|
||||
solana_client::{
|
||||
client_error::ClientError, rpc_client::RpcClient, rpc_request::MAX_MULTIPLE_ACCOUNTS,
|
||||
},
|
||||
solana_remote_wallet::remote_wallet::RemoteWalletManager,
|
||||
solana_sdk::{
|
||||
account::Account,
|
||||
|
@ -800,35 +802,40 @@ fn process_status(
|
|||
None
|
||||
};
|
||||
let mut inactive = false;
|
||||
let mut features = rpc_client
|
||||
.get_multiple_accounts(feature_ids)?
|
||||
.into_iter()
|
||||
.zip(feature_ids)
|
||||
.map(|(account, feature_id)| {
|
||||
let feature_name = FEATURE_NAMES.get(feature_id).unwrap();
|
||||
account
|
||||
.and_then(status_from_account)
|
||||
.map(|feature_status| CliFeature {
|
||||
id: feature_id.to_string(),
|
||||
description: feature_name.to_string(),
|
||||
status: feature_status,
|
||||
})
|
||||
.unwrap_or_else(|| {
|
||||
inactive = true;
|
||||
CliFeature {
|
||||
let mut features = vec![];
|
||||
for feature_ids in feature_ids.chunks(MAX_MULTIPLE_ACCOUNTS) {
|
||||
let mut feature_chunk = rpc_client
|
||||
.get_multiple_accounts(feature_ids)
|
||||
.unwrap_or_default()
|
||||
.into_iter()
|
||||
.zip(feature_ids)
|
||||
.map(|(account, feature_id)| {
|
||||
let feature_name = FEATURE_NAMES.get(feature_id).unwrap();
|
||||
account
|
||||
.and_then(status_from_account)
|
||||
.map(|feature_status| CliFeature {
|
||||
id: feature_id.to_string(),
|
||||
description: feature_name.to_string(),
|
||||
status: CliFeatureStatus::Inactive,
|
||||
}
|
||||
})
|
||||
})
|
||||
.filter(|feature| match (filter, &feature.status) {
|
||||
(Some(min_activation), CliFeatureStatus::Active(activation)) => {
|
||||
activation > &min_activation
|
||||
}
|
||||
_ => true,
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
status: feature_status,
|
||||
})
|
||||
.unwrap_or_else(|| {
|
||||
inactive = true;
|
||||
CliFeature {
|
||||
id: feature_id.to_string(),
|
||||
description: feature_name.to_string(),
|
||||
status: CliFeatureStatus::Inactive,
|
||||
}
|
||||
})
|
||||
})
|
||||
.filter(|feature| match (filter, &feature.status) {
|
||||
(Some(min_activation), CliFeatureStatus::Active(activation)) => {
|
||||
activation > &min_activation
|
||||
}
|
||||
_ => true,
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
features.append(&mut feature_chunk);
|
||||
}
|
||||
|
||||
features.sort_unstable();
|
||||
|
||||
|
|
Loading…
Reference in New Issue