From 29fc326861571eeaab11e06ff081b9873b3cbc52 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Thu, 19 Oct 2017 16:25:01 +0800 Subject: [PATCH] osd/PG: caluculate acting by comparing with oldest log entry of auth In GetLog, we will request logs back to the min last_update over our acting_backfill set, which will result in our log being extended as far backwards as necessary to pick up any peers which can be log recovered by auth_log_shard's log. Signed-off-by: xie xingguo --- src/osd/PG.cc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index f5f0187b95f..2d04f760d52 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -1236,7 +1236,9 @@ void PG::calc_replicated_acting( unsigned usable = 1; // select replicas that have log contiguity with primary. - // prefer up, then acting, then any peer_info osds + // prefer up, then acting, then any peer_info osds + eversion_t oldest_auth_log_entry = + std::min(primary->second.log_tail, auth_log_shard->second.log_tail); for (vector::const_iterator i = up.begin(); i != up.end(); ++i) { @@ -1245,9 +1247,7 @@ void PG::calc_replicated_acting( continue; const pg_info_t &cur_info = all_info.find(up_cand)->second; if (cur_info.is_incomplete() || - cur_info.last_update < MIN( - primary->second.log_tail, - auth_log_shard->second.log_tail)) { + cur_info.last_update < oldest_auth_log_entry) { /* We include auth_log_shard->second.log_tail because in GetLog, * we will request logs back to the min last_update over our * acting_backfill set, which will result in our log being extended @@ -1275,13 +1275,13 @@ void PG::calc_replicated_acting( // skip up osds we already considered above if (acting_cand == primary->first) continue; - vector::const_iterator up_it = find(up.begin(), up.end(), acting_cand.osd); + vector::const_iterator up_it = find(up.begin(), up.end(), *i); if (up_it != up.end()) continue; const pg_info_t &cur_info = all_info.find(acting_cand)->second; if (cur_info.is_incomplete() || - cur_info.last_update < primary->second.log_tail) { + cur_info.last_update < oldest_auth_log_entry) { ss << " shard " << acting_cand << " (acting) REJECTED " << cur_info << std::endl; } else { @@ -1314,7 +1314,7 @@ void PG::calc_replicated_acting( continue; if (i->second.is_incomplete() || - i->second.last_update < primary->second.log_tail) { + i->second.last_update < oldest_auth_log_entry) { ss << " shard " << i->first << " (stray) REJECTED " << i->second << std::endl; } else {