Merge "Change and move the workers options to corresponding service section"
This commit is contained in:
commit
a92e9c4026
@ -27,7 +27,6 @@ from ceilometer.api import hooks
|
|||||||
from ceilometer.api import middleware
|
from ceilometer.api import middleware
|
||||||
from ceilometer.i18n import _
|
from ceilometer.i18n import _
|
||||||
from ceilometer.i18n import _LW
|
from ceilometer.i18n import _LW
|
||||||
from ceilometer import service
|
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
@ -38,8 +37,6 @@ OPTS = [
|
|||||||
default="api_paste.ini",
|
default="api_paste.ini",
|
||||||
help="Configuration file for WSGI definition of API."
|
help="Configuration file for WSGI definition of API."
|
||||||
),
|
),
|
||||||
cfg.IntOpt('api_workers', default=1,
|
|
||||||
help='Number of workers for Ceilometer API server.'),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
API_OPTS = [
|
API_OPTS = [
|
||||||
@ -78,7 +75,7 @@ def setup_app(pecan_config=None, extra_hooks=None):
|
|||||||
|
|
||||||
# NOTE(sileht): pecan debug won't work in multi-process environment
|
# NOTE(sileht): pecan debug won't work in multi-process environment
|
||||||
pecan_debug = CONF.api.pecan_debug
|
pecan_debug = CONF.api.pecan_debug
|
||||||
if service.get_workers('api') != 1 and pecan_debug:
|
if CONF.api.workers and CONF.api.workers != 1 and pecan_debug:
|
||||||
pecan_debug = False
|
pecan_debug = False
|
||||||
LOG.warning(_LW('pecan_debug cannot be enabled, if workers is > 1, '
|
LOG.warning(_LW('pecan_debug cannot be enabled, if workers is > 1, '
|
||||||
'the value is overrided with False'))
|
'the value is overrided with False'))
|
||||||
@ -144,9 +141,8 @@ def build_server():
|
|||||||
LOG.info(_("serving on http://%(host)s:%(port)s") % (
|
LOG.info(_("serving on http://%(host)s:%(port)s") % (
|
||||||
{'host': host, 'port': port}))
|
{'host': host, 'port': port}))
|
||||||
|
|
||||||
workers = service.get_workers('api')
|
|
||||||
serving.run_simple(cfg.CONF.api.host, cfg.CONF.api.port,
|
serving.run_simple(cfg.CONF.api.host, cfg.CONF.api.port,
|
||||||
app, processes=workers)
|
app, processes=CONF.api.workers)
|
||||||
|
|
||||||
|
|
||||||
def app_factory(global_config, **local_conf):
|
def app_factory(global_config, **local_conf):
|
||||||
|
@ -26,4 +26,4 @@ CONF = cfg.CONF
|
|||||||
def main():
|
def main():
|
||||||
service.prepare_service()
|
service.prepare_service()
|
||||||
os_service.launch(CONF, notification.NotificationService(),
|
os_service.launch(CONF, notification.NotificationService(),
|
||||||
workers=service.get_workers('notification')).wait()
|
workers=CONF.notification.workers).wait()
|
||||||
|
@ -26,4 +26,4 @@ CONF = cfg.CONF
|
|||||||
def main():
|
def main():
|
||||||
service.prepare_service()
|
service.prepare_service()
|
||||||
os_service.launch(CONF, collector.CollectorService(),
|
os_service.launch(CONF, collector.CollectorService(),
|
||||||
workers=service.get_workers('collector')).wait()
|
workers=CONF.collector.workers).wait()
|
||||||
|
@ -87,10 +87,13 @@ def list_opts():
|
|||||||
ceilometer.api.controllers.v2.alarms.ALARM_API_OPTS)),
|
ceilometer.api.controllers.v2.alarms.ALARM_API_OPTS)),
|
||||||
('api',
|
('api',
|
||||||
itertools.chain(ceilometer.api.OPTS,
|
itertools.chain(ceilometer.api.OPTS,
|
||||||
ceilometer.api.app.API_OPTS,)),
|
ceilometer.api.app.API_OPTS,
|
||||||
|
[ceilometer.service.API_OPT])),
|
||||||
# deprecated path, new one is 'polling'
|
# deprecated path, new one is 'polling'
|
||||||
('central', ceilometer.agent.manager.OPTS),
|
('central', ceilometer.agent.manager.OPTS),
|
||||||
('collector', ceilometer.collector.OPTS),
|
('collector',
|
||||||
|
itertools.chain(ceilometer.collector.OPTS,
|
||||||
|
[ceilometer.service.COLL_OPT])),
|
||||||
('compute', ceilometer.compute.discovery.OPTS),
|
('compute', ceilometer.compute.discovery.OPTS),
|
||||||
('coordination', ceilometer.coordination.OPTS),
|
('coordination', ceilometer.coordination.OPTS),
|
||||||
('database', ceilometer.storage.OPTS),
|
('database', ceilometer.storage.OPTS),
|
||||||
@ -100,7 +103,9 @@ def list_opts():
|
|||||||
('ipmi',
|
('ipmi',
|
||||||
itertools.chain(ceilometer.ipmi.platform.intel_node_manager.OPTS,
|
itertools.chain(ceilometer.ipmi.platform.intel_node_manager.OPTS,
|
||||||
ceilometer.ipmi.pollsters.OPTS)),
|
ceilometer.ipmi.pollsters.OPTS)),
|
||||||
('notification', ceilometer.notification.OPTS),
|
('notification',
|
||||||
|
itertools.chain(ceilometer.notification.OPTS,
|
||||||
|
[ceilometer.service.NOTI_OPT])),
|
||||||
('polling', ceilometer.agent.manager.OPTS),
|
('polling', ceilometer.agent.manager.OPTS),
|
||||||
('publisher', ceilometer.publisher.utils.OPTS),
|
('publisher', ceilometer.publisher.utils.OPTS),
|
||||||
('publisher_notifier', ceilometer.publisher.messaging.NOTIFIER_OPTS),
|
('publisher_notifier', ceilometer.publisher.messaging.NOTIFIER_OPTS),
|
||||||
|
@ -22,9 +22,7 @@ from oslo_config import cfg
|
|||||||
import oslo_i18n
|
import oslo_i18n
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
|
|
||||||
from ceilometer.i18n import _
|
|
||||||
from ceilometer import messaging
|
from ceilometer import messaging
|
||||||
from ceilometer import utils
|
|
||||||
|
|
||||||
|
|
||||||
OPTS = [
|
OPTS = [
|
||||||
@ -33,14 +31,6 @@ OPTS = [
|
|||||||
help='Name of this node, which must be valid in an AMQP '
|
help='Name of this node, which must be valid in an AMQP '
|
||||||
'key. Can be an opaque identifier. For ZeroMQ only, must '
|
'key. Can be an opaque identifier. For ZeroMQ only, must '
|
||||||
'be a valid host name, FQDN, or IP address.'),
|
'be a valid host name, FQDN, or IP address.'),
|
||||||
cfg.IntOpt('collector_workers',
|
|
||||||
default=1,
|
|
||||||
help='Number of workers for collector service. A single '
|
|
||||||
'collector is enabled by default.'),
|
|
||||||
cfg.IntOpt('notification_workers',
|
|
||||||
default=1,
|
|
||||||
help='Number of workers for notification service. A single '
|
|
||||||
'notification agent is enabled by default.'),
|
|
||||||
cfg.IntOpt('http_timeout',
|
cfg.IntOpt('http_timeout',
|
||||||
default=600,
|
default=600,
|
||||||
help='Timeout seconds for HTTP requests. Set it to None to '
|
help='Timeout seconds for HTTP requests. Set it to None to '
|
||||||
@ -87,26 +77,39 @@ CLI_OPTS = [
|
|||||||
help='Disables X.509 certificate validation when an '
|
help='Disables X.509 certificate validation when an '
|
||||||
'SSL connection to Identity Service is established.'),
|
'SSL connection to Identity Service is established.'),
|
||||||
]
|
]
|
||||||
|
|
||||||
cfg.CONF.register_cli_opts(CLI_OPTS, group="service_credentials")
|
cfg.CONF.register_cli_opts(CLI_OPTS, group="service_credentials")
|
||||||
|
|
||||||
|
API_OPT = cfg.IntOpt('workers',
|
||||||
|
default=1,
|
||||||
|
min=1,
|
||||||
|
deprecated_group='DEFAULT',
|
||||||
|
deprecated_name='api_workers',
|
||||||
|
help='Number of workers for api, default value is 1.')
|
||||||
|
cfg.CONF.register_opt(API_OPT, 'api')
|
||||||
|
|
||||||
|
NOTI_OPT = cfg.IntOpt('workers',
|
||||||
|
default=1,
|
||||||
|
min=1,
|
||||||
|
deprecated_group='DEFAULT',
|
||||||
|
deprecated_name='notification_workers',
|
||||||
|
help='Number of workers for notification service, '
|
||||||
|
'default value is 1.')
|
||||||
|
cfg.CONF.register_opt(NOTI_OPT, 'notification')
|
||||||
|
|
||||||
|
COLL_OPT = cfg.IntOpt('workers',
|
||||||
|
default=1,
|
||||||
|
min=1,
|
||||||
|
deprecated_group='DEFAULT',
|
||||||
|
deprecated_name='collector_workers',
|
||||||
|
help='Number of workers for collector service. '
|
||||||
|
'default value is 1.')
|
||||||
|
cfg.CONF.register_opt(COLL_OPT, 'collector')
|
||||||
|
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class WorkerException(Exception):
|
|
||||||
"""Exception for errors relating to service workers."""
|
|
||||||
|
|
||||||
|
|
||||||
def get_workers(name):
|
|
||||||
workers = (cfg.CONF.get('%s_workers' % name) or
|
|
||||||
utils.cpu_count())
|
|
||||||
if workers and workers < 1:
|
|
||||||
msg = (_("%(worker_name)s value of %(workers)s is invalid, "
|
|
||||||
"must be greater than 0") %
|
|
||||||
{'worker_name': '%s_workers' % name, 'workers': str(workers)})
|
|
||||||
raise WorkerException(msg)
|
|
||||||
return workers
|
|
||||||
|
|
||||||
|
|
||||||
def prepare_service(argv=None):
|
def prepare_service(argv=None):
|
||||||
oslo_i18n.enable_lazy()
|
oslo_i18n.enable_lazy()
|
||||||
log.register_options(cfg.CONF)
|
log.register_options(cfg.CONF)
|
||||||
|
@ -45,7 +45,7 @@ class TestApp(base.BaseTestCase):
|
|||||||
self.CONF.set_override('debug', g_debug)
|
self.CONF.set_override('debug', g_debug)
|
||||||
if p_debug is not None:
|
if p_debug is not None:
|
||||||
self.CONF.set_override('pecan_debug', p_debug, group='api')
|
self.CONF.set_override('pecan_debug', p_debug, group='api')
|
||||||
self.CONF.set_override('api_workers', workers)
|
self.CONF.set_override('workers', workers, group='api')
|
||||||
app.setup_app()
|
app.setup_app()
|
||||||
args, kwargs = mocked.call_args
|
args, kwargs = mocked.call_args
|
||||||
self.assertEqual(expected, kwargs.get('debug'))
|
self.assertEqual(expected, kwargs.get('debug'))
|
||||||
|
@ -24,7 +24,6 @@ import copy
|
|||||||
import datetime
|
import datetime
|
||||||
import decimal
|
import decimal
|
||||||
import hashlib
|
import hashlib
|
||||||
import multiprocessing
|
|
||||||
import struct
|
import struct
|
||||||
|
|
||||||
from oslo_concurrency import processutils
|
from oslo_concurrency import processutils
|
||||||
@ -202,13 +201,6 @@ def update_nested(original_dict, updates):
|
|||||||
return dict_to_update
|
return dict_to_update
|
||||||
|
|
||||||
|
|
||||||
def cpu_count():
|
|
||||||
try:
|
|
||||||
return multiprocessing.cpu_count() or 1
|
|
||||||
except NotImplementedError:
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
def uniq(dupes, attrs):
|
def uniq(dupes, attrs):
|
||||||
"""Exclude elements of dupes with a duplicated set of attribute values."""
|
"""Exclude elements of dupes with a duplicated set of attribute values."""
|
||||||
key = lambda d: '/'.join([getattr(d, a) or '' for a in attrs])
|
key = lambda d: '/'.join([getattr(d, a) or '' for a in attrs])
|
||||||
|
Loading…
Reference in New Issue
Block a user