]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/ReplicatedPG: set the RWORDERED flag for the promote copy-from op
authorZhiqiang Wang <zhiqiang.wang@intel.com>
Fri, 12 Dec 2014 08:27:41 +0000 (16:27 +0800)
committerSamuel Just <sjust@redhat.com>
Tue, 18 Aug 2015 18:25:21 +0000 (11:25 -0700)
Set the RWORDERED flag when doing promote copy-from op. This is in case
there are proxy writes in flight.

Signed-off-by: Zhiqiang Wang <zhiqiang.wang@intel.com>
Conflicts:
src/osd/ReplicatedPG.cc

src/include/rados.h
src/osd/ReplicatedPG.cc

index 163bd9c311b30853f49ff185ba63cd28ccb4e2d4..8eb19eb7ea76401c67a851e5b3971be4e4ec86d0 100644 (file)
@@ -433,6 +433,7 @@ enum {
        CEPH_OSD_COPY_FROM_FLAG_IGNORE_CACHE = 4, /* ignore osd cache logic */
        CEPH_OSD_COPY_FROM_FLAG_MAP_SNAP_CLONE = 8, /* map snap direct to
                                                     * cloneid */
+       CEPH_OSD_COPY_FROM_FLAG_RWORDERED = 16, /* order with write */
 };
 
 enum {
index 7aba113af3d20528a7491e4e7e2297bd33de8c71..5f8433725157ccbf6563b21b55dd1c531630fa6a 100644 (file)
@@ -2374,10 +2374,12 @@ void ReplicatedPG::promote_object(ObjectContextRef obc,
   PromoteCallback *cb = new PromoteCallback(obc, this);
   object_locator_t my_oloc = oloc;
   my_oloc.pool = pool.info.tier_of;
-  start_copy(cb, obc, obc->obs.oi.soid, my_oloc, 0,
-            CEPH_OSD_COPY_FROM_FLAG_IGNORE_OVERLAY |
-            CEPH_OSD_COPY_FROM_FLAG_IGNORE_CACHE |
-            CEPH_OSD_COPY_FROM_FLAG_MAP_SNAP_CLONE,
+
+  unsigned flags = CEPH_OSD_COPY_FROM_FLAG_IGNORE_OVERLAY |
+                   CEPH_OSD_COPY_FROM_FLAG_IGNORE_CACHE |
+                   CEPH_OSD_COPY_FROM_FLAG_MAP_SNAP_CLONE |
+                   CEPH_OSD_COPY_FROM_FLAG_RWORDERED;
+  start_copy(cb, obc, obc->obs.oi.soid, my_oloc, 0, flags,
             obc->obs.oi.soid.snap == CEPH_NOSNAP,
             src_fadvise_flags, 0);
 
@@ -6384,6 +6386,8 @@ void ReplicatedPG::_copy_some(ObjectContextRef obc, CopyOpRef cop)
     flags |= CEPH_OSD_FLAG_IGNORE_OVERLAY;
   if (cop->flags & CEPH_OSD_COPY_FROM_FLAG_MAP_SNAP_CLONE)
     flags |= CEPH_OSD_FLAG_MAP_SNAP_CLONE;
+  if (cop->flags & CEPH_OSD_COPY_FROM_FLAG_RWORDERED)
+    flags |= CEPH_OSD_FLAG_RWORDERED;
 
   C_GatherBuilder gather(g_ceph_context);