Faster exit for storage_stage client
Shorten the timeout and check for exit on every iteration of fetching a last id.
This commit is contained in:
parent
e341b33f21
commit
0bb6940c1a
|
@ -1,7 +1,13 @@
|
||||||
use crate::cluster_info::{NodeInfo, FULLNODE_PORT_RANGE};
|
use crate::cluster_info::{NodeInfo, FULLNODE_PORT_RANGE};
|
||||||
use crate::thin_client::ThinClient;
|
use crate::thin_client::ThinClient;
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
pub fn mk_client(r: &NodeInfo) -> ThinClient {
|
pub fn mk_client(r: &NodeInfo) -> ThinClient {
|
||||||
let (_, transactions_socket) = solana_netutil::bind_in_range(FULLNODE_PORT_RANGE).unwrap();
|
let (_, transactions_socket) = solana_netutil::bind_in_range(FULLNODE_PORT_RANGE).unwrap();
|
||||||
ThinClient::new(r.rpc, r.tpu, transactions_socket)
|
ThinClient::new(r.rpc, r.tpu, transactions_socket)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn mk_client_with_timeout(r: &NodeInfo, timeout: Duration) -> ThinClient {
|
||||||
|
let (_, transactions_socket) = solana_netutil::bind_in_range(FULLNODE_PORT_RANGE).unwrap();
|
||||||
|
ThinClient::new_with_timeout(r.rpc, r.tpu, transactions_socket, timeout)
|
||||||
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
use crate::blocktree::Blocktree;
|
use crate::blocktree::Blocktree;
|
||||||
#[cfg(all(feature = "chacha", feature = "cuda"))]
|
#[cfg(all(feature = "chacha", feature = "cuda"))]
|
||||||
use crate::chacha_cuda::chacha_cbc_encrypt_file_many_keys;
|
use crate::chacha_cuda::chacha_cbc_encrypt_file_many_keys;
|
||||||
use crate::client::mk_client;
|
use crate::client::mk_client_with_timeout;
|
||||||
use crate::cluster_info::ClusterInfo;
|
use crate::cluster_info::ClusterInfo;
|
||||||
use crate::entry::EntryReceiver;
|
use crate::entry::EntryReceiver;
|
||||||
use crate::result::{Error, Result};
|
use crate::result::{Error, Result};
|
||||||
|
@ -227,7 +227,7 @@ impl StorageStage {
|
||||||
account_to_create: Option<Pubkey>,
|
account_to_create: Option<Pubkey>,
|
||||||
) -> io::Result<()> {
|
) -> io::Result<()> {
|
||||||
if let Some(leader_info) = cluster_info.read().unwrap().leader_data() {
|
if let Some(leader_info) = cluster_info.read().unwrap().leader_data() {
|
||||||
let mut client = mk_client(leader_info);
|
let mut client = mk_client_with_timeout(leader_info, Duration::from_secs(5));
|
||||||
|
|
||||||
if let Some(account) = account_to_create {
|
if let Some(account) = account_to_create {
|
||||||
if client.get_account_userdata(&account).is_ok() {
|
if client.get_account_userdata(&account).is_ok() {
|
||||||
|
@ -235,7 +235,19 @@ impl StorageStage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(last_id) = client.try_get_last_id(10) {
|
let mut last_id = None;
|
||||||
|
for _ in 0..10 {
|
||||||
|
if let Some(new_last_id) = client.try_get_last_id(1) {
|
||||||
|
last_id = Some(new_last_id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if exit.load(Ordering::Relaxed) {
|
||||||
|
Err(io::Error::new(io::ErrorKind::Other, "exit signaled"))?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(last_id) = last_id {
|
||||||
tx.sign(&[keypair.as_ref()], last_id);
|
tx.sign(&[keypair.as_ref()], last_id);
|
||||||
|
|
||||||
if exit.load(Ordering::Relaxed) {
|
if exit.load(Ordering::Relaxed) {
|
||||||
|
|
Loading…
Reference in New Issue