From: Venky Shankar Date: Wed, 26 Aug 2020 12:56:34 +0000 (-0400) Subject: client: changes for ceph.mirror.info xattr X-Git-Tag: v16.1.0~827^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=23a3f86598ff9b1ec6027bd75d89190f561d3905;p=ceph.git client: changes for ceph.mirror.info xattr Leverage the vxattr helper to handle this xattr request. Signed-off-by: Venky Shankar --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 7fcc41933c3..123457ea5c7 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -12266,6 +12266,21 @@ size_t Client::_vxattrcb_snap_btime(Inode *in, char *val, size_t size) (long unsigned)in->snap_btime.nsec()); } +bool Client::_vxattrcb_mirror_info_exists(Inode *in) +{ + // checking one of the xattrs would suffice + return in->xattrs.count("ceph.mirror.info.cluster_id") != 0; +} + +size_t Client::_vxattrcb_mirror_info(Inode *in, char *val, size_t size) +{ + return snprintf(val, size, "cluster_id=%.*s fs_id=%.*s", + in->xattrs["ceph.mirror.info.cluster_id"].length(), + in->xattrs["ceph.mirror.info.cluster_id"].c_str(), + in->xattrs["ceph.mirror.info.fs_id"].length(), + in->xattrs["ceph.mirror.info.fs_id"].c_str()); +} + #define CEPH_XATTR_NAME(_type, _name) "ceph." #_type "." #_name #define CEPH_XATTR_NAME2(_type, _name, _name2) "ceph." #_type "." #_name "." #_name2 @@ -12347,6 +12362,13 @@ const Client::VXattr Client::_dir_vxattrs[] = { exists_cb: &Client::_vxattrcb_snap_btime_exists, flags: 0, }, + { + name: "ceph.mirror.info", + getxattr_cb: &Client::_vxattrcb_mirror_info, + readonly: false, + exists_cb: &Client::_vxattrcb_mirror_info_exists, + flags: 0, + }, { name: "" } /* Required table terminator */ }; diff --git a/src/client/Client.h b/src/client/Client.h index 73b287cddd9..9c9711dc212 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -1294,6 +1294,9 @@ private: bool _vxattrcb_snap_btime_exists(Inode *in); size_t _vxattrcb_snap_btime(Inode *in, char *val, size_t size); + bool _vxattrcb_mirror_info_exists(Inode *in); + size_t _vxattrcb_mirror_info(Inode *in, char *val, size_t size); + static const VXattr *_get_vxattrs(Inode *in); static const VXattr *_match_vxattr(Inode *in, const char *name);