Skip to content

Commit

Permalink
Merge pull request #5800 from ceph/wip-user
Browse files Browse the repository at this point in the history
ceph-disk: do async startup on upstart; fix dmcrypt create/activate bug

Reviewed-by: Loic Dachary <ldachary@redhat.com>
  • Loading branch information
liewegas committed Sep 10, 2015
2 parents 86dbfc8 + 3ce06e1 commit 48c4228
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 28 deletions.
1 change: 1 addition & 0 deletions src/Makefile.am
Expand Up @@ -81,6 +81,7 @@ EXTRA_DIST += \
$(srcdir)/ceph-rbdnamer \
$(srcdir)/tools/ceph-monstore-update-crush.sh \
$(srcdir)/upstart/ceph-all.conf \
$(srcdir)/upstart/ceph-disk.conf \
$(srcdir)/upstart/ceph-mon.conf \
$(srcdir)/upstart/ceph-mon-all.conf \
$(srcdir)/upstart/ceph-mon-all-starter.conf \
Expand Down
76 changes: 48 additions & 28 deletions src/ceph-disk
Expand Up @@ -242,6 +242,15 @@ def is_systemd():
return True
return False

def is_upstart():
"""
Detect whether upstart is running
"""
(out, _) = command(['init', '--version'])
if 'upstart' in out:
return True
return False

def maybe_mkdir(*a, **kw):
"""
Creates a new directory if it doesn't exist, removes
Expand Down Expand Up @@ -1042,6 +1051,8 @@ def dmcrypt_map(
else:
# Plain mode has no format function, nor any validation that the key is correct.
command_check_call(create_args)
# set proper ownership of mapped device
command_check_call(['chown', 'ceph:ceph', dev])
return dev

except subprocess.CalledProcessError as e:
Expand Down Expand Up @@ -2651,23 +2662,6 @@ def get_dev_fs(dev):
else:
return None

def get_dev_udev_properties(dev):
out, _ = command(
[
'/sbin/blkid',
'-o',
'udev',
'-p',
dev,
]
)
p = {}
for line in out.split('\n'):
if line:
(key, value) = line.split('=')
p[key] = value
return p

def split_dev_base_partnum(dev):
if is_mpath(dev):
partnum = partnum_mpath(dev)
Expand All @@ -2679,10 +2673,31 @@ def split_dev_base_partnum(dev):
return (base, partnum)

def get_partition_type(part):
return get_sgdisk_partition_info(part, 'Partition GUID code: (\S+)')
return get_blkid_partition_info(part, 'ID_PART_ENTRY_TYPE')
#return get_sgdisk_partition_info(part, 'Partition GUID code: (\S+)')

def get_partition_uuid(part):
return get_sgdisk_partition_info(part, 'Partition unique GUID: (\S+)')
return get_blkid_partition_info(part, 'ID_PART_ENTRY_UUID')
#return get_sgdisk_partition_info(part, 'Partition unique GUID: (\S+)')

def get_blkid_partition_info(dev, what=None):
out, _ = command(
[
'/sbin/blkid',
'-o',
'udev',
'-p',
dev,
]
)
p = {}
for line in out.splitlines():
(key, value) = line.split('=')
p[key] = value
if what:
return p.get(what)
else:
return p

def get_sgdisk_partition_info(dev, regexp):
(base, partnum) = split_dev_base_partnum(dev)
Expand Down Expand Up @@ -3019,16 +3034,21 @@ def main_trigger(args):
]
)
return
if is_upstart() and not args.sync:
LOG.info('upstart detected, triggering ceph-disk task')
command(
[
'initctl',
'emit',
'ceph-disk',
'dev={dev}'.format(dev=args.dev),
'pid={pid}'.format(pid=os.getpid()),
]
)
return

p = get_dev_udev_properties(args.dev)

if 'ID_PART_ENTRY_TYPE' not in p:
raise Error('no ID_PART_ENTRY_TYPE for %s' % args.dev)
parttype = p['ID_PART_ENTRY_TYPE']

if 'ID_PART_ENTRY_UUID' not in p:
raise Error('no ID_PART_ENTRY_UUID for %s' % args.dev)
partid = p['ID_PART_ENTRY_UUID']
parttype = get_partition_type(args.dev)
partid = get_partition_uuid(args.dev)

LOG.info('trigger {dev} parttype {parttype} uuid {partid}'.format(
dev=args.dev,
Expand Down
9 changes: 9 additions & 0 deletions src/upstart/ceph-disk.conf
@@ -0,0 +1,9 @@
description "ceph-disk async worker"

start on ceph-disk

instance $dev/$pid
export dev
export pid

exec ceph-disk --verbose --log-stdout trigger --sync $dev

0 comments on commit 48c4228

Please sign in to comment.