Bug #63099
Updated by Jos Collin 7 months ago
ceph_getxattr() call always return -61 (ENODATA) in PeerReplayer::synchronize, which results in 'prev' snapshot always coming in as boost::none in PeerReplayer::do_synchronize function. Even if the ceph_fsetxattr seems successfully setting (returns 0) the 'ceph.mirror.dirty_snap_id' in the first pass, the ceph_getxattr() call always returns ENODATA in the following passes (and in further snapshot creations) for the same dir_root. It never retrieves the xattr value from the dir_root.
As the prev snapshot is always none, this issue blocks the implementation of https://tracker.ceph.com/issues/61334.
The ceph_getxattr() call eventually hits Server::handle_client_getvxattr(). But the is_ceph_vxattr call in it doesn't check for 'ceph.mirror.dirty_snap_id' and so it responds -CEPHFS_ENODATA (see the attachment). In addition to that, Server::handle_client_getvxattr() does nothing in particular for the 'ceph.mirror.dirty_snap_id' attribute. So these two things needs fix.
See the discussion about the fix here: https://github.com/ceph/ceph/pull/53912#pullrequestreview-1673118054