From: Ning Yao Date: Tue, 10 Feb 2015 12:28:42 +0000 (+0000) Subject: ReplicatedPG:: find_object_context clear extra creation (head,snapdir) X-Git-Tag: v9.0.0~89^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2b29165116c2c0876fdbd9930cbe14c6393b81fb;p=ceph.git ReplicatedPG:: find_object_context clear extra creation (head,snapdir) if it is the head object, there is no need to create extra head, snapdir. only creation for other cases we need. Signed-off-by: Ning Yao --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 904119e27027..0deef67a7139 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -8007,17 +8007,35 @@ int ReplicatedPG::find_object_context(const hobject_t& oid, bool map_snapid_to_clone, hobject_t *pmissing) { + assert(oid.pool == info.pgid.pool()); + // want the head? + if (oid.snap == CEPH_NOSNAP) { + ObjectContextRef obc = get_object_context(oid, can_create); + if (!obc) { + if (pmissing) + *pmissing = oid; + return -ENOENT; + } + dout(10) << "find_object_context " << oid + << " @" << oid.snap + << " oi=" << obc->obs.oi + << dendl; + *pobc = obc; + + if (can_create && !obc->ssc) + obc->ssc = get_snapset_context(oid, true); + + return 0; + } + hobject_t head(oid.oid, oid.get_key(), CEPH_NOSNAP, oid.get_hash(), info.pgid.pool(), oid.get_namespace()); - hobject_t snapdir(oid.oid, oid.get_key(), CEPH_SNAPDIR, oid.get_hash(), - info.pgid.pool(), oid.get_namespace()); - // want the snapdir? if (oid.snap == CEPH_SNAPDIR) { // return head or snapdir, whichever exists. ObjectContextRef obc = get_object_context(head, can_create); if (!obc || !obc->obs.exists) - obc = get_object_context(snapdir, can_create); + obc = get_object_context(oid, can_create); if (!obc || !obc->obs.exists) { // if we have neither, we would want to promote the head. if (pmissing) @@ -8037,26 +8055,6 @@ int ReplicatedPG::find_object_context(const hobject_t& oid, return 0; } - // want the head? - if (oid.snap == CEPH_NOSNAP) { - ObjectContextRef obc = get_object_context(head, can_create); - if (!obc) { - if (pmissing) - *pmissing = head; - return -ENOENT; - } - dout(10) << "find_object_context " << oid - << " @" << oid.snap - << " oi=" << obc->obs.oi - << dendl; - *pobc = obc; - - if (can_create && !obc->ssc) - obc->ssc = get_snapset_context(oid, true); - - return 0; - } - // we want a snap if (!map_snapid_to_clone && pool.info.is_removed_snap(oid.snap)) { dout(10) << __func__ << " snap " << oid.snap << " is removed" << dendl;