From 3d3fa1b99f7df8804a5f49fd3df3165f779426ae Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Fri, 21 Jun 2019 09:05:00 -0400 Subject: [PATCH] Add write-lock-wait to all other Ceph commands --- client-common/ceph.py | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/client-common/ceph.py b/client-common/ceph.py index 38090dc4..066559e6 100644 --- a/client-common/ceph.py +++ b/client-common/ceph.py @@ -847,7 +847,12 @@ def add_osd(zk_conn, node, device, weight): message = 'ERROR: Command ignored by node.' success = False - zkhandler.writedata(zk_conn, {'/ceph/cmd': ''}) + # Acquire a write lock to ensure things go smoothly + lock = zkhandler.writelock(zk_conn, '/ceph/cmd') + with lock: + time.sleep(1) + zkhandler.writedata(zk_conn, {'/ceph/cmd': ''}) + return success, message def remove_osd(zk_conn, osd_id): @@ -874,7 +879,12 @@ def remove_osd(zk_conn, osd_id): success = False message = 'ERROR Command ignored by node.' - zkhandler.writedata(zk_conn, {'/ceph/cmd': ''}) + # Acquire a write lock to ensure things go smoothly + lock = zkhandler.writelock(zk_conn, '/ceph/cmd') + with lock: + time.sleep(1) + zkhandler.writedata(zk_conn, {'/ceph/cmd': ''}) + return success, message def in_osd(zk_conn, osd_id): @@ -901,7 +911,12 @@ def in_osd(zk_conn, osd_id): success = False message = 'ERROR Command ignored by node.' - zkhandler.writedata(zk_conn, {'/ceph/cmd': ''}) + # Acquire a write lock to ensure things go smoothly + lock = zkhandler.writelock(zk_conn, '/ceph/cmd') + with lock: + time.sleep(1) + zkhandler.writedata(zk_conn, {'/ceph/cmd': ''}) + return success, message def out_osd(zk_conn, osd_id): @@ -928,7 +943,12 @@ def out_osd(zk_conn, osd_id): success = False message = 'ERROR Command ignored by node.' - zkhandler.writedata(zk_conn, {'/ceph/cmd': ''}) + # Acquire a write lock to ensure things go smoothly + lock = zkhandler.writelock(zk_conn, '/ceph/cmd') + with lock: + time.sleep(1) + zkhandler.writedata(zk_conn, {'/ceph/cmd': ''}) + return success, message def set_osd(zk_conn, option): @@ -976,7 +996,12 @@ def unset_osd(zk_conn, option): success = False message = 'ERROR Command ignored by node.' - zkhandler.writedata(zk_conn, {'/ceph/cmd': ''}) + # Acquire a write lock to ensure things go smoothly + lock = zkhandler.writelock(zk_conn, '/ceph/cmd') + with lock: + time.sleep(1) + zkhandler.writedata(zk_conn, {'/ceph/cmd': ''}) + return success, message def get_list_osd(zk_conn, limit):