From 1dd15025bfd52af9c31cd281f92d743b9ca0eeb8 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Thu, 4 Oct 2018 11:54:06 -0500 Subject: [PATCH] ceph-volume: fix strategy comparison in 'lvm batch' This also fixes some small json reporting issues with the filestore MixedType strategy Signed-off-by: Andrew Schoen --- .../ceph_volume/devices/lvm/batch.py | 12 ++++++------ .../devices/lvm/strategies/bluestore.py | 8 ++++++++ .../devices/lvm/strategies/filestore.py | 18 +++++++++++++----- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/ceph-volume/ceph_volume/devices/lvm/batch.py b/src/ceph-volume/ceph_volume/devices/lvm/batch.py index 84580a562538e..113c40149ceee 100644 --- a/src/ceph-volume/ceph_volume/devices/lvm/batch.py +++ b/src/ceph-volume/ceph_volume/devices/lvm/batch.py @@ -167,12 +167,12 @@ class Batch(object): raise SystemExit(0) else: new_strategy = get_strategy(args, unused_devices) - if type(strategy) != type(new_strategy): - if not args.report: - mlogger.error("aborting because strategy changed from %s to %s after filtering" % (strategy, new_strategy)) - raise SystemExit(1) - else: - strategy = new_strategy + if strategy != new_strategy: + if args.report: + mlogger.info("Ignoring devices already used by ceph: %s" % ",".join(used_devices)) + mlogger.error("aborting because strategy changed from %s to %s after filtering" % (strategy.type(), new_strategy.type())) + raise SystemExit(1) + return strategy(unused_devices, args) @decorators.needs_root diff --git a/src/ceph-volume/ceph_volume/devices/lvm/strategies/bluestore.py b/src/ceph-volume/ceph_volume/devices/lvm/strategies/bluestore.py index 2cf401ec5c023..1bdb713dd53f0 100644 --- a/src/ceph-volume/ceph_volume/devices/lvm/strategies/bluestore.py +++ b/src/ceph-volume/ceph_volume/devices/lvm/strategies/bluestore.py @@ -24,6 +24,10 @@ class SingleType(object): self.validate() self.compute() + @staticmethod + def type(): + return "filestore.MixedType" + @property def total_osds(self): if self.hdds: @@ -144,6 +148,10 @@ class MixedType(object): self.validate() self.compute() + @staticmethod + def type(): + return "bluestore.MixedType" + def report_json(self): print(json.dumps(self.computed, indent=4, sort_keys=True)) diff --git a/src/ceph-volume/ceph_volume/devices/lvm/strategies/filestore.py b/src/ceph-volume/ceph_volume/devices/lvm/strategies/filestore.py index 8751150aeb83f..72a379a6b24fd 100644 --- a/src/ceph-volume/ceph_volume/devices/lvm/strategies/filestore.py +++ b/src/ceph-volume/ceph_volume/devices/lvm/strategies/filestore.py @@ -36,6 +36,10 @@ class SingleType(object): self.validate() self.compute() + @staticmethod + def type(): + return "filestore.SingleType" + @property def total_osds(self): if self.hdds: @@ -186,6 +190,10 @@ class MixedType(object): self.validate() self.compute() + @staticmethod + def type(): + return "filestore.MixedType" + def report_json(self): print(json.dumps(self.computed, indent=4, sort_keys=True)) @@ -304,11 +312,11 @@ class MixedType(object): # there isn't a common vg, so a new one must be created with all # the blank SSDs self.computed['vg'] = { - 'devices': self.blank_ssds, + 'devices': ", ".join([ssd.abspath for ssd in self.blank_ssds]), 'parts': self.journals_needed, 'percentages': self.vg_extents['percentages'], - 'sizes': self.journal_size.b, - 'size': int(self.total_blank_ssd_size.b), + 'sizes': self.journal_size.b.as_int(), + 'size': self.total_blank_ssd_size.b.as_int(), 'human_readable_sizes': str(self.journal_size), 'human_readable_size': str(self.total_available_journal_space), } @@ -322,11 +330,11 @@ class MixedType(object): data_size = device_size / self.osds_per_device osd = {'data': {}, 'journal': {}, 'used_by_ceph': device.used_by_ceph} osd['data']['path'] = device.path - osd['data']['size'] = data_size.b + osd['data']['size'] = data_size.b.as_int() osd['data']['percentage'] = 100 / self.osds_per_device osd['data']['human_readable_size'] = str(data_size) osd['journal']['path'] = 'vg: %s' % vg_name - osd['journal']['size'] = self.journal_size.b + osd['journal']['size'] = self.journal_size.b.as_int() osd['journal']['percentage'] = int(self.journal_size.gb * 100 / vg_free) osd['journal']['human_readable_size'] = str(self.journal_size) osds.append(osd) -- 2.39.5