]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Revert "Revert "Set default of api_workers to number of CPUs""
authorarmando-migliaccio <armamig@gmail.com>
Fri, 12 Jun 2015 15:58:05 +0000 (08:58 -0700)
committerArmando Migliaccio <armamig@gmail.com>
Fri, 12 Jun 2015 16:43:27 +0000 (16:43 +0000)
This reverts commit 12a564cf03e612dda36df26df8d28dfc75f1af6e.

We should re-enable this feature on a controlled basis so that we can
flush out any outstanding issue we may have.

Related-bug: #1432189

Change-Id: I2cfd93fdb032b461022b729347390ff8636ccdeb

etc/neutron.conf
neutron/service.py
neutron/tests/functional/test_service.py [new file with mode: 0644]

index 7a11b939fb51271050c545b45f2fb38b66f04894..f5a6da62767e0faea19a194e1c682f08ff19d63c 100755 (executable)
 # ========== end of items for VLAN trunking networks ==========
 
 # =========== WSGI parameters related to the API server ==============
-# Number of separate worker processes to spawn.  The default, 0, runs the
+# Number of separate worker processes to spawn.  A value of 0 runs the
 # worker thread in the current process.  Greater than 0 launches that number of
-# child processes as workers.  The parent process manages them.
-# api_workers = 0
+# child processes as workers.  The parent process manages them.  If not
+# specified, the default value is equal to the number of CPUs available to
+# achieve best performance.
+# api_workers = <number of CPUs>
 
 # Number of separate RPC worker processes to spawn.  The default, 0, runs the
 # worker thread in the current process.  Greater than 0 launches that number of
index e27dd5cdc2ff493d8d81e4d1501e1de58770591d..76b0fd90d2ee67d0195c2f3988a26a1c650cbbcc 100644 (file)
@@ -18,6 +18,7 @@ import logging as std_logging
 import os
 import random
 
+from oslo_concurrency import processutils
 from oslo_config import cfg
 from oslo_log import log as logging
 from oslo_messaging import server as rpc_server
@@ -40,8 +41,9 @@ service_opts = [
                default=40,
                help=_('Seconds between running periodic tasks')),
     cfg.IntOpt('api_workers',
-               default=0,
-               help=_('Number of separate API worker processes for service')),
+               help=_('Number of separate API worker processes for service. '
+                      'If not specified, the default is equal to the number '
+                      'of CPUs available for best performance.')),
     cfg.IntOpt('rpc_workers',
                default=0,
                help=_('Number of RPC worker processes for service')),
@@ -168,6 +170,13 @@ def serve_rpc():
                               'details.'))
 
 
+def _get_api_workers():
+    workers = cfg.CONF.api_workers
+    if workers is None:
+        workers = processutils.get_worker_count()
+    return workers
+
+
 def _run_wsgi(app_name):
     app = config.load_paste_app(app_name)
     if not app:
@@ -175,7 +184,7 @@ def _run_wsgi(app_name):
         return
     server = wsgi.Server("Neutron")
     server.start(app, cfg.CONF.bind_port, cfg.CONF.bind_host,
-                 workers=cfg.CONF.api_workers)
+                 workers=_get_api_workers())
     # Dump all option values here after all options are parsed
     cfg.CONF.log_opt_values(LOG, std_logging.DEBUG)
     LOG.info(_LI("Neutron service started, listening on %(host)s:%(port)s"),
diff --git a/neutron/tests/functional/test_service.py b/neutron/tests/functional/test_service.py
new file mode 100644 (file)
index 0000000..d3bed3e
--- /dev/null
@@ -0,0 +1,31 @@
+# Copyright 2014 Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from oslo_concurrency import processutils
+from oslo_config import cfg
+
+from neutron import service
+from neutron.tests import base
+
+
+class TestService(base.BaseTestCase):
+
+    def test_api_workers_default(self):
+        self.assertEqual(processutils.get_worker_count(),
+                         service._get_api_workers())
+
+    def test_api_workers_from_config(self):
+        cfg.CONF.set_override('api_workers', 1234)
+        self.assertEqual(1234,
+                         service._get_api_workers())