multi host client demo

Bind to the same interface as the user supplied client address.
This commit is contained in:
Anatoly Yakovenko 2018-05-02 20:38:07 -07:00
parent 48d94143e7
commit b65f04d500
2 changed files with 12 additions and 7 deletions

View File

@ -41,6 +41,7 @@ impl AccountantStub {
let subscriptions = vec![Subscription::EntryInfo]; let subscriptions = vec![Subscription::EntryInfo];
let req = Request::Subscribe { subscriptions }; let req = Request::Subscribe { subscriptions };
let data = serialize(&req).expect("serialize Subscribe"); let data = serialize(&req).expect("serialize Subscribe");
trace!("subscribing to {}", self.addr);
let _res = self.socket.send_to(&data, &self.addr); let _res = self.socket.send_to(&data, &self.addr);
} }
@ -114,6 +115,7 @@ impl AccountantStub {
pub fn get_last_id(&mut self) -> FutureResult<Hash, ()> { pub fn get_last_id(&mut self) -> FutureResult<Hash, ()> {
let req = Request::GetLastId; let req = Request::GetLastId;
let data = serialize(&req).expect("serialize GetId"); let data = serialize(&req).expect("serialize GetId");
assert!(data.len() < 4096);
self.socket self.socket
.send_to(&data, &self.addr) .send_to(&data, &self.addr)
.expect("buffer error"); .expect("buffer error");

View File

@ -16,7 +16,7 @@ use solana::signature::{KeyPair, KeyPairUtil};
use solana::transaction::Transaction; use solana::transaction::Transaction;
use std::env; use std::env;
use std::io::{stdin, Read}; use std::io::{stdin, Read};
use std::net::UdpSocket; use std::net::{SocketAddr, UdpSocket};
use std::process::exit; use std::process::exit;
use std::time::Instant; use std::time::Instant;
use untrusted::Input; use untrusted::Input;
@ -33,7 +33,7 @@ fn print_usage(program: &str, opts: Options) {
fn main() { fn main() {
let mut threads = 4usize; let mut threads = 4usize;
let mut addr: String = "127.0.0.1:8000".to_string(); let mut addr: String = "127.0.0.1:8000".to_string();
let mut send_addr: String = "127.0.0.1:8001".to_string(); let mut client_addr: String = "127.0.0.1:8001".to_string();
let mut opts = Options::new(); let mut opts = Options::new();
opts.optopt("s", "", "server address", "host:port"); opts.optopt("s", "", "server address", "host:port");
@ -58,7 +58,7 @@ fn main() {
addr = matches.opt_str("s").unwrap(); addr = matches.opt_str("s").unwrap();
} }
if matches.opt_present("c") { if matches.opt_present("c") {
send_addr = matches.opt_str("c").unwrap(); client_addr = matches.opt_str("c").unwrap();
} }
if matches.opt_present("t") { if matches.opt_present("t") {
threads = matches.opt_str("t").unwrap().parse().expect("integer"); threads = matches.opt_str("t").unwrap().parse().expect("integer");
@ -82,11 +82,13 @@ fn main() {
exit(1); exit(1);
}); });
let socket = UdpSocket::bind(&send_addr).unwrap(); println!("Binding to {}", client_addr);
let socket = UdpSocket::bind(&client_addr).unwrap();
let mut acc = AccountantStub::new(&addr, socket); let mut acc = AccountantStub::new(&addr, socket);
println!("Get last ID..."); println!("Get last ID...");
let last_id = acc.get_last_id().wait().unwrap(); let last_id = acc.get_last_id().wait().unwrap();
println!("Got last ID {:?}", last_id);
println!("Creating keypairs..."); println!("Creating keypairs...");
let txs = demo.users.len() / 2; let txs = demo.users.len() / 2;
@ -119,9 +121,10 @@ fn main() {
let sz = transactions.len() / threads; let sz = transactions.len() / threads;
let chunks: Vec<_> = transactions.chunks(sz).collect(); let chunks: Vec<_> = transactions.chunks(sz).collect();
chunks.into_par_iter().for_each(|trs| { chunks.into_par_iter().for_each(|trs| {
println!("Transferring 1 unit {} times...", trs.len()); println!("Transferring 1 unit {} times... to", trs.len());
let send_addr = "0.0.0.0:0"; let mut client_addr: SocketAddr = client_addr.parse().unwrap();
let socket = UdpSocket::bind(send_addr).unwrap(); client_addr.set_port(0);
let socket = UdpSocket::bind(client_addr).unwrap();
let acc = AccountantStub::new(&addr, socket); let acc = AccountantStub::new(&addr, socket);
for tr in trs { for tr in trs {
acc.transfer_signed(tr.clone()).unwrap(); acc.transfer_signed(tr.clone()).unwrap();