Add multiple engine workers

Implement murano-engine workers for scalability.

Depends-On: I1de509b061bd5d3fe0cd5e27673c54a13209a56a

Change-Id: I3cbc9dff9cc0e476a897af3f1931ff2a61eb72cc
Implements: blueprint multiple-engine-workers
This commit is contained in:
Hidekazu Nakamura 2016-01-18 11:22:21 +09:00
parent 4f81772d97
commit 205c94f761
6 changed files with 75 additions and 3 deletions

View File

@ -158,6 +158,11 @@ function configure_murano {
# Configure Murano API URL
iniset $MURANO_CONF_FILE murano url "http://127.0.0.1:8082"
# Configure the number of engine workers
if [[ -n "$MURANO_ENGINE_WORKERS" ]]; then
iniset $MURANO_CONF_FILE engine workers $MURANO_ENGINE_WORKERS
fi
}
# install_murano_apps() - Install Murano apps from repository murano-apps, if required

View File

@ -28,6 +28,7 @@ else:
import sys
from oslo_concurrency import processutils
from oslo_log import log as logging
from oslo_service import service
@ -49,9 +50,11 @@ def main():
config.parse_args()
logging.setup(CONF, 'murano')
launcher = service.ServiceLauncher(CONF)
launcher.launch_service(engine.EngineService())
workers = CONF.engine.workers
if not workers:
workers = processutils.get_worker_count()
launcher = service.launch(CONF,
engine.EngineService(), workers=workers)
launcher.wait()
except RuntimeError as e:
sys.stderr.write("ERROR: %s\n" % e)

View File

@ -205,6 +205,8 @@ engine_opts = [
cfg.IntOpt('agent_timeout', default=3600,
help=_('Time for waiting for a response from murano agent '
'during the deployment')),
cfg.IntOpt('workers',
help=_('Number of workers'))
]
# TODO(sjmc7): move into engine opts?

View File

View File

@ -0,0 +1,56 @@
# Copyright (c) 2016 NEC Corporation. All rights reserved.
#
# 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.
import mock
from oslo_concurrency import processutils
from oslo_config import cfg
from oslo_log import log as logging
from murano.cmd import engine
from murano.common import config
from murano.tests.unit import base
CONF = cfg.CONF
class TestEngineWorkers(base.MuranoTestCase):
def setUp(self):
super(TestEngineWorkers, self).setUp()
@mock.patch.object(config, 'parse_args')
@mock.patch.object(logging, 'setup')
@mock.patch('oslo_service.service.launch')
def test_workers_default(self, launch, setup, parse_args):
engine.main()
launch.assert_called_once_with(mock.ANY, mock.ANY,
workers=processutils.get_worker_count())
@mock.patch.object(config, 'parse_args')
@mock.patch.object(logging, 'setup')
@mock.patch('oslo_service.service.launch')
def test_workers_good_setting(self, launch, setup, parse_args):
self.override_config("workers", 8, "engine")
engine.main()
launch.assert_called_once_with(mock.ANY, mock.ANY, workers=8)
@mock.patch.object(config, 'parse_args')
@mock.patch.object(logging, 'setup')
@mock.patch('oslo_service.service.launch')
def test_workers_zero_setting(self, launch, setup, parse_args):
self.override_config("workers", 0, "engine")
engine.main()
launch.assert_called_once_with(mock.ANY, mock.ANY,
workers=processutils.get_worker_count())

View File

@ -0,0 +1,6 @@
---
features:
- Add multiple engine workers
issues:
- Enabling multiple workers might break workflows under BSD and Windows systems