We identify which drivespec legacy OSDs belong(ed) to by metadata they
report to the mgr. Modern cephadm does this instead by looking at the
'service' property in the unit.meta file. Having cephadm query the osd
metadata is expensive for large clusters, so let's avoid this and rely
entirely on unit.meta.
Worst case, some upgraded clusters will show OSDs as service 'osd' instead
of service 'osd.whatever' for whatever drivespec created them.
Signed-off-by: Sage Weil <sage@newdream.net>
(cherry picked from commit
9c2b8f557ef374212b5d11464b04f443cb8d84e6)
Conflicts:
src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/serve.py
Signed-off-by: Sebastian Wagner <sewagner@redhat.com>
for h, dm in self.cache.get_daemons_with_volatile_status():
osds_to_remove = []
for name, dd in dm.items():
- if dd.daemon_type == 'osd' and (dd.service_name() == service_name or not dd.osdspec_affinity):
+ if dd.daemon_type == 'osd' and dd.service_name() == service_name:
osds_to_remove.append(str(dd.daemon_id))
if osds_to_remove:
osds_msg[h] = osds_to_remove
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
- if sd.daemon_type == 'osd':
- sd.osdspec_affinity = self.mgr.osd_service.get_osdspec_affinity(sd.daemon_id)
if 'state' in d:
sd.status_desc = d['state']
sd.status = {
error_ok=True)
return out, err, code
- def get_osdspec_affinity(self, osd_id: str) -> str:
- return self.mgr.get('osd_metadata').get(osd_id, {}).get('osdspec_affinity', '')
-
def post_remove(self, daemon: DaemonDescription, is_failed_deploy: bool) -> None:
# Do not remove the osd.N keyring, if we failed to deploy the OSD, because
# we cannot recover from it. The OSD keys are created by ceph-volume and not by
with mock.patch("cephadm.module.CephadmOrchestrator.get_ceph_option", get_ceph_option),\
mock.patch("cephadm.services.osd.RemoveUtil._run_mon_cmd"), \
mock.patch("cephadm.module.CephadmOrchestrator.get_osdmap"), \
- mock.patch("cephadm.services.osd.OSDService.get_osdspec_affinity", return_value='test_spec'), \
mock.patch("cephadm.module.CephadmOrchestrator.remote"):
m = CephadmOrchestrator.__new__(CephadmOrchestrator)