From: Venky Shankar Date: Tue, 25 Aug 2020 06:57:50 +0000 (-0400) Subject: mgr/volumes: handle idempotent subvolume marks X-Git-Tag: v14.2.12~111^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=74341139848e920102766178bb688b2dc78b077d;p=ceph.git mgr/volumes: handle idempotent subvolume marks Fixes: https://tracker.ceph.com/issues/47154 Signed-off-by: Venky Shankar (cherry picked from commit 2f5eed200a0710759001ae1a26c739584f32be88) --- diff --git a/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v1.py b/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v1.py index 6785c830392..82d2c4e33c6 100644 --- a/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v1.py +++ b/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v1.py @@ -57,13 +57,11 @@ class SubvolumeV1(SubvolumeBase, SubvolumeTemplate): def mark_subvolume(self): # set subvolume attr, on subvolume root, marking it as a CephFS subvolume # subvolume root is where snapshots would be taken, and hence is the dir for v1 subvolumes - xattr_val = 1 try: - self.fs.setxattr(self.path, 'ceph.dir.subvolume', str(xattr_val).encode('utf-8'), os.XATTR_CREATE) - except cephfs.ObjectExists: - return + # MDS treats this as a noop for already marked subvolume + self.fs.setxattr(self.path, 'ceph.dir.subvolume', b'1', 0) except cephfs.InvalidValue as e: - raise VolumeException(-errno.EINVAL, "invalid value specified for ceph.dir.subvolume: '{0}'".format(xattr_val)) + raise VolumeException(-errno.EINVAL, "invalid value specified for ceph.dir.subvolume") except cephfs.Error as e: raise VolumeException(-e.args[0], e.args[1]) diff --git a/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v2.py b/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v2.py index f8b6780507a..7b0f55a91c8 100644 --- a/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v2.py +++ b/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v2.py @@ -96,13 +96,11 @@ class SubvolumeV2(SubvolumeV1): def mark_subvolume(self): # set subvolume attr, on subvolume root, marking it as a CephFS subvolume # subvolume root is where snapshots would be taken, and hence is the base_path for v2 subvolumes - xattr_val = 1 try: - self.fs.setxattr(self.base_path, 'ceph.dir.subvolume', str(xattr_val).encode('utf-8'), os.XATTR_CREATE) - except cephfs.ObjectExists: - return + # MDS treats this as a noop for already marked subvolume + self.fs.setxattr(self.base_path, 'ceph.dir.subvolume', b'1', 0) except cephfs.InvalidValue as e: - raise VolumeException(-errno.EINVAL, "invalid value specified for ceph.dir.subvolume: '{0}'".format(xattr_val)) + raise VolumeException(-errno.EINVAL, "invalid value specified for ceph.dir.subvolume") except cephfs.Error as e: raise VolumeException(-e.args[0], e.args[1])