From 84ca3eda9f50f1da43b8298825e19de252a50fcb Mon Sep 17 00:00:00 2001 From: Jan Fajerski Date: Mon, 26 Nov 2018 14:03:56 +0100 Subject: [PATCH] ceph-volume: filestore strategy use strategy class hierarchy Signed-off-by: Jan Fajerski (cherry picked from commit 34df12ea6a8686f161b4bdfde92e557743f59cf4) --- .../devices/lvm/strategies/filestore.py | 64 +++---------------- 1 file changed, 8 insertions(+), 56 deletions(-) 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 b94cc6ea38d54..c01e837213831 100644 --- a/src/ceph-volume/ceph_volume/devices/lvm/strategies/filestore.py +++ b/src/ceph-volume/ceph_volume/devices/lvm/strategies/filestore.py @@ -1,8 +1,9 @@ from __future__ import print_function -import json from ceph_volume.util import disk, prepare from ceph_volume.api import lvm from . import validators +from .strategies import Strategy +from .strategies import MixedStrategy from ceph_volume.devices.lvm.create import Create from ceph_volume.devices.lvm.prepare import Prepare from ceph_volume.util import templates @@ -20,40 +21,21 @@ def get_journal_size(args): return prepare.get_journal_size(lv_format=False) -class SingleType(object): +class SingleType(Strategy): """ Support for all SSDs, or all HDDs, data and journal LVs will be colocated in the same device """ def __init__(self, devices, args): - self.args = args - self.osds_per_device = args.osds_per_device - self.devices = devices - self.hdds = [device for device in devices if device.sys_api['rotational'] == '1'] - self.ssds = [device for device in devices if device.sys_api['rotational'] == '0'] - self.computed = {'osds': [], 'vgs': [], 'filtered_devices': args.filtered_devices} + super(SingleType, self).__init__(devices, args) self.journal_size = get_journal_size(args) - if self.devices: - self.validate() - self.compute() - else: - self.computed["changed"] = False + self.validate_compute() @staticmethod def type(): return "filestore.SingleType" - @property - def total_osds(self): - if self.hdds: - return len(self.hdds) * self.osds_per_device - else: - return len(self.ssds) * self.osds_per_device - - def report_json(self): - print(json.dumps(self.computed, indent=4, sort_keys=True)) - def report_pretty(self): string = "" if self.args.filtered_devices: @@ -176,7 +158,7 @@ class SingleType(object): Create(command).main() -class MixedType(object): +class MixedType(MixedStrategy): """ Supports HDDs with SSDs, journals will be placed on SSDs, while HDDs will be used fully for data. @@ -186,36 +168,17 @@ class MixedType(object): """ def __init__(self, devices, args): - self.args = args - self.osds_per_device = args.osds_per_device - self.devices = devices - self.hdds = [device for device in devices if device.sys_api['rotational'] == '1'] - self.ssds = [device for device in devices if device.sys_api['rotational'] == '0'] - self.computed = {'osds': [], 'vg': None, 'filtered_devices': args.filtered_devices} + super(MixedType, self).__init__(devices, args) self.blank_ssds = [] self.journals_needed = len(self.hdds) * self.osds_per_device self.journal_size = get_journal_size(args) self.system_vgs = lvm.VolumeGroups() - if self.devices: - self.validate() - self.compute() - else: - self.computed["changed"] = False + self.validate_compute() @staticmethod def type(): return "filestore.MixedType" - def report_json(self): - print(json.dumps(self.computed, indent=4, sort_keys=True)) - - @property - def total_osds(self): - if self.hdds: - return len(self.hdds) * self.osds_per_device - else: - return len(self.ssds) * self.osds_per_device - def report_pretty(self): string = "" if self.args.filtered_devices: @@ -252,17 +215,6 @@ class MixedType(object): print(string) - def get_common_vg(self): - # find all the vgs associated with the current device - for ssd in self.ssds: - for pv in ssd.pvs_api: - vg = self.system_vgs.get(vg_name=pv.vg_name) - if not vg: - continue - # this should give us just one VG, it would've been caught by - # the validator otherwise - return vg - def validate(self): """ Ensure that the minimum requirements for this type of scenario is -- 2.39.5