From 77c9e801aa3d373acb3a2fd1448a0c59b88cc6ff Mon Sep 17 00:00:00 2001 From: anatoly yakovenko Date: Thu, 7 Jun 2018 13:51:15 -0700 Subject: [PATCH] fixed client demo (#325) * fixed client demo --- README.md | 2 +- multinode-demo/client.sh | 8 ++++++-- src/bin/client-demo.rs | 32 +++++++++++++++++--------------- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 1bd5629fb..3ca701b40 100644 --- a/README.md +++ b/README.md @@ -132,7 +132,7 @@ Now that your singlenode or multinode testnet is up and running, in a separate s the JSON configuration file here, not the genesis ledger. ```bash -$ ./multinode-demo/client.sh ubuntu@10.0.1.51:~/solana #The leader machine +$ ./multinode-demo/client.sh ubuntu@10.0.1.51:~/solana 2 #The leader machine and the total number of nodes in the network ``` What just happened? The client demo spins up several threads to send 500,000 transactions diff --git a/multinode-demo/client.sh b/multinode-demo/client.sh index 7478b9b85..a615e3a13 100755 --- a/multinode-demo/client.sh +++ b/multinode-demo/client.sh @@ -1,11 +1,15 @@ #!/bin/bash -e if [[ -z "$1" ]]; then - echo "usage: $0 [network path to solana repo on leader machine]" + echo "usage: $0 [network path to solana repo on leader machine] [number of nodes in the network if greater then 1]" exit 1 fi LEADER="$1" +COUNT="$2" +if [[ -z "$2" ]]; then + COUNT=1 +fi set -x export RUST_LOG=solana=info @@ -13,4 +17,4 @@ rsync -v -e ssh "$LEADER/leader.json" . rsync -v -e ssh "$LEADER/mint-demo.json" . cargo run --release --bin solana-client-demo -- \ - -l leader.json < mint-demo.json 2>&1 | tee client.log + -l leader.json -n $COUNT -d < mint-demo.json 2>&1 | tee client.log diff --git a/src/bin/client-demo.rs b/src/bin/client-demo.rs index 87bb764e9..6e694da92 100644 --- a/src/bin/client-demo.rs +++ b/src/bin/client-demo.rs @@ -109,9 +109,10 @@ fn main() { &client_addr, &leader, signal.clone(), - num_nodes + 2, + num_nodes, &mut c_threads, ); + assert_eq!(validators.len(), num_nodes); if stdin_isatty() { eprintln!("nothing found on stdin, expected a json file"); @@ -296,26 +297,27 @@ fn converge( gossip_send_socket, exit.clone(), ).expect("DataReplicator::new"); - //wait for the network to converge + let mut rv = vec![]; + //wait for the network to converge, 30 seconds should be plenty for _ in 0..30 { - let min = spy_ref.read().unwrap().convergence(); - if num_nodes as u64 == min { - println!("converged!"); + let v: Vec = spy_ref + .read() + .unwrap() + .table + .values() + .into_iter() + .filter(|x| x.requests_addr != daddr) + .cloned() + .collect(); + if v.len() >= num_nodes { + println!("CONVERGED!"); + rv.extend(v.into_iter()); break; } sleep(Duration::new(1, 0)); } threads.extend(data_replicator.thread_hdls.into_iter()); - let v: Vec = spy_ref - .read() - .unwrap() - .table - .values() - .into_iter() - .filter(|x| x.requests_addr != daddr) - .map(|x| x.clone()) - .collect(); - v.clone() + rv } fn read_leader(path: String) -> ReplicatedData {