@@ -232,23 +232,25 @@ impl<K: Kind> VerificationQueue<K> {
232
232
let scale_verifiers = config. verifier_settings . scale_verifiers ;
233
233
234
234
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 ) ) ;
236
238
237
239
// if `auto-scaling` is enabled spawn up extra threads as they might be needed
238
240
// 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
241
243
} else {
242
- cmp:: min ( cli_max_verifiers , cmp :: min ( num_cpus , MAX_VERIFIERS ) )
244
+ cmp:: min ( default_amount , max_verifiers )
243
245
} ;
244
246
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 ) ;
247
249
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 ) ;
249
251
debug ! ( target: "verification" , "Verifier auto-scaling {}" , if scale_verifiers { "enabled" } else { "disabled" } ) ;
250
252
251
- for i in 0 ..max_verifiers {
253
+ for i in 0 ..number_of_threads {
252
254
debug ! ( target: "verification" , "Adding verification thread #{}" , i) ;
253
255
254
256
let verification = verification. clone ( ) ;
@@ -885,4 +887,57 @@ mod tests {
885
887
queue. collect_garbage ( ) ;
886
888
assert_eq ! ( queue. num_verifiers( ) , 1 ) ;
887
889
}
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
+ }
888
943
}
0 commit comments