Skip to content
This repository was archived by the owner on Nov 6, 2020. It is now read-only.

Commit 1c6afc6

Browse files
committed
Fix nits in logic and add tests for verification
1 parent f0fada5 commit 1c6afc6

File tree

1 file changed

+63
-8
lines changed
  • ethcore/src/verification/queue

1 file changed

+63
-8
lines changed

ethcore/src/verification/queue/mod.rs

Lines changed: 63 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -232,23 +232,25 @@ impl<K: Kind> VerificationQueue<K> {
232232
let scale_verifiers = config.verifier_settings.scale_verifiers;
233233

234234
let num_cpus = ::num_cpus::get();
235-
let cli_max_verifiers = cmp::max(1, config.verifier_settings.num_verifiers);
235+
236+
let max_verifiers = cmp::max(num_cpus, MAX_VERIFIERS);
237+
let default_amount = cmp::max(1, cmp::min(max_verifiers, config.verifier_settings.num_verifiers));
236238

237239
// if `auto-scaling` is enabled spawn up extra threads as they might be needed
238240
// otherwise just spawn the number of threads specified by the config
239-
let max_verifiers = if scale_verifiers {
240-
cmp::min(num_cpus, MAX_VERIFIERS)
241+
let number_of_threads = if scale_verifiers {
242+
max_verifiers
241243
} else {
242-
cmp::min(cli_max_verifiers, cmp::min(num_cpus, MAX_VERIFIERS))
244+
cmp::min(default_amount, max_verifiers)
243245
};
244246

245-
let state = Arc::new((Mutex::new(State::Work(cli_max_verifiers)), Condvar::new()));
246-
let mut verifier_handles = Vec::with_capacity(max_verifiers);
247+
let state = Arc::new((Mutex::new(State::Work(default_amount)), Condvar::new()));
248+
let mut verifier_handles = Vec::with_capacity(number_of_threads);
247249

248-
debug!(target: "verification", "Allocating {} verifiers, {} initially active", max_verifiers, cli_max_verifiers);
250+
debug!(target: "verification", "Allocating {} verifiers, {} initially active", number_of_threads, default_amount);
249251
debug!(target: "verification", "Verifier auto-scaling {}", if scale_verifiers { "enabled" } else { "disabled" });
250252

251-
for i in 0..max_verifiers {
253+
for i in 0..number_of_threads {
252254
debug!(target: "verification", "Adding verification thread #{}", i);
253255

254256
let verification = verification.clone();
@@ -885,4 +887,57 @@ mod tests {
885887
queue.collect_garbage();
886888
assert_eq!(queue.num_verifiers(), 1);
887889
}
890+
891+
#[test]
892+
fn worker_threads_honor_specified_num_without_scaling() {
893+
let spec = Spec::new_test();
894+
let engine = spec.engine;
895+
let mut config = Config::default();
896+
config.verifier_settings.num_verifiers = 3;
897+
config.verifier_settings.scale_verifiers = false;
898+
899+
let queue = BlockQueue::new(config, engine, IoChannel::disconnected(), true);
900+
901+
assert_eq!(queue.num_verifiers(), 3);
902+
}
903+
904+
#[test]
905+
fn worker_threads_specifyed_to_zero_should_set_to_one() {
906+
let spec = Spec::new_test();
907+
let engine = spec.engine;
908+
let mut config = Config::default();
909+
config.verifier_settings.num_verifiers = 1;
910+
config.verifier_settings.scale_verifiers = false;
911+
912+
let queue = BlockQueue::new(config, engine, IoChannel::disconnected(), true);
913+
914+
assert_eq!(queue.num_verifiers(), 1);
915+
}
916+
917+
#[test]
918+
fn worker_threads_should_accept_max_eight() {
919+
let spec = Spec::new_test();
920+
let engine = spec.engine;
921+
let mut config = Config::default();
922+
config.verifier_settings.num_verifiers = 10000;
923+
config.verifier_settings.scale_verifiers = false;
924+
925+
let queue = BlockQueue::new(config, engine, IoChannel::disconnected(), true);
926+
927+
assert_eq!(queue.num_verifiers(), 8);
928+
}
929+
930+
#[test]
931+
fn worker_threads_scaling_with_specifed_num_of_workers() {
932+
let spec = Spec::new_test();
933+
let engine = spec.engine;
934+
let mut config = Config::default();
935+
config.verifier_settings.num_verifiers = 5;
936+
config.verifier_settings.scale_verifiers = true;
937+
938+
let queue = BlockQueue::new(config, engine, IoChannel::disconnected(), true);
939+
queue.scale_verifiers(8);
940+
941+
assert_eq!(queue.num_verifiers(), 8);
942+
}
888943
}

0 commit comments

Comments
 (0)