From: Zhiqiang Wang Date: Fri, 12 Dec 2014 08:27:41 +0000 (+0800) Subject: osd/ReplicatedPG: set the RWORDERED flag for the promote copy-from op X-Git-Tag: v9.1.0~345^2~25 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c01d20b60dc60c11caf3ab1928df274f6bfb6590;p=ceph.git osd/ReplicatedPG: set the RWORDERED flag for the promote copy-from op 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 Conflicts: src/osd/ReplicatedPG.cc --- diff --git a/src/include/rados.h b/src/include/rados.h index 163bd9c311b3..8eb19eb7ea76 100644 --- a/src/include/rados.h +++ b/src/include/rados.h @@ -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 { diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 7aba113af3d2..5f8433725157 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -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);