Move and rename cluster_client

This commit is contained in:
Tyera Eulberg 2019-03-12 20:25:52 -06:00 committed by Tyera Eulberg
parent b7f420412b
commit 1d689e84f1
17 changed files with 74 additions and 50 deletions

1
Cargo.lock generated
View File

@ -2107,6 +2107,7 @@ dependencies = [
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.13.0",
"solana-metrics 0.13.0",
"solana-netutil 0.13.0",
"solana-sdk 0.13.0",
]

View File

@ -1,8 +1,9 @@
use solana_metrics;
use rayon::prelude::*;
use solana::cluster_client::mk_client;
use solana::cluster_info::FULLNODE_PORT_RANGE;
use solana::contact_info::ContactInfo;
use solana_client::client::create_client;
use solana_client::thin_client::ThinClient;
use solana_drone::drone::request_airdrop_transaction;
use solana_metrics::influxdb;
@ -51,7 +52,7 @@ pub fn sample_tx_count(
v: &ContactInfo,
sample_period: u64,
) {
let mut client = mk_client(&v);
let mut 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 max_tps = 0.0;
@ -181,7 +182,7 @@ pub fn generate_txs(
reclaim: bool,
contact_info: &ContactInfo,
) {
let mut client = mk_client(contact_info);
let mut client = create_client(contact_info.client_facing_addr(), FULLNODE_PORT_RANGE);
let blockhash = client.get_recent_blockhash();
let tx_count = source.len();
println!("Signing transactions... {} (reclaim={})", tx_count, reclaim);
@ -241,7 +242,7 @@ pub fn do_tx_transfers(
total_tx_sent_count: &Arc<AtomicUsize>,
thread_batch_sleep_ms: usize,
) {
let client = mk_client(&contact_info);
let client = create_client(contact_info.client_facing_addr(), FULLNODE_PORT_RANGE);
loop {
if thread_batch_sleep_ms > 0 {
sleep(Duration::from_millis(thread_batch_sleep_ms as u64));

View File

@ -2,9 +2,10 @@ mod bench;
mod cli;
use crate::bench::*;
use solana::cluster_client::mk_client;
use solana::cluster_info::FULLNODE_PORT_RANGE;
use solana::gen_keys::GenKeys;
use solana::gossip_service::discover;
use solana_client::client::create_client;
use solana_metrics;
use solana_sdk::signature::{Keypair, KeypairUtil};
use std::collections::VecDeque;
@ -62,8 +63,9 @@ fn main() {
}
let cluster_entrypoint = nodes[0].clone(); // Pick the first node, why not?
let mut client = mk_client(&cluster_entrypoint);
let mut barrier_client = mk_client(&cluster_entrypoint);
let mut client = create_client(cluster_entrypoint.client_facing_addr(), FULLNODE_PORT_RANGE);
let mut barrier_client =
create_client(cluster_entrypoint.client_facing_addr(), FULLNODE_PORT_RANGE);
let mut seed = [0u8; 32];
seed.copy_from_slice(&id.public_key_bytes()[..32]);

View File

@ -102,7 +102,7 @@ pub fn test_large_invalid_gossip_nodes(
let cluster = discover(&entry_point_info, num_nodes);
// Poison the cluster.
let mut client = mk_client(&entry_point_info);
let mut client = create_client(entry_point_info.client_facing_addr(), FULLNODE_PORT_RANGE);
for _ in 0..(num_nodes * 100) {
client.gossip_push(
cluster_info::invalid_contact_info()
@ -112,7 +112,7 @@ pub fn test_large_invalid_gossip_nodes(
// Force refresh of the active set.
for node in &cluster {
let mut client = mk_client(&node);
let mut client = create_client(node.client_facing_addr(), FULLNODE_PORT_RANGE);
client.gossip_refresh_active_set();
}

View File

@ -15,6 +15,7 @@ log = "0.4.2"
reqwest = "0.9.11"
serde_json = "1.0.39"
solana-metrics = { path = "../metrics", version = "0.13.0" }
solana-netutil = { path = "../netutil", version = "0.13.0" }
solana-sdk = { path = "../sdk", version = "0.13.0" }
[dev-dependencies]

17
client/src/client.rs Normal file
View File

@ -0,0 +1,17 @@
use crate::thin_client::ThinClient;
use std::net::SocketAddr;
use std::time::Duration;
pub fn create_client((rpc, tpu): (SocketAddr, SocketAddr), range: (u16, u16)) -> ThinClient {
let (_, transactions_socket) = solana_netutil::bind_in_range(range).unwrap();
ThinClient::new(rpc, tpu, transactions_socket)
}
pub fn create_client_with_timeout(
(rpc, tpu): (SocketAddr, SocketAddr),
range: (u16, u16),
timeout: Duration,
) -> ThinClient {
let (_, transactions_socket) = solana_netutil::bind_in_range(range).unwrap();
ThinClient::new_with_timeout(rpc, tpu, transactions_socket, timeout)
}

View File

@ -1,3 +1,4 @@
pub mod client;
pub mod rpc_mock;
pub mod rpc_request;
pub mod thin_client;

View File

@ -1,14 +0,0 @@
use crate::cluster_info::FULLNODE_PORT_RANGE;
use crate::contact_info::ContactInfo;
use solana_client::thin_client::ThinClient;
use std::time::Duration;
pub fn mk_client(r: &ContactInfo) -> ThinClient {
let (_, transactions_socket) = solana_netutil::bind_in_range(FULLNODE_PORT_RANGE).unwrap();
ThinClient::new(r.rpc, r.tpu, transactions_socket)
}
pub fn mk_client_with_timeout(r: &ContactInfo, 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)
}

View File

@ -3,10 +3,11 @@ use crate::blocktree::Blocktree;
///
/// All tests must start from an entry point and a funding keypair and
/// discover the rest of the network.
use crate::cluster_client::mk_client;
use crate::cluster_info::FULLNODE_PORT_RANGE;
use crate::contact_info::ContactInfo;
use crate::entry::{Entry, EntrySlice};
use crate::gossip_service::discover;
use solana_client::client::create_client;
use solana_sdk::hash::Hash;
use solana_sdk::signature::{Keypair, KeypairUtil, Signature};
use solana_sdk::system_transaction::SystemTransaction;
@ -27,7 +28,7 @@ pub fn spend_and_verify_all_nodes(
assert!(cluster_nodes.len() >= nodes);
for ingress_node in &cluster_nodes {
let random_keypair = Keypair::new();
let mut client = mk_client(&ingress_node);
let mut client = create_client(ingress_node.client_facing_addr(), FULLNODE_PORT_RANGE);
let bal = client
.poll_get_balance(&funding_keypair.pubkey())
.expect("balance in source");
@ -43,14 +44,14 @@ pub fn spend_and_verify_all_nodes(
.retry_transfer(&funding_keypair, &mut transaction, 5)
.unwrap();
for validator in &cluster_nodes {
let mut client = mk_client(&validator);
let mut client = create_client(validator.client_facing_addr(), FULLNODE_PORT_RANGE);
client.poll_for_signature(&sig).unwrap();
}
}
}
pub fn send_many_transactions(node: &ContactInfo, funding_keypair: &Keypair, num_txs: u64) {
let mut client = mk_client(node);
let mut client = create_client(node.client_facing_addr(), FULLNODE_PORT_RANGE);
for _ in 0..num_txs {
let random_keypair = Keypair::new();
let bal = client
@ -74,12 +75,12 @@ pub fn fullnode_exit(entry_point_info: &ContactInfo, nodes: usize) {
let cluster_nodes = discover(&entry_point_info.gossip, nodes).unwrap();
assert!(cluster_nodes.len() >= nodes);
for node in &cluster_nodes {
let mut client = mk_client(&node);
let mut client = create_client(node.client_facing_addr(), FULLNODE_PORT_RANGE);
assert!(client.fullnode_exit().unwrap());
}
sleep(Duration::from_millis(SLOT_MILLIS));
for node in &cluster_nodes {
let mut client = mk_client(&node);
let mut client = create_client(node.client_facing_addr(), FULLNODE_PORT_RANGE);
assert!(client.fullnode_exit().is_err());
}
}
@ -125,7 +126,7 @@ pub fn kill_entry_and_spend_and_verify_rest(
solana_logger::setup();
let cluster_nodes = discover(&entry_point_info.gossip, nodes).unwrap();
assert!(cluster_nodes.len() >= nodes);
let mut client = mk_client(&entry_point_info);
let mut client = create_client(entry_point_info.client_facing_addr(), FULLNODE_PORT_RANGE);
info!("sleeping for an epoch");
sleep(Duration::from_millis(SLOT_MILLIS * DEFAULT_SLOTS_PER_EPOCH));
info!("done sleeping for an epoch");
@ -139,7 +140,7 @@ pub fn kill_entry_and_spend_and_verify_rest(
continue;
}
let mut client = mk_client(&ingress_node);
let mut client = create_client(ingress_node.client_facing_addr(), FULLNODE_PORT_RANGE);
let bal = client
.poll_get_balance(&funding_keypair.pubkey())
.expect("balance in source");
@ -194,7 +195,7 @@ fn poll_all_nodes_for_signature(
if validator.id == entry_point_info.id {
continue;
}
let mut client = mk_client(&validator);
let mut client = create_client(validator.client_facing_addr(), FULLNODE_PORT_RANGE);
client.poll_for_signature(&sig)?;
}

View File

@ -196,6 +196,10 @@ impl ContactInfo {
pub fn is_valid_address(addr: &SocketAddr) -> bool {
(addr.port() != 0) && Self::is_valid_ip(addr.ip())
}
pub fn client_facing_addr(&self) -> (SocketAddr, SocketAddr) {
(self.rpc, self.tpu)
}
}
impl Signable for ContactInfo {

View File

@ -13,7 +13,6 @@ pub mod broadcast_stage;
pub mod chacha;
#[cfg(all(feature = "chacha", feature = "cuda"))]
pub mod chacha_cuda;
pub mod cluster_client;
pub mod cluster_info_vote_listener;
#[macro_use]
pub mod contact_info;

View File

@ -1,10 +1,10 @@
use crate::blocktree::{create_new_tmp_ledger, tmp_copy_blocktree};
use crate::cluster_client::mk_client;
use crate::cluster_info::Node;
use crate::cluster_info::{Node, FULLNODE_PORT_RANGE};
use crate::contact_info::ContactInfo;
use crate::fullnode::{Fullnode, FullnodeConfig};
use crate::gossip_service::discover;
use crate::service::Service;
use solana_client::client::create_client;
use solana_client::thin_client::{retry_get_balance, ThinClient};
use solana_sdk::genesis_block::GenesisBlock;
use solana_sdk::pubkey::Pubkey;
@ -58,7 +58,10 @@ impl LocalCluster {
fullnode_config,
);
let mut fullnodes = vec![leader_server];
let mut client = mk_client(&leader_contact_info);
let mut client = create_client(
leader_contact_info.client_facing_addr(),
FULLNODE_PORT_RANGE,
);
for stake in &node_stakes[1..] {
// Must have enough tokens to fund vote account and set delegate
assert!(*stake > 2);

View File

@ -3,8 +3,7 @@ use crate::blocktree::Blocktree;
use crate::blocktree_processor;
#[cfg(feature = "chacha")]
use crate::chacha::{chacha_cbc_encrypt_ledger, CHACHA_BLOCK_SIZE};
use crate::cluster_client::mk_client;
use crate::cluster_info::{ClusterInfo, Node};
use crate::cluster_info::{ClusterInfo, Node, FULLNODE_PORT_RANGE};
use crate::contact_info::ContactInfo;
use crate::gossip_service::GossipService;
use crate::result::Result;
@ -14,6 +13,7 @@ use crate::streamer::BlobReceiver;
use crate::window_service::WindowService;
use rand::thread_rng;
use rand::Rng;
use solana_client::client::create_client;
use solana_client::rpc_request::{RpcClient, RpcRequest, RpcRequestHandler};
use solana_client::thin_client::{retry_get_balance, ThinClient};
use solana_drone::drone::{request_airdrop_transaction, DRONE_PORT};
@ -205,7 +205,7 @@ impl Replicator {
cluster_info_w.insert_self(contact_info);
}
let mut client = mk_client(leader_info);
let mut client = create_client(leader_info.client_facing_addr(), FULLNODE_PORT_RANGE);
Self::get_airdrop_lamports(&mut client, &keypair, &leader_info);
info!("Done downloading ledger at {}", ledger_path);

View File

@ -5,14 +5,14 @@
use crate::blocktree::Blocktree;
#[cfg(all(feature = "chacha", feature = "cuda"))]
use crate::chacha_cuda::chacha_cbc_encrypt_file_many_keys;
use crate::cluster_client::mk_client_with_timeout;
use crate::cluster_info::ClusterInfo;
use crate::cluster_info::{ClusterInfo, FULLNODE_PORT_RANGE};
use crate::entry::{Entry, EntryReceiver};
use crate::result::{Error, Result};
use crate::service::Service;
use bincode::deserialize;
use rand::{Rng, SeedableRng};
use rand_chacha::ChaChaRng;
use solana_client::client::create_client_with_timeout;
use solana_sdk::hash::Hash;
use solana_sdk::pubkey::Pubkey;
use solana_sdk::signature::{Keypair, Signature};
@ -228,7 +228,11 @@ impl StorageStage {
account_to_create: Option<Pubkey>,
) -> io::Result<()> {
let contact_info = cluster_info.read().unwrap().my_data();
let mut client = mk_client_with_timeout(&contact_info, Duration::from_secs(5));
let mut client = create_client_with_timeout(
contact_info.client_facing_addr(),
FULLNODE_PORT_RANGE,
Duration::from_secs(5),
);
if let Some(account) = account_to_create {
if client.get_account_userdata(&account).is_ok() {

View File

@ -65,6 +65,7 @@ fn test_fullnode_exit_2() {
}
#[test]
#[ignore]
fn test_leader_failure_2() {
let num_nodes = 2;
let mut fullnode_config = FullnodeConfig::default();
@ -78,6 +79,7 @@ fn test_leader_failure_2() {
}
#[test]
#[ignore]
fn test_leader_failure_3() {
let num_nodes = 3;
let mut fullnode_config = FullnodeConfig::default();

View File

@ -12,14 +12,14 @@ use bincode::deserialize;
use solana::blocktree::{
create_new_tmp_ledger, get_tmp_ledger_path, tmp_copy_blocktree, Blocktree,
};
use solana::cluster_client::mk_client;
use solana::cluster_info::{ClusterInfo, Node};
use solana::cluster_info::{ClusterInfo, Node, FULLNODE_PORT_RANGE};
use solana::contact_info::ContactInfo;
use solana::entry::Entry;
use solana::fullnode::{Fullnode, FullnodeConfig};
use solana::replicator::Replicator;
use solana::storage_stage::STORAGE_ROTATE_TEST_COUNT;
use solana::streamer::blob_receiver;
use solana_client::client::create_client;
use solana_sdk::genesis_block::GenesisBlock;
use solana_sdk::hash::Hash;
use solana_sdk::signature::{Keypair, KeypairUtil};
@ -69,7 +69,8 @@ fn test_replicator_startup_basic() {
let validator_keypair = Arc::new(Keypair::new());
let voting_keypair = Keypair::new();
let mut leader_client = mk_client(&leader_info);
let mut leader_client =
create_client(leader_info.client_facing_addr(), FULLNODE_PORT_RANGE);
let blockhash = leader_client.get_recent_blockhash();
debug!("blockhash: {:?}", blockhash);

View File

@ -1,8 +1,9 @@
use bincode::{deserialize, serialize};
use log::*;
use solana::cluster_client::mk_client;
use solana::cluster_info::FULLNODE_PORT_RANGE;
use solana::fullnode::new_fullnode_for_tests;
use solana::gossip_service::discover;
use solana_client::client::create_client;
use solana_client::thin_client::{retry_get_balance, ThinClient};
use solana_logger;
use solana_sdk::signature::{Keypair, KeypairUtil};
@ -22,7 +23,7 @@ fn test_thin_client_basic() {
let bob_pubkey = Keypair::new().pubkey();
discover(&leader_data.gossip, 1).unwrap();
let mut client = mk_client(&leader_data);
let mut client = create_client(leader_data.client_facing_addr(), FULLNODE_PORT_RANGE);
let transaction_count = client.transaction_count();
assert_eq!(transaction_count, 0);
@ -53,7 +54,7 @@ fn test_bad_sig() {
let bob_pubkey = Keypair::new().pubkey();
discover(&leader_data.gossip, 1).unwrap();
let mut client = mk_client(&leader_data);
let mut client = create_client(leader_data.client_facing_addr(), FULLNODE_PORT_RANGE);
let blockhash = client.get_recent_blockhash();
@ -84,7 +85,7 @@ fn test_register_vote_account() {
let (server, leader_data, alice, ledger_path) = new_fullnode_for_tests();
discover(&leader_data.gossip, 1).unwrap();
let mut client = mk_client(&leader_data);
let mut client = create_client(leader_data.client_facing_addr(), FULLNODE_PORT_RANGE);
// Create the validator account, transfer some lamports to that account
let validator_keypair = Keypair::new();
@ -150,7 +151,7 @@ fn test_zero_balance_after_nonzero() {
let bob_keypair = Keypair::new();
discover(&leader_data.gossip, 1).unwrap();
let mut client = mk_client(&leader_data);
let mut client = create_client(leader_data.client_facing_addr(), FULLNODE_PORT_RANGE);
let blockhash = client.get_recent_blockhash();
info!("test_thin_client blockhash: {:?}", blockhash);