diff options
author | Loic Dachary <ldachary@redhat.com> | 2017-04-13 23:49:50 +0200 |
---|---|---|
committer | Loic Dachary <ldachary@redhat.com> | 2017-04-14 12:14:18 +0200 |
commit | f425a127b7487d2093c8c943f0bcdec3d673d601 (patch) | |
tree | 0b0bd66188ea2213f6e14316ac3c6178b3c09f87 /src | |
parent | Merge pull request #14460 from dillaman/wip-qa-rbd-cli (diff) | |
download | ceph-f425a127b7487d2093c8c943f0bcdec3d673d601.tar.xz ceph-f425a127b7487d2093c8c943f0bcdec3d673d601.zip |
ceph-disk: enable directory backed OSD at boot time
https://github.com/ceph/ceph/commit/539385b143feee3905dceaf7a8faaced42f2d3c6
introduced a regression preventing directory backed OSD from starting at
boot time.
For device backed OSD the boot sequence starts with ceph-disk@.service
and proceeds to
systemctl enable --runtime ceph-osd@.service
where the --runtime ensure ceph-osd@12 is removed when the machine
reboots so that it does not compete with the ceph-disk@/dev/sdb1 unit at
boot time.
However directory backed OSD solely rely on the ceph-osd@.service unit
to start at boot time and will therefore fail to boot.
The --runtime flag is selectively set for device backed OSD only.
Fixes: http://tracker.ceph.com/issues/19628
Signed-off-by: Loic Dachary <loic@dachary.org>
Diffstat (limited to 'src')
-rwxr-xr-x | src/ceph-disk/ceph_disk/main.py | 101 |
1 files changed, 63 insertions, 38 deletions
diff --git a/src/ceph-disk/ceph_disk/main.py b/src/ceph-disk/ceph_disk/main.py index 396d641b6d1..6c376481eb4 100755 --- a/src/ceph-disk/ceph_disk/main.py +++ b/src/ceph-disk/ceph_disk/main.py @@ -3153,6 +3153,67 @@ def move_mount( ) +# +# For upgrade purposes, to make sure there are no competing units, +# both --runtime unit and the default should be disabled. There can be +# two units at the same time: one with --runtime and another without +# it. If, for any reason (manual or ceph-disk) the two units co-exist +# they will compete with each other. +# +def systemd_disable( + path, + osd_id, +): + # ensure there is no duplicate ceph-osd@.service + for style in ([], ['--runtime']): + command_check_call( + [ + 'systemctl', + 'disable', + 'ceph-osd@{osd_id}'.format(osd_id=osd_id), + ] + style, + ) + + +def systemd_start( + path, + osd_id, +): + systemd_disable(path, osd_id) + if is_mounted(path): + style = ['--runtime'] + else: + style = [] + command_check_call( + [ + 'systemctl', + 'enable', + 'ceph-osd@{osd_id}'.format(osd_id=osd_id), + ] + style, + ) + command_check_call( + [ + 'systemctl', + 'start', + 'ceph-osd@{osd_id}'.format(osd_id=osd_id), + ], + ) + + +def systemd_stop( + path, + osd_id, +): + systemd_disable(path, osd_id) + command_check_call( + [ + 'systemctl', + 'stop', + 'ceph-osd@{osd_id}'.format(osd_id=osd_id), + ], + ) + + def start_daemon( cluster, osd_id, @@ -3196,29 +3257,7 @@ def start_daemon( ], ) elif os.path.exists(os.path.join(path, 'systemd')): - # ensure there is no duplicate ceph-osd@.service - command_check_call( - [ - 'systemctl', - 'disable', - 'ceph-osd@{osd_id}'.format(osd_id=osd_id), - ], - ) - command_check_call( - [ - 'systemctl', - 'enable', - '--runtime', - 'ceph-osd@{osd_id}'.format(osd_id=osd_id), - ], - ) - command_check_call( - [ - 'systemctl', - 'start', - 'ceph-osd@{osd_id}'.format(osd_id=osd_id), - ], - ) + systemd_start(path, osd_id) elif os.path.exists(os.path.join(path, 'openrc')): base_script = '/etc/init.d/ceph-osd' osd_script = '{base}.{osd_id}'.format( @@ -3288,21 +3327,7 @@ def stop_daemon( ], ) elif os.path.exists(os.path.join(path, 'systemd')): - command_check_call( - [ - 'systemctl', - 'disable', - '--runtime', - 'ceph-osd@{osd_id}'.format(osd_id=osd_id), - ], - ) - command_check_call( - [ - 'systemctl', - 'stop', - 'ceph-osd@{osd_id}'.format(osd_id=osd_id), - ], - ) + systemd_stop(path, osd_id) elif os.path.exists(os.path.join(path, 'openrc')): command_check_call( [ |