From: Sage Weil Date: Fri, 19 Nov 2021 20:15:18 +0000 (-0500) Subject: ceph-volume: add raw support for db/wal for list and activate X-Git-Tag: v16.2.11~103^2~120^2~3 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=8242ec16e5dd0bdabbb4bb6f39dbc0fa1e515713;p=ceph.git ceph-volume: add raw support for db/wal for list and activate Currently 'prepare' doesn't support db/wal, but we want it in list and activate because 'ceph-volume activate ...' tries raw before lvm. Note that I'm not sure we really want to accept --block.db and --block.wal here at all. Fixes: 3d7ceec684b0ac5b83fae4c397b134236fac485e Signed-off-by: Sage Weil (cherry picked from commit f0a0c70d5c8c150abd0590ea23be83c7e53f9a10) --- diff --git a/src/ceph-volume/ceph_volume/devices/raw/activate.py b/src/ceph-volume/ceph_volume/devices/raw/activate.py index c824620db4281..2265638509657 100644 --- a/src/ceph-volume/ceph_volume/devices/raw/activate.py +++ b/src/ceph-volume/ceph_volume/devices/raw/activate.py @@ -35,21 +35,27 @@ def activate_bluestore(meta, tmpfs, systemd, block_wal=None, block_db=None): system.chown(osd_path) prime_command = [ 'ceph-bluestore-tool', - 'prime-osd-dir', '--dev', meta['device'], + 'prime-osd-dir', '--path', osd_path, - '--no-mon-config'] + '--no-mon-config', + '--dev', meta['device'], + ] process.run(prime_command) # always re-do the symlink regardless if it exists, so that the block, # block.wal, and block.db devices that may have changed can be mapped # correctly every time - prepare_utils.link_block( meta['device'], osd_id) - - if block_wal: - prepare_utils.link_wal(block_wal, osd_id, osd_uuid) + prepare_utils.link_block(meta['device'], osd_id) if block_db: prepare_utils.link_db(block_db, osd_id, osd_uuid) + elif 'device_db' in meta: + prepare_utils.link_db(meta['device_db'], osd_id, osd_uuid) + + if block_wal: + prepare_utils.link_wal(block_wal, osd_id, osd_uuid) + elif 'device_wal' in meta: + prepare_utils.link_wal(meta['device_wal'], osd_id, osd_uuid) system.chown(osd_path) terminal.success("ceph-volume raw activate successful for osd ID: %s" % osd_id) diff --git a/src/ceph-volume/ceph_volume/devices/raw/list.py b/src/ceph-volume/ceph_volume/devices/raw/list.py index c86d4996f8d05..8004239e41294 100644 --- a/src/ceph-volume/ceph_volume/devices/raw/list.py +++ b/src/ceph-volume/ceph_volume/devices/raw/list.py @@ -36,18 +36,22 @@ def _get_bluestore_info(dev): logger.warning('skipping device {} because it is not reported in ceph-bluestore-tool output: {}'.format(dev, out)) return None try: - if oj[dev]['description'] != 'main': - # ignore non-main devices, for now - logger.info('ignoring non-main device {}'.format(dev)) - return None - whoami = oj[dev]['whoami'] - return { - 'type': 'bluestore', - 'osd_id': int(whoami), + r = { 'osd_uuid': oj[dev]['osd_uuid'], - 'ceph_fsid': oj[dev]['ceph_fsid'], - 'device': dev } + if oj[dev]['description'] == 'main': + whoami = oj[dev]['whoami'] + r.update({ + 'type': 'bluestore', + 'osd_id': int(whoami), + 'ceph_fsid': oj[dev]['ceph_fsid'], + 'device': dev, + }) + elif oj[dev]['description'] == 'bluefs db': + r['device_db'] = dev + elif oj[dev]['description'] == 'bluefs wal': + r['device_wal'] = dev + return r except KeyError as e: # this will appear for devices that have a bluestore header but aren't valid OSDs # for example, due to incomplete rollback of OSDs: https://tracker.ceph.com/issues/51869 @@ -108,7 +112,10 @@ class List(object): # a BlueStore disk, so be sure to log our assumption that it isn't bluestore logger.info('device {} does not have BlueStore information'.format(dev)) continue - result[bs_info['osd_uuid']] = bs_info + uuid = bs_info['osd_uuid'] + if uuid not in result: + result[uuid] = {} + result[uuid].update(bs_info) return result