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)
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
# 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