summaryrefslogtreecommitdiffstats
path: root/src/pybind/mgr/cephadm/services/osd.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/pybind/mgr/cephadm/services/osd.py')
-rw-r--r--src/pybind/mgr/cephadm/services/osd.py22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/pybind/mgr/cephadm/services/osd.py b/src/pybind/mgr/cephadm/services/osd.py
index bfecc5723..75b3fc58c 100644
--- a/src/pybind/mgr/cephadm/services/osd.py
+++ b/src/pybind/mgr/cephadm/services/osd.py
@@ -319,11 +319,16 @@ class OSDService(CephService):
logger.exception('Cannot decode JSON: \'%s\'' % ' '.join(out))
concat_out = {}
notes = []
- if osdspec.data_devices is not None and osdspec.data_devices.limit and len(concat_out) < osdspec.data_devices.limit:
+ if (
+ osdspec.data_devices is not None
+ and osdspec.data_devices.limit
+ and (len(concat_out) + ds.existing_daemons) < osdspec.data_devices.limit
+ ):
found = len(concat_out)
limit = osdspec.data_devices.limit
notes.append(
- f'NOTE: Did not find enough disks matching filter on host {host} to reach data device limit (Found: {found} | Limit: {limit})')
+ f'NOTE: Did not find enough disks matching filter on host {host} to reach data device limit\n'
+ f'(New Devices: {found} | Existing Matching Daemons: {ds.existing_daemons} | Limit: {limit})')
ret_all.append({'data': concat_out,
'osdspec': osdspec.service_id,
'host': host,
@@ -664,6 +669,7 @@ class OSD:
return None
self.started = True
self.stopped = False
+ self.original_weight = self.rm_util.get_weight(self)
def start_draining(self) -> bool:
if self.stopped:
@@ -672,7 +678,6 @@ class OSD:
if self.replace:
self.rm_util.set_osd_flag([self], 'out')
else:
- self.original_weight = self.rm_util.get_weight(self)
self.rm_util.reweight_osd(self, 0.0)
self.drain_started_at = datetime.utcnow()
self.draining = True
@@ -761,6 +766,7 @@ class OSD:
out['force'] = self.force
out['zap'] = self.zap
out['hostname'] = self.hostname # type: ignore
+ out['original_weight'] = self.original_weight
for k in ['drain_started_at', 'drain_stopped_at', 'drain_done_at', 'process_started_at']:
if getattr(self, k):
@@ -953,6 +959,16 @@ class OSDRemovalQueue(object):
self.osds.add(osd)
osd.start()
+ def rm_by_osd_id(self, osd_id: int) -> None:
+ osd: Optional["OSD"] = None
+ for o in self.osds:
+ if o.osd_id == osd_id:
+ osd = o
+ if not osd:
+ logger.debug(f"Could not find osd with id {osd_id} in queue.")
+ raise KeyError(f'No osd with id {osd_id} in removal queue')
+ self.rm(osd)
+
def rm(self, osd: "OSD") -> None:
if not osd.exists:
raise NotFoundError()