From 4a414a57af385945b105209571e43abbd33b4b65 Mon Sep 17 00:00:00 2001 From: Xavi Hernandez Date: Wed, 19 Mar 2025 12:59:59 +0100 Subject: [PATCH] pybind/mgr: create normalization xattr in subvolumes When a new subvolume is created, optionally set the ceph.dir.normalization xattr to the root directory. Signed-off-by: Xavi Hernandez --- .../fs/operations/versions/subvolume_base.py | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/pybind/mgr/volumes/fs/operations/versions/subvolume_base.py b/src/pybind/mgr/volumes/fs/operations/versions/subvolume_base.py index bffaca156cf..c360a28bcdf 100644 --- a/src/pybind/mgr/volumes/fs/operations/versions/subvolume_base.py +++ b/src/pybind/mgr/volumes/fs/operations/versions/subvolume_base.py @@ -203,6 +203,13 @@ class SubvolumeBase(object): except EarmarkException: attrs["earmark"] = '' + try: + attrs["normalization"] = self.fs.getxattr(pathname, + 'ceph.dir.normalization' + ).decode('utf-8') + except cephfs.NoData: + attrs["normalization"] = None + return attrs def set_attrs(self, path, attrs): @@ -294,6 +301,13 @@ class SubvolumeBase(object): fs_earmark = CephFSVolumeEarmarking(self.fs, path) fs_earmark.set_earmark(earmark) + normalization = attrs.get("normalization") + if normalization is not None: + try: + self.fs.setxattr(path, "ceph.dir.normalization", normalization.encode('utf-8'), 0) + except cephfs.Error as e: + raise VolumeException(-e.args[0], e.args[1]) + def _resize(self, path, newsize, noshrink): try: newsize = int(newsize) @@ -452,6 +466,13 @@ class SubvolumeBase(object): except EarmarkException: earmark = '' + try: + normalization = self.fs.getxattr(subvolpath, + 'ceph.dir.normalization' + ).decode('utf-8') + except cephfs.NoData: + normalization = "none" + return {'path': subvolpath, 'type': etype.value, 'uid': int(st["uid"]), @@ -470,7 +491,9 @@ class SubvolumeBase(object): 'pool_namespace': pool_namespace, 'features': self.features, 'state': self.state.value, - 'earmark': earmark} + 'earmark': earmark, + 'normalization': normalization, + } def set_user_metadata(self, keyname, value): try: -- 2.39.5