From dd080988f1466ee648629d412d22210f35816c11 Mon Sep 17 00:00:00 2001 From: Xinze Chi Date: Fri, 15 Sep 2017 16:02:27 +0800 Subject: [PATCH 1/2] osd: set min_version to newest version in maybe_force_recovery Signed-off-by: Xinze Chi --- src/osd/PrimaryLogPG.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index b91cd4980be..25ff18696ba 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -726,7 +726,7 @@ void PrimaryLogPG::maybe_force_recovery() return; // find the oldest missing object - version_t min_version = 0; + version_t min_version = pg_log.get_log().head.version; hobject_t soid; if (!pg_log.get_missing().get_items().empty()) { min_version = pg_log.get_missing().get_rmissing().begin()->first; @@ -739,10 +739,14 @@ void PrimaryLogPG::maybe_force_recovery() if (*it == get_primary()) continue; pg_shard_t peer = *it; if (peer_missing.count(peer) && - !peer_missing[peer].get_items().empty() && - min_version > peer_missing[peer].get_rmissing().begin()->first) { - min_version = peer_missing[peer].get_rmissing().begin()->first; - soid = peer_missing[peer].get_rmissing().begin()->second; + !peer_missing[peer].get_items().empty()) { + const auto& min_obj = peer_missing[peer].get_rmissing().begin(); + dout(20) << __func__ << " peer " << peer << " min_version " << min_obj->first + << " oid " << min_obj->second << dendl; + if (min_version > min_obj->first) { + min_version = min_obj->first; + soid = min_obj->second; + } } } From 96a3cb698a1ece76ac908e352db09c80e87da024 Mon Sep 17 00:00:00 2001 From: Xinze Chi Date: Fri, 15 Sep 2017 16:03:09 +0800 Subject: [PATCH 2/2] osd: using get_rmissing instread of missing as the judgement the below code using peer_missing iterator Signed-off-by: Xinze Chi --- src/osd/PrimaryLogPG.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 25ff18696ba..c5a35cbd0f1 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -728,7 +728,7 @@ void PrimaryLogPG::maybe_force_recovery() // find the oldest missing object version_t min_version = pg_log.get_log().head.version; hobject_t soid; - if (!pg_log.get_missing().get_items().empty()) { + if (!pg_log.get_missing().get_rmissing().empty()) { min_version = pg_log.get_missing().get_rmissing().begin()->first; soid = pg_log.get_missing().get_rmissing().begin()->second; } @@ -739,7 +739,7 @@ void PrimaryLogPG::maybe_force_recovery() if (*it == get_primary()) continue; pg_shard_t peer = *it; if (peer_missing.count(peer) && - !peer_missing[peer].get_items().empty()) { + !peer_missing[peer].get_rmissing().empty()) { const auto& min_obj = peer_missing[peer].get_rmissing().begin(); dout(20) << __func__ << " peer " << peer << " min_version " << min_obj->first << " oid " << min_obj->second << dendl;