From 09e13388bb2e7bbce0e5976104a7682de7c1de7a Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Wed, 30 Sep 2020 20:36:27 +0900 Subject: [PATCH] Add support for build_failure_weight_multiplier ... and improve unit test coverage. Change-Id: I67a121d133c623dc1d07a0ae67f2af1f237d3227 --- manifests/scheduler/filter.pp | 8 +++++ ...re_weight_multiplier-a2d2c112d7bfaee4.yaml | 6 ++++ spec/classes/nova_scheduler_filter_spec.rb | 30 +++++++++++++++++-- 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 releasenotes/notes/scheduler-filter-build_failure_weight_multiplier-a2d2c112d7bfaee4.yaml diff --git a/manifests/scheduler/filter.pp b/manifests/scheduler/filter.pp index 0be1ffb0c..3804f00da 100644 --- a/manifests/scheduler/filter.pp +++ b/manifests/scheduler/filter.pp @@ -80,6 +80,11 @@ # (optional) Multiplier used for weighing hosts for group soft-anti-affinity # Defaults to $::os_service_default # +# [*build_failure_weight_multiplier*] +# (optional) Multiplier used for weighing hosts that have had recent build +# failures +# Defaults to $::os_service_default +# # [*restrict_isolated_hosts_to_isolated_images*] # (optional) Prevent non-isolated images from being built on isolated hosts. # Defaults to $::os_service_default @@ -110,6 +115,7 @@ class nova::scheduler::filter ( $io_ops_weight_multiplier = $::os_service_default, $soft_affinity_weight_multiplier = $::os_service_default, $soft_anti_affinity_weight_multiplier = $::os_service_default, + $build_failure_weight_multiplier = $::os_service_default, $restrict_isolated_hosts_to_isolated_images = $::os_service_default, $aggregate_image_properties_isolation_namespace = $::os_service_default, $aggregate_image_properties_isolation_separator = $::os_service_default, @@ -189,6 +195,8 @@ class nova::scheduler::filter ( value => $soft_affinity_weight_multiplier; 'filter_scheduler/soft_anti_affinity_weight_multiplier': value => $soft_anti_affinity_weight_multiplier; + 'filter_scheduler/build_failure_weight_multiplier': + value => $build_failure_weight_multiplier; 'filter_scheduler/restrict_isolated_hosts_to_isolated_images': value => $restrict_isolated_hosts_to_isolated_images; 'filter_scheduler/aggregate_image_properties_isolation_namespace': diff --git a/releasenotes/notes/scheduler-filter-build_failure_weight_multiplier-a2d2c112d7bfaee4.yaml b/releasenotes/notes/scheduler-filter-build_failure_weight_multiplier-a2d2c112d7bfaee4.yaml new file mode 100644 index 000000000..c1c24664d --- /dev/null +++ b/releasenotes/notes/scheduler-filter-build_failure_weight_multiplier-a2d2c112d7bfaee4.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + The new ``nova::scheduler::filter::build_failure_weight_multiplier`` + parameter has been added, to support the corresponding parameter in + nova-scheduler. diff --git a/spec/classes/nova_scheduler_filter_spec.rb b/spec/classes/nova_scheduler_filter_spec.rb index 732365b45..0554265fb 100644 --- a/spec/classes/nova_scheduler_filter_spec.rb +++ b/spec/classes/nova_scheduler_filter_spec.rb @@ -26,6 +26,7 @@ describe 'nova::scheduler::filter' do it { is_expected.to contain_nova_config('filter_scheduler/io_ops_weight_multiplier').with_value('') } it { is_expected.to contain_nova_config('filter_scheduler/soft_affinity_weight_multiplier').with_value('') } it { is_expected.to contain_nova_config('filter_scheduler/soft_anti_affinity_weight_multiplier').with_value('') } + it { is_expected.to contain_nova_config('filter_scheduler/build_failure_weight_multiplier').with_value('') } it { is_expected.to contain_nova_config('filter_scheduler/restrict_isolated_hosts_to_isolated_images').with_value('') } it { is_expected.to contain_nova_config('filter_scheduler/aggregate_image_properties_isolation_namespace').with_value('') } it { is_expected.to contain_nova_config('filter_scheduler/aggregate_image_properties_isolation_separator').with_value('') } @@ -35,17 +36,42 @@ describe 'nova::scheduler::filter' do it { is_expected.to_not contain_nova_config('scheduler/host_manager') } end - context 'when overriding params with non-empty arrays' do + context 'when overriding params' do let :params do { :scheduler_max_attempts => '4', + :scheduler_host_subset_size => '3', + :max_io_ops_per_host => '16', + :max_instances_per_host => '100', :isolated_images => ['ubuntu1','centos2'], :isolated_hosts => ['192.168.1.2','192.168.1.3'], :scheduler_default_filters => ['RetryFilter','AvailabilityZoneFilter'], - :scheduler_available_filters => ['nova_filter1','nova_filter2'] + :scheduler_available_filters => ['nova_filter1','nova_filter2'], + :scheduler_weight_classes => 'nova.scheduler.weights.compute.BuildFailureWeigher', + :periodic_task_interval => 120, + :track_instance_changes => true, + :ram_weight_multiplier => 10, + :cpu_weight_multiplier => 20, + :disk_weight_multiplier => 30, + :io_ops_weight_multiplier => 40, + :soft_affinity_weight_multiplier => 50, + :soft_anti_affinity_weight_multiplier => 60, + :build_failure_weight_multiplier => 100, } end it { is_expected.to contain_nova_config('scheduler/max_attempts').with_value('4') } + it { is_expected.to contain_nova_config('scheduler/periodic_task_interval').with_value(120) } + it { is_expected.to contain_nova_config('filter_scheduler/host_subset_size').with_value('3') } + it { is_expected.to contain_nova_config('filter_scheduler/max_io_ops_per_host').with_value('16') } + it { is_expected.to contain_nova_config('filter_scheduler/max_instances_per_host').with_value('100') } + it { is_expected.to contain_nova_config('filter_scheduler/track_instance_changes').with_value(true) } + it { is_expected.to contain_nova_config('filter_scheduler/ram_weight_multiplier').with_value(10) } + it { is_expected.to contain_nova_config('filter_scheduler/cpu_weight_multiplier').with_value(20) } + it { is_expected.to contain_nova_config('filter_scheduler/disk_weight_multiplier').with_value(30) } + it { is_expected.to contain_nova_config('filter_scheduler/io_ops_weight_multiplier').with_value(40) } + it { is_expected.to contain_nova_config('filter_scheduler/soft_affinity_weight_multiplier').with_value(50) } + it { is_expected.to contain_nova_config('filter_scheduler/soft_anti_affinity_weight_multiplier').with_value(60) } + it { is_expected.to contain_nova_config('filter_scheduler/build_failure_weight_multiplier').with_value(100) } it { is_expected.to contain_nova_config('filter_scheduler/isolated_images').with_value('ubuntu1,centos2') } it { is_expected.to contain_nova_config('filter_scheduler/isolated_hosts').with_value('192.168.1.2,192.168.1.3') } it { is_expected.to contain_nova_config('filter_scheduler/enabled_filters').with_value('RetryFilter,AvailabilityZoneFilter') }