From: Jianpeng Ma Date: Fri, 16 Oct 2015 08:27:18 +0000 (+0800) Subject: osd: optimize get_object_context. X-Git-Tag: v10.0.0~56^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=92454c2cce54dde7a3155d7cdc6ae1e6e92a5c3a;p=ceph.git osd: optimize get_object_context. If soid didn't exist and soid is head or snapdir. In get_snapset_context we can remove the useless objects_get_attr(SS_ATTR). It mainly for create a new object. Signed-off-by: Jianpeng Ma --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 4ebeb6a6233d..a95253a815be 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -8476,7 +8476,7 @@ ObjectContextRef ReplicatedPG::get_object_context(const hobject_t& soid, // new object. object_info_t oi(soid); SnapSetContext *ssc = get_snapset_context( - soid, true, 0); + soid, true, 0, false); obc = create_object_context(oi, ssc); dout(10) << __func__ << ": " << obc << " " << soid << " " << obc->rwstate @@ -8856,7 +8856,8 @@ SnapSetContext *ReplicatedPG::create_snapset_context(const hobject_t& oid) SnapSetContext *ReplicatedPG::get_snapset_context( const hobject_t& oid, bool can_create, - map *attrs) + map *attrs, + bool oid_existed) { Mutex::Locker l(snapset_contexts_lock); SnapSetContext *ssc; @@ -8871,9 +8872,12 @@ SnapSetContext *ReplicatedPG::get_snapset_context( } else { bufferlist bv; if (!attrs) { - int r = pgbackend->objects_get_attr(oid.get_head(), SS_ATTR, &bv); + int r = -ENOENT; + if (!(oid.is_head() && !oid_existed)) + r = pgbackend->objects_get_attr(oid.get_head(), SS_ATTR, &bv); if (r < 0) { // try _snapset + if (!(oid.is_snapdir() && !oid_existed)) r = pgbackend->objects_get_attr(oid.get_snapdir(), SS_ATTR, &bv); if (r < 0 && !can_create) return NULL; diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index 04a6a45f7073..ddad540e27c1 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -1039,7 +1039,8 @@ protected: SnapSetContext *get_snapset_context( const hobject_t& oid, bool can_create, - map *attrs = 0 + map *attrs = 0, + bool oid_existed = true //indicate this oid whether exsited in backend ); void register_snapset_context(SnapSetContext *ssc) { Mutex::Locker l(snapset_contexts_lock);