From 1eb5cf7051e4c1a146037bfe93eee853dec04e0c Mon Sep 17 00:00:00 2001 From: Sebastian Wagner Date: Mon, 5 Jul 2021 10:34:56 +0200 Subject: [PATCH] mgr/cephadm: avoid saving daemons of unknown type Fixes: https://tracker.ceph.com/issues/51176 Signed-off-by: Sebastian Wagner (cherry picked from commit 8e15ed7263f84ad955c0172d62420dba75e70d4e) --- src/pybind/mgr/cephadm/serve.py | 7 ++++++- src/pybind/mgr/cephadm/tests/test_cephadm.py | 13 ++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/pybind/mgr/cephadm/serve.py b/src/pybind/mgr/cephadm/serve.py index ff14caab354ba..275e541828dfc 100644 --- a/src/pybind/mgr/cephadm/serve.py +++ b/src/pybind/mgr/cephadm/serve.py @@ -405,6 +405,10 @@ class CephadmServe: if v: setattr(sd, k, str_to_datetime(d[k])) sd.daemon_type = d['name'].split('.')[0] + if sd.daemon_type not in ServiceSpec.KNOWN_SERVICE_TYPES: + logger.warning(f"Found unknown service type {sd.daemon_type} on host {host}") + continue + sd.daemon_id = '.'.join(d['name'].split('.')[1:]) sd.hostname = host sd.container_id = d.get('container_id') @@ -423,7 +427,8 @@ class CephadmServe: sd.ports = d.get('ports') sd.ip = d.get('ip') sd.rank = int(d['rank']) if d.get('rank') is not None else None - sd.rank_generation = int(d['rank_generation']) if d.get('rank_generation') is not None else None + sd.rank_generation = int(d['rank_generation']) if d.get( + 'rank_generation') is not None else None if sd.daemon_type == 'osd': sd.osdspec_affinity = self.mgr.osd_service.get_osdspec_affinity(sd.daemon_id) if 'state' in d: diff --git a/src/pybind/mgr/cephadm/tests/test_cephadm.py b/src/pybind/mgr/cephadm/tests/test_cephadm.py index 9848c0516c0f2..4fc510a4c416c 100644 --- a/src/pybind/mgr/cephadm/tests/test_cephadm.py +++ b/src/pybind/mgr/cephadm/tests/test_cephadm.py @@ -234,15 +234,22 @@ class TestCephadm(object): container_id='container_id', version='version', state='running', - ) + ), + dict( + name='something.foo.bar', + style='cephadm', + fsid='fsid', + ), + ]) )) def test_list_daemons(self, cephadm_module: CephadmOrchestrator): cephadm_module.service_cache_timeout = 10 with with_host(cephadm_module, 'test'): CephadmServe(cephadm_module)._refresh_host_daemons('test') - c = cephadm_module.list_daemons() - assert wait(cephadm_module, c)[0].name() == 'rgw.myrgw.foobar' + dds = wait(cephadm_module, cephadm_module.list_daemons()) + assert len(dds) == 1 + assert dds[0].name() == 'rgw.myrgw.foobar' @mock.patch("cephadm.serve.CephadmServe._run_cephadm", _run_cephadm('[]')) def test_daemon_action(self, cephadm_module: CephadmOrchestrator): -- 2.39.5