]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume: add raw support for db/wal for list and activate
authorSage Weil <sage@newdream.net>
Fri, 19 Nov 2021 20:15:18 +0000 (15:15 -0500)
committerAdam King <adking@redhat.com>
Thu, 2 Jun 2022 21:57:20 +0000 (17:57 -0400)
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 <sage@newdream.net>
(cherry picked from commit f0a0c70d5c8c150abd0590ea23be83c7e53f9a10)

src/ceph-volume/ceph_volume/devices/raw/activate.py
src/ceph-volume/ceph_volume/devices/raw/list.py

index c824620db4281f8a261501ed745d8a8b8547e9c0..226563850965736fd8decb0b718bc868477c0be9 100644 (file)
@@ -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)
index c86d4996f8d05699e1c5e3297ea10dbd412d9abd..8004239e41294feac605c0e057a41548388af2ae 100644 (file)
@@ -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