From 0d894a9e9627e05650b9b900e77ce0661cdc163c Mon Sep 17 00:00:00 2001 From: Alon Marx Date: Wed, 10 Aug 2016 14:58:43 +0300 Subject: [PATCH] Fix invalid services caused by enabled_backends When the value of enabled_backends in cinder.conf starts with a comma, splitting the string to backends does not filter the empty backend at the beginning and the result is an invalid cinder-volume service that fails to start. The same applies to enabled_backends ending with comma or having extra commas in the middle. Change-Id: Ib18d109d28d97e2d3681eff3784f08fd82bfee71 Closes-Bug: #1611353 --- cinder/backup/manager.py | 2 +- cinder/cmd/all.py | 2 +- cinder/cmd/volume.py | 2 +- cinder/tests/unit/test_cmd.py | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cinder/backup/manager.py b/cinder/backup/manager.py index 86b5243e6..a985b14f0 100644 --- a/cinder/backup/manager.py +++ b/cinder/backup/manager.py @@ -153,7 +153,7 @@ class BackupManager(manager.SchedulerDependentManager): def _setup_volume_drivers(self): if CONF.enabled_backends: - for backend in CONF.enabled_backends: + for backend in filter(None, CONF.enabled_backends): host = "%s@%s" % (CONF.host, backend) mgr = importutils.import_object(CONF.volume_manager, host=host, diff --git a/cinder/cmd/all.py b/cinder/cmd/all.py index 6baf6e3f6..bb7dbcbc0 100644 --- a/cinder/cmd/all.py +++ b/cinder/cmd/all.py @@ -89,7 +89,7 @@ def main(): # cinder-volume try: if CONF.enabled_backends: - for backend in CONF.enabled_backends: + for backend in filter(None, CONF.enabled_backends): CONF.register_opt(volume_cmd.host_opt, group=backend) backend_host = getattr(CONF, backend).backend_host host = "%s@%s" % (backend_host or CONF.host, backend) diff --git a/cinder/cmd/volume.py b/cinder/cmd/volume.py index 35925529c..06ed8cfae 100644 --- a/cinder/cmd/volume.py +++ b/cinder/cmd/volume.py @@ -84,7 +84,7 @@ def main(): service_started = False if CONF.enabled_backends: - for backend in CONF.enabled_backends: + for backend in filter(None, CONF.enabled_backends): CONF.register_opt(host_opt, group=backend) backend_host = getattr(CONF, backend).backend_host host = "%s@%s" % (backend_host or CONF.host, backend) diff --git a/cinder/tests/unit/test_cmd.py b/cinder/tests/unit/test_cmd.py index c95fa28ac..2c53b0649 100644 --- a/cinder/tests/unit/test_cmd.py +++ b/cinder/tests/unit/test_cmd.py @@ -175,7 +175,7 @@ class TestCinderAllCmd(test.TestCase): def test_main_with_backend(self, log_setup, get_logger, monkey_patch, process_launcher, wsgi_service, service_create, rpc_init): - CONF.set_override('enabled_backends', ['backend1']) + CONF.set_override('enabled_backends', ['', 'backend1', '']) CONF.set_override('host', 'host') launcher = process_launcher.return_value server = wsgi_service.return_value @@ -362,7 +362,7 @@ class TestCinderVolumeCmd(test.TestCase): @mock.patch('oslo_log.log.setup') def test_main_with_backends(self, log_setup, monkey_patch, service_create, get_launcher): - backends = ['backend1', 'backend2'] + backends = ['', 'backend1', 'backend2', ''] CONF.set_override('enabled_backends', backends) CONF.set_override('host', 'host') launcher = get_launcher.return_value @@ -381,7 +381,7 @@ class TestCinderVolumeCmd(test.TestCase): service_name='backend2', coordination=True, cluster=None) service_create.assert_has_calls([c1, c2]) - self.assertEqual(len(backends), launcher.launch_service.call_count) + self.assertEqual(2, launcher.launch_service.call_count) launcher.wait.assert_called_once_with()