From: Pan Liu Date: Tue, 29 Nov 2016 09:33:38 +0000 (+0800) Subject: osd/OSDMap: improve the performance of pg_to_acting_osds. X-Git-Tag: v11.1.1~91^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=79b90a261fb902f295c856abea685b50df064d82;p=ceph.git osd/OSDMap: improve the performance of pg_to_acting_osds. Signed-off-by: Pan Liu --- diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index cd39f8feaf80..e33d1e3251d7 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -1720,20 +1720,24 @@ void OSDMap::_pg_to_up_acting_osds(const pg_t& pg, vector *up, int *up_prim int _up_primary; int _acting_primary; ps_t pps; - _pg_to_raw_osds(*pool, pg, &raw, &_up_primary, &pps); - _raw_to_up_osds(*pool, raw, &_up, &_up_primary); - _apply_primary_affinity(pps, *pool, &_up, &_up_primary); _get_temp_osds(*pool, pg, &_acting, &_acting_primary); - if (_acting.empty()) { - _acting = _up; - if (_acting_primary == -1) { - _acting_primary = _up_primary; + if (_acting.empty() || up || up_primary) { + _pg_to_raw_osds(*pool, pg, &raw, &_up_primary, &pps); + _raw_to_up_osds(*pool, raw, &_up, &_up_primary); + _apply_primary_affinity(pps, *pool, &_up, &_up_primary); + if (_acting.empty()) { + _acting = _up; + if (_acting_primary == -1) { + _acting_primary = _up_primary; + } } + + if (up) + up->swap(_up); + if (up_primary) + *up_primary = _up_primary; } - if (up) - up->swap(_up); - if (up_primary) - *up_primary = _up_primary; + if (acting) acting->swap(_acting); if (acting_primary)