From bee7e3a95b2b6c4dc7d6735dcbe9ac380a77cc86 Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Thu, 1 Dec 2016 00:28:32 +0100 Subject: [PATCH] ceph-disk: enable --runtime ceph-osd systemd units If ceph-osd@.service is enabled for a given device (say /dev/sdb1 for osd.3) the ceph-osd@3.service will race with ceph-disk@dev-sdb1.service at boot time. Enabling ceph-osd@3.service is not necessary at boot time because ceph-disk@dev-sdb1.service calls ceph-disk activate /dev/sdb1 which calls systemctl start ceph-osd@3 The systemctl enable/disable ceph-osd@.service called by ceph-disk activate is changed to add the --runtime option so that ceph-osd units are lost after a reboot. They are recreated when ceph-disk activate is called at boot time so that: systemctl stop ceph knows which ceph-osd@.service to stop when a script or sysadmin wants to stop all ceph services. Before enabling ceph-osd@.service (that happens at every boot time), make sure the permanent enablement in /etc/systemd is removed so that only the one added by systemctl enable --runtime in /run/systemd remains. This is useful to upgrade an existing cluster without creating a situation that is even worse than before because ceph-disk@.service races against two ceph-osd@.service (one in /etc/systemd and one in /run/systemd). Fixes: http://tracker.ceph.com/issues/17889 Signed-off-by: Loic Dachary (cherry picked from commit 539385b143feee3905dceaf7a8faaced42f2d3c6) --- src/ceph-disk/ceph_disk/main.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/ceph-disk/ceph_disk/main.py b/src/ceph-disk/ceph_disk/main.py index 768972b43e290..3dcd49e9bd468 100755 --- a/src/ceph-disk/ceph_disk/main.py +++ b/src/ceph-disk/ceph_disk/main.py @@ -2883,10 +2883,19 @@ 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), ], ) @@ -2944,6 +2953,7 @@ def stop_daemon( [ 'systemctl', 'disable', + '--runtime', 'ceph-osd@{osd_id}'.format(osd_id=osd_id), ], ) -- 2.39.5