Rework processorcount limits to os_workers 13/23413/3
authorMichael Polenchuk <mpolenchuk@mirantis.com>
Thu, 20 Oct 2016 10:00:36 +0000 (13:00 +0300)
committerMichael Polenchuk <mpolenchuk@mirantis.com>
Thu, 20 Oct 2016 12:34:08 +0000 (15:34 +0300)
JIRA: FUEL-212
Change-Id: I1c5b8fe123406f1a96c5432d91a9ee5806c7cf62
Signed-off-by: Michael Polenchuk <mpolenchuk@mirantis.com>
build/f_repos/patch/fuel-library/0003-Rework-processorcount-limits-to-os_workers.patch [new file with mode: 0644]

diff --git a/build/f_repos/patch/fuel-library/0003-Rework-processorcount-limits-to-os_workers.patch b/build/f_repos/patch/fuel-library/0003-Rework-processorcount-limits-to-os_workers.patch
new file mode 100644 (file)
index 0000000..3bf6071
--- /dev/null
@@ -0,0 +1,423 @@
+From e2b9485cbcf9e91cde0db025229b279af91d2a77 Mon Sep 17 00:00:00 2001
+From: Bogdan Dobrelya <bdobrelia@mirantis.com>
+Date: Fri, 30 Sep 2016 12:03:34 +0200
+Subject: [PATCH] Rework processorcount limits to os_workers
+
+* reduce workers_max default limits of a 16 to the $::os_workers, which is limited by [2, 8] interval.
+* reduce workers/pool size/overflow limited by F($::processorcount) to F($::os_workers)
+* change number of keystone threads to 1
+
+Closes-bug: #1629238
+Closes-Bug: #1628534
+
+Change-Id: I5cc4d70b902eeaa1c9cf42911606eba13dd84aa2
+Signed-off-by: Bogdan Dobrelya <bdobrelia@mirantis.com>
+---
+ deployment/puppet/openstack/manifests/cinder.pp    |    2 +-
+ .../manifests/ceilometer/controller.pp             |    2 +-
+ .../openstack_tasks/manifests/glance/glance.pp     |    2 +-
+ .../openstack_tasks/manifests/horizon/horizon.pp   |    2 +-
+ .../manifests/ironic/ironic_compute.pp             |    4 ++--
+ .../openstack_tasks/manifests/keystone/keystone.pp |    4 ++--
+ .../manifests/openstack_cinder/openstack_cinder.pp |    6 +++---
+ .../openstack_controller/openstack_controller.pp   |    6 +++---
+ .../manifests/openstack_network/agents/metadata.pp |    2 +-
+ .../manifests/openstack_network/server_config.pp   |    2 +-
+ .../openstack_tasks/manifests/roles/cinder.pp      |    4 ++--
+ .../openstack_tasks/manifests/sahara/sahara.pp     |    4 ++--
+ .../openstack_tasks/manifests/swift/parts/proxy.pp |    4 ++--
+ .../manifests/swift/proxy_storage.pp               |    2 +-
+ .../puppet/osnailyfacter/lib/facter/os_workers.rb  |   20 ++++++++++++++++++++
+ .../puppet/osnailyfacter/manifests/apache_mpm.pp   |    2 +-
+ .../osnailyfacter/manifests/globals/globals.pp     |    4 ++--
+ .../spec/classes/osnailyfacter_atop_spec.rb        |    2 ++
+ .../noop/spec/hosts/ironic/ironic-compute_spec.rb  |    6 +++---
+ tests/noop/spec/hosts/keystone/keystone_spec.rb    |    2 ++
+ .../openstack-controller_spec.rb                   |    6 +++---
+ tests/noop/spec/hosts/sahara/sahara_spec.rb        |    6 +++---
+ 22 files changed, 59 insertions(+), 35 deletions(-)
+ create mode 100644 deployment/puppet/osnailyfacter/lib/facter/os_workers.rb
+
+diff --git a/deployment/puppet/openstack/manifests/cinder.pp b/deployment/puppet/openstack/manifests/cinder.pp
+index 072252e..3cdf077 100644
+--- a/deployment/puppet/openstack/manifests/cinder.pp
++++ b/deployment/puppet/openstack/manifests/cinder.pp
+@@ -44,7 +44,7 @@ class openstack::cinder(
+   $keystone_user          = 'cinder',
+   $region                 = 'RegionOne',
+   $notification_driver    = undef,
+-  $service_workers        = $::processorcount,
++  $service_workers        = $::os_workers,
+   $vmware_host_ip         = '10.10.10.10',
+   $vmware_host_username   = 'administrator@vsphere.local',
+   $vmware_host_password   = 'password',
+diff --git a/deployment/puppet/openstack_tasks/manifests/ceilometer/controller.pp b/deployment/puppet/openstack_tasks/manifests/ceilometer/controller.pp
+index 2c63ff0..d0ce24d 100644
+--- a/deployment/puppet/openstack_tasks/manifests/ceilometer/controller.pp
++++ b/deployment/puppet/openstack_tasks/manifests/ceilometer/controller.pp
+@@ -37,7 +37,7 @@ class openstack_tasks::ceilometer::controller {
+   $service_endpoint           = hiera('service_endpoint', $management_vip)
+   $ha_mode                    = pick($ceilometer_hash['ha_mode'], true)
+   $ssl_hash                   = hiera_hash('use_ssl', {})
+-  $workers_max                = hiera('workers_max', 16)
++  $workers_max                = hiera('workers_max', $::os_workers)
+   $service_workers            = pick($ceilometer_hash['workers'],
+   min(max($::processorcount, 2), $workers_max))
+diff --git a/deployment/puppet/openstack_tasks/manifests/glance/glance.pp b/deployment/puppet/openstack_tasks/manifests/glance/glance.pp
+index ab7cc13..99153a0 100644
+--- a/deployment/puppet/openstack_tasks/manifests/glance/glance.pp
++++ b/deployment/puppet/openstack_tasks/manifests/glance/glance.pp
+@@ -22,7 +22,7 @@ class openstack_tasks::glance::glance {
+   $max_overflow          = hiera('max_overflow')
+   $ceilometer_hash       = hiera_hash('ceilometer', {})
+   $region                = hiera('region','RegionOne')
+-  $workers_max           = hiera('workers_max', 16)
++  $workers_max         = hiera('workers_max', $::os_workers)
+   $service_workers       = pick($glance_hash['glance_workers'],
+                                 min(max($::processorcount, 2), $workers_max))
+   $ironic_hash           = hiera_hash('ironic', {})
+diff --git a/deployment/puppet/openstack_tasks/manifests/horizon/horizon.pp b/deployment/puppet/openstack_tasks/manifests/horizon/horizon.pp
+index ca1ef45..a52106f 100644
+--- a/deployment/puppet/openstack_tasks/manifests/horizon/horizon.pp
++++ b/deployment/puppet/openstack_tasks/manifests/horizon/horizon.pp
+@@ -119,7 +119,7 @@ class openstack_tasks::horizon::horizon {
+     $wsgi_processes = 2
+     $wsgi_threads = 9
+   } else {
+-    $wsgi_processes = $::processorcount
++    $wsgi_processes = $::os_workers
+     $wsgi_threads = 15
+   }
+diff --git a/deployment/puppet/openstack_tasks/manifests/ironic/ironic_compute.pp b/deployment/puppet/openstack_tasks/manifests/ironic/ironic_compute.pp
+index 940c7a3..322e703 100644
+--- a/deployment/puppet/openstack_tasks/manifests/ironic/ironic_compute.pp
++++ b/deployment/puppet/openstack_tasks/manifests/ironic/ironic_compute.pp
+@@ -35,8 +35,8 @@ class openstack_tasks::ironic::ironic_compute {
+   $db_name                        = pick($nova_hash['db_name'], 'nova')
+   $db_password                    = pick($nova_hash['db_password'], 'nova')
+-  $max_pool_size = hiera('max_pool_size', min($::processorcount * 5 + 0, 30 + 0))
+-  $max_overflow = hiera('max_overflow', min($::processorcount * 5 + 0, 60 + 0))
++  $max_pool_size = hiera('max_pool_size', min($::os_workers * 5 + 0, 30 + 0))
++  $max_overflow = hiera('max_overflow', min($::os_workers * 5 + 0, 60 + 0))
+   $idle_timeout = hiera('idle_timeout', '3600')
+   $max_retries = hiera('max_retries', '-1')
+diff --git a/deployment/puppet/openstack_tasks/manifests/keystone/keystone.pp b/deployment/puppet/openstack_tasks/manifests/keystone/keystone.pp
+index 3162287..8146548 100644
+--- a/deployment/puppet/openstack_tasks/manifests/keystone/keystone.pp
++++ b/deployment/puppet/openstack_tasks/manifests/keystone/keystone.pp
+@@ -30,7 +30,7 @@ class openstack_tasks::keystone::keystone {
+   $syslog_log_facility   = hiera('syslog_log_facility_keystone')
+   $rabbit_hash           = hiera_hash('rabbit', {})
+   $neutron_user_password = hiera('neutron_user_password', false)
+-  $workers_max           = hiera('workers_max', 16)
++  $workers_max           = hiera('workers_max', $::os_workers)
+   $service_workers       = pick($keystone_hash['workers'],
+                                 min(max($::processorcount, 2), $workers_max))
+   $default_log_levels    = hiera_hash('default_log_levels')
+@@ -151,7 +151,7 @@ class openstack_tasks::keystone::keystone {
+   class { '::keystone::wsgi::apache':
+     priority              => '05',
+-    threads               => 3,
++    threads               => 1,
+     workers               => min($::processorcount, 6),
+     ssl                   => $ssl,
+     vhost_custom_fragment => $vhost_limit_request_field_size,
+diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_cinder/openstack_cinder.pp b/deployment/puppet/openstack_tasks/manifests/openstack_cinder/openstack_cinder.pp
+index a298e70..cc4c2b3 100644
+--- a/deployment/puppet/openstack_tasks/manifests/openstack_cinder/openstack_cinder.pp
++++ b/deployment/puppet/openstack_tasks/manifests/openstack_cinder/openstack_cinder.pp
+@@ -12,7 +12,7 @@ class openstack_tasks::openstack_cinder::openstack_cinder {
+   $sahara_hash            = hiera_hash('sahara', {})
+   $rabbit_hash            = hiera_hash('rabbit', {})
+   $service_endpoint       = hiera('service_endpoint')
+-  $workers_max            = hiera('workers_max', 16)
++  $workers_max            = hiera('workers_max', $::os_workers)
+   $service_workers        = pick($cinder_hash['workers'], min(max($::processorcount, 2), $workers_max))
+   $cinder_user_password   = $cinder_hash[user_password]
+   $keystone_user          = pick($cinder_hash['user'], 'cinder')
+@@ -98,8 +98,8 @@ class openstack_tasks::openstack_cinder::openstack_cinder {
+   }
+   # SQLAlchemy backend configuration
+-  $max_pool_size = min($::processorcount * 5 + 0, 30 + 0)
+-  $max_overflow = min($::processorcount * 5 + 0, 60 + 0)
++  $max_pool_size = min($::os_workers * 5 + 0, 30 + 0)
++  $max_overflow = min($::os_workers * 5 + 0, 60 + 0)
+   $max_retries = '-1'
+   $idle_timeout = '3600'
+diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_controller/openstack_controller.pp b/deployment/puppet/openstack_tasks/manifests/openstack_controller/openstack_controller.pp
+index f8915c1..dbc7a9e 100644
+--- a/deployment/puppet/openstack_tasks/manifests/openstack_controller/openstack_controller.pp
++++ b/deployment/puppet/openstack_tasks/manifests/openstack_controller/openstack_controller.pp
+@@ -56,7 +56,7 @@ class openstack_tasks::openstack_controller::openstack_controller {
+   $keystone_user                = pick($nova_hash['user'], 'nova')
+   $keystone_tenant              = pick($nova_hash['tenant'], 'services')
+   $region                       = hiera('region', 'RegionOne')
+-  $workers_max                  = hiera('workers_max', 16)
++  $workers_max                  = hiera('workers_max', $::os_workers)
+   $service_workers              = pick($nova_hash['workers'],
+                                         min(max($::processorcount, 2), $workers_max))
+   $compute_nodes                = get_nodes_hash_by_roles($network_metadata, ['compute'])
+@@ -127,8 +127,8 @@ class openstack_tasks::openstack_controller::openstack_controller {
+   })
+   # SQLAlchemy backend configuration
+-  $max_pool_size = hiera('max_pool_size', min($::processorcount * 5 + 0, 30 + 0))
+-  $max_overflow = hiera('max_overflow', min($::processorcount * 5 + 0, 60 + 0))
++  $max_pool_size = hiera('max_pool_size', min($::os_workers * 5 + 0, 30 + 0))
++  $max_overflow = hiera('max_overflow', min($::os_workers * 5 + 0, 60 + 0))
+   $idle_timeout = hiera('idle_timeout', '3600')
+   $max_retries = hiera('max_retries', '-1')
+diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/metadata.pp b/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/metadata.pp
+index 98acddb..9efcb5a 100644
+--- a/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/metadata.pp
++++ b/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/metadata.pp
+@@ -10,7 +10,7 @@ class openstack_tasks::openstack_network::agents::metadata {
+   $neutron_advanced_config  = hiera_hash('neutron_advanced_configuration', { })
+   $neutron_config           = hiera_hash('neutron_config')
+   $dvr                      = pick($neutron_advanced_config['neutron_dvr'], false)
+-  $workers_max              = hiera('workers_max', 16)
++  $workers_max              = hiera('workers_max', $::os_workers)
+   if $compute {
+     $metadata_workers = pick($neutron_config['workers'],
+diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_network/server_config.pp b/deployment/puppet/openstack_tasks/manifests/openstack_network/server_config.pp
+index 414eedf..03d03a8 100644
+--- a/deployment/puppet/openstack_tasks/manifests/openstack_network/server_config.pp
++++ b/deployment/puppet/openstack_tasks/manifests/openstack_network/server_config.pp
+@@ -86,7 +86,7 @@ class openstack_tasks::openstack_network::server_config {
+     $nova_admin_auth_url     = "${admin_auth_protocol}://${admin_auth_endpoint}:35357/"
+     $nova_url                = "${nova_internal_protocol}://${nova_internal_endpoint}:8774/v2"
+-    $workers_max             = hiera('workers_max', 16)
++    $workers_max             = hiera('workers_max', $::os_workers)
+     $service_workers         = pick($neutron_config['workers'], min(max($::processorcount, 1), $workers_max))
+     $neutron_advanced_config = hiera_hash('neutron_advanced_configuration', { })
+diff --git a/deployment/puppet/openstack_tasks/manifests/roles/cinder.pp b/deployment/puppet/openstack_tasks/manifests/roles/cinder.pp
+index f2d6c72..c41dae6 100644
+--- a/deployment/puppet/openstack_tasks/manifests/roles/cinder.pp
++++ b/deployment/puppet/openstack_tasks/manifests/roles/cinder.pp
+@@ -86,8 +86,8 @@ class openstack_tasks::roles::cinder {
+   }
+   # SQLAlchemy backend configuration
+-  $max_pool_size = min($::processorcount * 5 + 0, 30 + 0)
+-  $max_overflow = min($::processorcount * 5 + 0, 60 + 0)
++  $max_pool_size = min($::os_workers * 5 + 0, 30 + 0)
++  $max_overflow = min($::os_workers * 5 + 0, 60 + 0)
+   $max_retries = '-1'
+   $idle_timeout = '3600'
+diff --git a/deployment/puppet/openstack_tasks/manifests/sahara/sahara.pp b/deployment/puppet/openstack_tasks/manifests/sahara/sahara.pp
+index f6d50c6..30278ee 100644
+--- a/deployment/puppet/openstack_tasks/manifests/sahara/sahara.pp
++++ b/deployment/puppet/openstack_tasks/manifests/sahara/sahara.pp
+@@ -52,8 +52,8 @@ class openstack_tasks::sahara::sahara {
+     $sahara_user     = pick($sahara_hash['user'], 'sahara')
+     $sahara_password = pick($sahara_hash['user_password'])
+     $tenant          = pick($sahara_hash['tenant'], 'services')
+-    $max_pool_size   = min($::processorcount * 5 + 0, 30 + 0)
+-    $max_overflow    = min($::processorcount * 5 + 0, 60 + 0)
++    $max_pool_size   = min($::os_workers * 5 + 0, 30 + 0)
++    $max_overflow    = min($::os_workers * 5 + 0, 60 + 0)
+     $max_retries     = '-1'
+     $idle_timeout    = '3600'
+diff --git a/deployment/puppet/openstack_tasks/manifests/swift/parts/proxy.pp b/deployment/puppet/openstack_tasks/manifests/swift/parts/proxy.pp
+index eb06244..52c2b3a 100644
+--- a/deployment/puppet/openstack_tasks/manifests/swift/parts/proxy.pp
++++ b/deployment/puppet/openstack_tasks/manifests/swift/parts/proxy.pp
+@@ -26,7 +26,7 @@ class openstack_tasks::swift::parts::proxy (
+     'account_quotas',
+     'slo',
+     'proxy-server'],
+-  $proxy_workers                     = $::processorcount,
++  $proxy_workers                     = $::os_workers,
+   $proxy_port                        = '8080',
+   $proxy_allow_account_management    = true,
+   $proxy_account_autocreate          = true,
+@@ -225,4 +225,4 @@ class openstack_tasks::swift::parts::proxy (
+     anchor { 'openstack_tasks_proxy_end' :}
+   }
+-}
+\ No newline at end of file
++}
+diff --git a/deployment/puppet/openstack_tasks/manifests/swift/proxy_storage.pp b/deployment/puppet/openstack_tasks/manifests/swift/proxy_storage.pp
+index 66fcd21..4608b67 100644
+--- a/deployment/puppet/openstack_tasks/manifests/swift/proxy_storage.pp
++++ b/deployment/puppet/openstack_tasks/manifests/swift/proxy_storage.pp
+@@ -30,7 +30,7 @@ class openstack_tasks::swift::proxy_storage {
+   $keystone_user              = pick($swift_hash['user'], 'swift')
+   $keystone_password          = pick($swift_hash['user_password'], 'passsword')
+   $keystone_tenant            = pick($swift_hash['tenant'], 'services')
+-  $workers_max                = hiera('workers_max', 16)
++  $workers_max                = hiera('workers_max', $::os_workers)
+   $service_workers            = pick($swift_hash['workers'], min(max($::processorcount, 2), $workers_max))
+   $ssl_hash                   = hiera_hash('use_ssl', {})
+   $rabbit_hash                = hiera_hash('rabbit')
+diff --git a/deployment/puppet/osnailyfacter/lib/facter/os_workers.rb b/deployment/puppet/osnailyfacter/lib/facter/os_workers.rb
+new file mode 100644
+index 0000000..404fb90
+--- /dev/null
++++ b/deployment/puppet/osnailyfacter/lib/facter/os_workers.rb
+@@ -0,0 +1,20 @@
++#
++# We've found that using $::processorcount for workers/threads can lead to
++# unexpected memory or process counts for people deploying on baremetal or
++# if they have large number of cpus. This fact allows us to tweak the formula
++# used to determine number of workers in a single place but use it across all
++# modules.
++#
++# The value for os_workers is max between '(<# processors> / 4)' and '2' with
++# a cap of 8.
++#
++# This fact can be overloaded by an external fact from /etc/factor/facts.d if
++# a user would like to provide their own default value.
++#
++Facter.add(:os_workers) do
++  has_weight 100
++  setcode do
++    processors = Facter.value('processorcount')
++    [ [ (processors.to_i / 4), 2 ].max, 8 ].min
++  end
++end
+diff --git a/deployment/puppet/osnailyfacter/manifests/apache_mpm.pp b/deployment/puppet/osnailyfacter/manifests/apache_mpm.pp
+index 9d0d4d5..9652064 100644
+--- a/deployment/puppet/osnailyfacter/manifests/apache_mpm.pp
++++ b/deployment/puppet/osnailyfacter/manifests/apache_mpm.pp
+@@ -11,7 +11,7 @@ class osnailyfacter::apache_mpm {
+   if $::processorcount <= 2 {
+     $startservers = 2
+   } else {
+-    $startservers = $::processorcount
++    $startservers = $::os_workers
+   }
+   $maxrequestsperchild = 0
+diff --git a/deployment/puppet/osnailyfacter/manifests/globals/globals.pp b/deployment/puppet/osnailyfacter/manifests/globals/globals.pp
+index 854d297..89a55ff 100644
+--- a/deployment/puppet/osnailyfacter/manifests/globals/globals.pp
++++ b/deployment/puppet/osnailyfacter/manifests/globals/globals.pp
+@@ -330,8 +330,8 @@ class osnailyfacter::globals::globals {
+   # MySQL and SQLAlchemy backend configuration
+   $custom_mysql_setup_class = hiera('custom_mysql_setup_class', 'galera')
+-  $max_pool_size            = hiera('max_pool_size', min($::processorcount * 5 + 0, 30 + 0))
+-  $max_overflow             = hiera('max_overflow', min($::processorcount * 5 + 0, 60 + 0))
++  $max_pool_size            = hiera('max_pool_size', min($::os_workers * 5 + 0, 30 + 0))
++  $max_overflow             = hiera('max_overflow', min($::os_workers * 5 + 0, 60 + 0))
+   $max_retries              = hiera('max_retries', '-1')
+   $idle_timeout             = hiera('idle_timeout','3600')
+   $nova_db_password         = $nova_hash['db_password']
+diff --git a/deployment/puppet/osnailyfacter/spec/classes/osnailyfacter_atop_spec.rb b/deployment/puppet/osnailyfacter/spec/classes/osnailyfacter_atop_spec.rb
+index ed57325..1d27e87 100644
+--- a/deployment/puppet/osnailyfacter/spec/classes/osnailyfacter_atop_spec.rb
++++ b/deployment/puppet/osnailyfacter/spec/classes/osnailyfacter_atop_spec.rb
+@@ -73,6 +73,7 @@ describe 'osnailyfacter::atop' do
+         :osfamily        => 'Debian',
+         :operatingsystem => 'Debian',
+         :processorcount  => 2,
++        :os_workers      => 2,
+         :memorysize_mb   => 4096,
+       }
+     end
+@@ -86,6 +87,7 @@ describe 'osnailyfacter::atop' do
+         :osfamily        => 'RedHat',
+         :operatingsystem => 'RedHat',
+         :processorcount  => 2,
++        :os_workers      => 2,
+         :memorysize_mb   => 4096,
+       }
+     end
+diff --git a/tests/noop/spec/hosts/ironic/ironic-compute_spec.rb b/tests/noop/spec/hosts/ironic/ironic-compute_spec.rb
+index 4712298..f7c7512 100644
+--- a/tests/noop/spec/hosts/ironic/ironic-compute_spec.rb
++++ b/tests/noop/spec/hosts/ironic/ironic-compute_spec.rb
+@@ -122,11 +122,11 @@ describe manifest do
+         else
+           extra_params = '?charset=utf8'
+         end
+-        facts[:processorcount] = 10
+-        max_overflow = Noop.hiera 'max_overflow', [facts[:processorcount] * 5 + 0, 60 + 0].min
++        facts[:os_workers] = 8
++        max_overflow = Noop.hiera 'max_overflow', [facts[:os_workers] * 5 + 0, 60 + 0].min
+         idle_timeout = Noop.hiera 'idle_timeout', '3600'
+         max_retries = Noop.hiera 'max_retries', '-1'
+-        max_pool_size = Noop.hiera 'max_pool_size', [facts[:processorcount] * 5 + 0, 30 + 0].min
++        max_pool_size = Noop.hiera 'max_pool_size', [facts[:os_workers] * 5 + 0, 30 + 0].min
+         should contain_class('nova').with(
+           :database_connection    => "mysql://#{nova_db_user}:#{nova_db_password}@#{database_vip}/#{nova_db_name}#{extra_params}",
+diff --git a/tests/noop/spec/hosts/keystone/keystone_spec.rb b/tests/noop/spec/hosts/keystone/keystone_spec.rb
+index b29e691..c258104 100644
+--- a/tests/noop/spec/hosts/keystone/keystone_spec.rb
++++ b/tests/noop/spec/hosts/keystone/keystone_spec.rb
+@@ -220,6 +220,7 @@ describe manifest do
+      it 'should declare keystone::wsgi::apache class with 6 processes and 3 threads on 48 CPU system' do
+        facts[:processorcount] = 48
++       facts[:os_workers] = 8
+        should contain_class('keystone::wsgi::apache').with(
+          'threads' => '3',
+          'workers' => '6'
+@@ -228,6 +229,7 @@ describe manifest do
+      it 'should declare keystone::wsgi::apache class with 1 process and 3 threads on 1 CPU system' do
+        facts[:processorcount] = 1
++       facts[:os_workers] = 2
+        should contain_class('keystone::wsgi::apache').with(
+          'threads' => '3',
+          'workers' => '1'
+diff --git a/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb b/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb
+index f5f273b..efd2acb 100644
+--- a/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb
++++ b/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb
+@@ -208,9 +208,9 @@ describe manifest do
+     end
+     it 'should configure nova with the basics' do
+-      facts[:processorcount] = 10
+-      max_pool_size = Noop.hiera 'max_pool_size', [facts[:processorcount] * 5 + 0, 30 + 0].min
+-      max_overflow = Noop.hiera 'max_overflow', [facts[:processorcount] * 5 + 0, 60 + 0].min
++      facts[:os_workers] = 10
++      max_pool_size = Noop.hiera 'max_pool_size', [facts[:os_workers] * 5 + 0, 30 + 0].min
++      max_overflow = Noop.hiera 'max_overflow', [facts[:os_workers] * 5 + 0, 60 + 0].min
+       idle_timeout = Noop.hiera 'idle_timeout', '3600'
+       max_retries = Noop.hiera 'max_retries', '-1'
+diff --git a/tests/noop/spec/hosts/sahara/sahara_spec.rb b/tests/noop/spec/hosts/sahara/sahara_spec.rb
+index 2d15c23..2d07680 100644
+--- a/tests/noop/spec/hosts/sahara/sahara_spec.rb
++++ b/tests/noop/spec/hosts/sahara/sahara_spec.rb
+@@ -91,7 +91,7 @@ describe manifest do
+     enable = Noop.hiera_structure('sahara/enabled')
+     context 'if sahara is enabled', :if => enable do
+       it 'should declare sahara class correctly' do
+-        facts[:processorcount] = 10
++        facts[:os_workers] = 8
+         sahara_plugins = %w(ambari cdh mapr spark vanilla)
+         sahara_user = Noop.hiera_structure('sahara/user', 'sahara')
+         sahara_password = Noop.hiera_structure('sahara/user_password')
+@@ -101,8 +101,8 @@ describe manifest do
+         db_name = Noop.hiera_structure('sahara/db_name', 'sahara')
+         db_password = Noop.hiera_structure('sahara/db_password')
+         db_host = Noop.hiera_structure('sahara/db_host', database_vip)
+-        max_pool_size =[facts[:processorcount] * 5 + 0, 30 + 0].min
+-        max_overflow = [facts[:processorcount] * 5 + 0, 60 + 0].min
++        max_pool_size =[facts[:os_workers] * 5 + 0, 30 + 0].min
++        max_overflow = [facts[:os_workers] * 5 + 0, 60 + 0].min
+         max_retries  = '-1'
+         idle_timeout = '3600'
+         read_timeout = '60'
+-- 
+1.7.9.5
+