summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLoic Dachary <ldachary@redhat.com>2017-04-13 23:49:50 +0200
committerLoic Dachary <ldachary@redhat.com>2017-04-14 12:14:18 +0200
commitf425a127b7487d2093c8c943f0bcdec3d673d601 (patch)
tree0b0bd66188ea2213f6e14316ac3c6178b3c09f87 /src
parentMerge pull request #14460 from dillaman/wip-qa-rbd-cli (diff)
downloadceph-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-xsrc/ceph-disk/ceph_disk/main.py101
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(
[