]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
cephfs_mirror: sync snap dir root mode with remote dir
authorMilind Changire <mchangir@redhat.com>
Thu, 9 Feb 2023 09:27:14 +0000 (14:57 +0530)
committerMilind Changire <mchangir@redhat.com>
Tue, 7 Mar 2023 12:39:38 +0000 (18:09 +0530)
Fixes: https://tracker.ceph.com/issues/58678
Signed-off-by: Milind Changire <mchangir@redhat.com>
src/tools/cephfs_mirror/PeerReplayer.cc
src/tools/cephfs_mirror/PeerReplayer.h

index 66a141f8578d92dea954284996b381d9ee2da054..bd47046bb12184da66f2c9a74aeccf4bcd91f6f2 100644 (file)
@@ -1128,6 +1128,27 @@ int PeerReplayer::pre_sync_check_and_open_handles(
   return 0;
 }
 
+// sync the mode of the remote dir_root with that of the local dir_root
+int PeerReplayer::sync_perms(const std::string& path) {
+  int r = 0;
+  struct ceph_statx tstx;
+
+  r = ceph_statx(m_local_mount, path.c_str(), &tstx, CEPH_STATX_MODE,
+                AT_STATX_DONT_SYNC | AT_SYMLINK_NOFOLLOW);
+  if (r < 0) {
+    derr << ": failed to fetch stat for local path: "
+        << cpp_strerror(r) << dendl;
+    return r;
+  }
+  r = ceph_chmod(m_remote_mount, path.c_str(), tstx.stx_mode);
+  if (r < 0) {
+    derr << ": failed to set mode for remote path: "
+        << cpp_strerror(r) << dendl;
+    return r;
+  }
+  return 0;
+}
+
 void PeerReplayer::post_sync_close_handles(const FHandles &fh) {
   dout(20) << dendl;
 
@@ -1499,8 +1520,13 @@ void PeerReplayer::run(SnapshotReplayerThread *replayer) {
         dout(5) << ": picked dir_root=" << *dir_root << dendl;
         int r = register_directory(*dir_root, replayer);
         if (r == 0) {
-          sync_snaps(*dir_root, locker);
-          unregister_directory(*dir_root);
+         r = sync_perms(*dir_root);
+         if (r < 0) {
+           _inc_failed_count(*dir_root);
+         } else {
+           sync_snaps(*dir_root, locker);
+         }
+         unregister_directory(*dir_root);
         }
       }
 
index d45d3087e8d4a924c4041859e1c0b779d104a685..0511d154a759d068fcc87bd5a8db890b5c87bb7e 100644 (file)
@@ -311,6 +311,7 @@ private:
                      const FHandles &fh, bool need_data_sync, bool need_attr_sync);
   int copy_to_remote(const std::string &dir_root, const std::string &epath, const struct ceph_statx &stx,
                      const FHandles &fh);
+  int sync_perms(const std::string& path);
 };
 
 } // namespace mirror