From 85fbddd4f68ab159425c9198740c0d5787adc739 Mon Sep 17 00:00:00 2001 From: Nathan Cutler Date: Tue, 24 Jan 2017 15:49:24 +0100 Subject: [PATCH] qa/tasks/cephfs/filesystem.py: backport _write_data_xattr() function This is a partial manual backport of 5f77f09b019b607b84e6a8f89ce19065383ca108 It is needed by test_corrupt_backtrace() in qa/tasks/cephfs/test_damage.py Signed-off-by: Nathan Cutler --- qa/tasks/cephfs/filesystem.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/qa/tasks/cephfs/filesystem.py b/qa/tasks/cephfs/filesystem.py index 1b3b71e017d5..9f130e361248 100644 --- a/qa/tasks/cephfs/filesystem.py +++ b/qa/tasks/cephfs/filesystem.py @@ -633,6 +633,30 @@ class Filesystem(MDSCluster): return json.loads(p.stdout.getvalue().strip()) + def _write_data_xattr(self, ino_no, xattr_name, data, pool=None): + """ + Write to an xattr of the 0th data object of an inode. Will + succeed whether the object and/or xattr already exist or not. + + :param ino_no: integer inode number + :param xattr_name: string name of the xattr + :param data: byte array data to write to the xattr + :param pool: name of data pool or None to use primary data pool + :return: None + """ + remote = self.mds_daemons[self.mds_ids[0]].remote + if pool is None: + pool = self.get_data_pool_name() + + obj_name = "{0:x}.00000000".format(ino_no) + args = [ + os.path.join(self._prefix, "rados"), "-p", pool, "setxattr", + obj_name, xattr_name, data + ] + remote.run( + args=args, + stdout=StringIO()) + def read_backtrace(self, ino_no, pool=None): """ Read the backtrace from the data pool, return a dict in the format -- 2.47.3