implement per-thread, per-batch sleep in ms (throttling allows easier UI dev) (#2293)
* implement per-thread, per-batch sleep in ms (throttling allows easier UI development) * tidy up sleep() call with Duration::from_millis() instead of Duration::new() * fixup indentation style * removing multinode-demo/client-throttled.sh (same functionality available via arguments)
This commit is contained in:
		@@ -233,9 +233,13 @@ pub fn do_tx_transfers(
 | 
				
			|||||||
    leader: &NodeInfo,
 | 
					    leader: &NodeInfo,
 | 
				
			||||||
    shared_tx_thread_count: &Arc<AtomicIsize>,
 | 
					    shared_tx_thread_count: &Arc<AtomicIsize>,
 | 
				
			||||||
    total_tx_sent_count: &Arc<AtomicUsize>,
 | 
					    total_tx_sent_count: &Arc<AtomicUsize>,
 | 
				
			||||||
 | 
					    thread_batch_sleep_ms: usize,
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
    let client = mk_client(&leader);
 | 
					    let client = mk_client(&leader);
 | 
				
			||||||
    loop {
 | 
					    loop {
 | 
				
			||||||
 | 
					        if thread_batch_sleep_ms > 0 {
 | 
				
			||||||
 | 
					            sleep(Duration::from_millis(thread_batch_sleep_ms as u64));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        let txs;
 | 
					        let txs;
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            let mut shared_txs_wl = shared_txs.write().unwrap();
 | 
					            let mut shared_txs_wl = shared_txs.write().unwrap();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,7 @@ pub struct Config {
 | 
				
			|||||||
    pub num_nodes: usize,
 | 
					    pub num_nodes: usize,
 | 
				
			||||||
    pub duration: Duration,
 | 
					    pub duration: Duration,
 | 
				
			||||||
    pub tx_count: usize,
 | 
					    pub tx_count: usize,
 | 
				
			||||||
 | 
					    pub thread_batch_sleep_ms: usize,
 | 
				
			||||||
    pub sustained: bool,
 | 
					    pub sustained: bool,
 | 
				
			||||||
    pub reject_extra_nodes: bool,
 | 
					    pub reject_extra_nodes: bool,
 | 
				
			||||||
    pub converge_only: bool,
 | 
					    pub converge_only: bool,
 | 
				
			||||||
@@ -30,6 +31,7 @@ impl Default for Config {
 | 
				
			|||||||
            num_nodes: 1,
 | 
					            num_nodes: 1,
 | 
				
			||||||
            duration: Duration::new(std::u64::MAX, 0),
 | 
					            duration: Duration::new(std::u64::MAX, 0),
 | 
				
			||||||
            tx_count: 500_000,
 | 
					            tx_count: 500_000,
 | 
				
			||||||
 | 
					            thread_batch_sleep_ms: 0,
 | 
				
			||||||
            sustained: false,
 | 
					            sustained: false,
 | 
				
			||||||
            reject_extra_nodes: false,
 | 
					            reject_extra_nodes: false,
 | 
				
			||||||
            converge_only: false,
 | 
					            converge_only: false,
 | 
				
			||||||
@@ -110,6 +112,14 @@ pub fn build_args<'a, 'b>() -> App<'a, 'b> {
 | 
				
			|||||||
                .takes_value(true)
 | 
					                .takes_value(true)
 | 
				
			||||||
                .help("Number of transactions to send per batch")
 | 
					                .help("Number of transactions to send per batch")
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					        .arg(
 | 
				
			||||||
 | 
					            Arg::with_name("thread-batch-sleep-ms")
 | 
				
			||||||
 | 
					                .short("z")
 | 
				
			||||||
 | 
					                .long("thread-batch-sleep-ms")
 | 
				
			||||||
 | 
					                .value_name("NUM")
 | 
				
			||||||
 | 
					                .takes_value(true)
 | 
				
			||||||
 | 
					                .help("Per-thread-per-iteration sleep in ms"),
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Parses a clap `ArgMatches` structure into a `Config`
 | 
					/// Parses a clap `ArgMatches` structure into a `Config`
 | 
				
			||||||
@@ -158,6 +168,13 @@ pub fn extract_args<'a>(matches: &ArgMatches<'a>) -> Config {
 | 
				
			|||||||
        args.tx_count = s.to_string().parse().expect("can't parse tx_account");
 | 
					        args.tx_count = s.to_string().parse().expect("can't parse tx_account");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if let Some(t) = matches.value_of("thread-batch-sleep-ms") {
 | 
				
			||||||
 | 
					        args.thread_batch_sleep_ms = t
 | 
				
			||||||
 | 
					            .to_string()
 | 
				
			||||||
 | 
					            .parse()
 | 
				
			||||||
 | 
					            .expect("can't parse thread-batch-sleep-ms");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    args.sustained = matches.is_present("sustained");
 | 
					    args.sustained = matches.is_present("sustained");
 | 
				
			||||||
    args.converge_only = matches.is_present("converge-only");
 | 
					    args.converge_only = matches.is_present("converge-only");
 | 
				
			||||||
    args.reject_extra_nodes = matches.is_present("reject-extra-nodes");
 | 
					    args.reject_extra_nodes = matches.is_present("reject-extra-nodes");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,6 +82,7 @@ fn main() {
 | 
				
			|||||||
        drone_addr,
 | 
					        drone_addr,
 | 
				
			||||||
        id,
 | 
					        id,
 | 
				
			||||||
        threads,
 | 
					        threads,
 | 
				
			||||||
 | 
					        thread_batch_sleep_ms,
 | 
				
			||||||
        num_nodes,
 | 
					        num_nodes,
 | 
				
			||||||
        duration,
 | 
					        duration,
 | 
				
			||||||
        tx_count,
 | 
					        tx_count,
 | 
				
			||||||
@@ -207,6 +208,7 @@ fn main() {
 | 
				
			|||||||
                        &leader,
 | 
					                        &leader,
 | 
				
			||||||
                        &shared_tx_active_thread_count,
 | 
					                        &shared_tx_active_thread_count,
 | 
				
			||||||
                        &total_tx_sent_count,
 | 
					                        &total_tx_sent_count,
 | 
				
			||||||
 | 
					                        thread_batch_sleep_ms,
 | 
				
			||||||
                    );
 | 
					                    );
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
                .unwrap()
 | 
					                .unwrap()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user