From ac03c59b4120c349e244d5a0b9cf43e796c89b3f Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Sat, 16 Mar 2019 22:50:02 -0700 Subject: [PATCH] client/: get_transaction_count() now returns a Result --- bench-tps/src/bench.rs | 4 ++-- bench-tps/src/main.rs | 2 +- client/src/rpc_client.rs | 21 +++++++++++++-------- client/src/thin_client.rs | 6 +++--- tests/thin_client.rs | 6 +++--- 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/bench-tps/src/bench.rs b/bench-tps/src/bench.rs index b67a95430..ec926d979 100644 --- a/bench-tps/src/bench.rs +++ b/bench-tps/src/bench.rs @@ -54,14 +54,14 @@ pub fn sample_tx_count( ) { let client = create_client(v.client_facing_addr(), FULLNODE_PORT_RANGE); let mut now = Instant::now(); - let mut initial_tx_count = client.transaction_count(); + let mut initial_tx_count = client.get_transaction_count().expect("transaction count"); let mut max_tps = 0.0; let mut total; let log_prefix = format!("{:21}:", v.tpu.to_string()); loop { - let tx_count = client.transaction_count(); + let tx_count = client.get_transaction_count().expect("transaction count"); assert!( tx_count >= initial_tx_count, "expected tx_count({}) >= initial_tx_count({})", diff --git a/bench-tps/src/main.rs b/bench-tps/src/main.rs index f0192f503..4207ac4f5 100644 --- a/bench-tps/src/main.rs +++ b/bench-tps/src/main.rs @@ -106,7 +106,7 @@ fn main() { let mut blockhash = client.get_recent_blockhash(); println!("Got last ID {:?}", blockhash); - let first_tx_count = client.transaction_count(); + let first_tx_count = client.get_transaction_count().expect("transaction count"); println!("Initial transaction count {}", first_tx_count); let exit_signal = Arc::new(AtomicBool::new(false)); diff --git a/client/src/rpc_client.rs b/client/src/rpc_client.rs index 44496eb44..f419b382e 100644 --- a/client/src/rpc_client.rs +++ b/client/src/rpc_client.rs @@ -102,23 +102,28 @@ impl RpcClient { /// Request the transaction count. If the response packet is dropped by the network, /// this method will try again 5 times. - pub fn transaction_count(&self) -> u64 { - debug!("transaction_count"); - for _tries in 0..5 { + pub fn get_transaction_count(&self) -> Result> { + debug!("get_transaction_count"); + + let mut num_retries = 5; + loop { let response = self.client.send(&RpcRequest::GetTransactionCount, None, 0); match response { Ok(value) => { debug!("transaction_count response: {:?}", value); let transaction_count = value.as_u64().unwrap(); - return transaction_count; + return Ok(transaction_count); } - Err(error) => { - debug!("transaction_count failed: {:?}", error); + Err(err) => { + debug!("transaction_count failed: {:?}", err); + num_retries -= 1; + if num_retries == 0 { + return Err(err); + } } - }; + } } - 0 } /// Request the last Entry ID from the server without blocking. diff --git a/client/src/thin_client.rs b/client/src/thin_client.rs index 787bb0684..599b602ee 100644 --- a/client/src/thin_client.rs +++ b/client/src/thin_client.rs @@ -15,7 +15,7 @@ use solana_sdk::signature::{Keypair, KeypairUtil, Signature}; use solana_sdk::system_transaction::SystemTransaction; use solana_sdk::timing; use solana_sdk::transaction::Transaction; -use std; +use std::error; use std::io; use std::net::{SocketAddr, UdpSocket}; use std::time::{Duration, Instant}; @@ -141,8 +141,8 @@ impl ThinClient { self.rpc_client.get_balance(pubkey) } - pub fn transaction_count(&self) -> u64 { - self.rpc_client.transaction_count() + pub fn get_transaction_count(&self) -> Result> { + self.rpc_client.get_transaction_count() } pub fn try_get_recent_blockhash(&self, num_retries: u64) -> Option { diff --git a/tests/thin_client.rs b/tests/thin_client.rs index 88d7f5fed..2f87005bd 100644 --- a/tests/thin_client.rs +++ b/tests/thin_client.rs @@ -25,7 +25,7 @@ fn test_thin_client_basic() { let client = create_client(leader_data.client_facing_addr(), FULLNODE_PORT_RANGE); - let transaction_count = client.transaction_count(); + let transaction_count = client.get_transaction_count().unwrap(); assert_eq!(transaction_count, 0); let blockhash = client.get_recent_blockhash(); @@ -40,7 +40,7 @@ fn test_thin_client_basic() { let balance = client.get_balance(&bob_pubkey); assert_eq!(balance.unwrap(), 500); - let transaction_count = client.transaction_count(); + let transaction_count = client.get_transaction_count().unwrap(); assert_eq!(transaction_count, 1); server.close().unwrap(); remove_dir_all(ledger_path).unwrap(); @@ -144,7 +144,7 @@ fn test_transaction_count() { transactions_socket, Duration::from_secs(2), ); - assert_eq!(client.transaction_count(), 0); + client.get_transaction_count().unwrap_err(); } #[test]