]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: move down peers out from peer_purged 27940/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Tue, 26 Mar 2019 07:02:02 +0000 (15:02 +0800)
committerPrashant D <pdhange@redhat.com>
Fri, 3 May 2019 00:47:38 +0000 (20:47 -0400)
In purge_strays(), we'll aggressively clear stray_set and
add all related peers into peer_purged.

However, if the corrsponding peer is down and becomes
up again, (unconditionally) adding it to peer_purged
will prevent primary from re-purging it.
(See Active::react(const MNotifyRec& notevt))

On consuming a new osdmap, let's move any down peers out from
peer_purged simutaneously. This way we can lower the risk
of leaving any leftover PGs behind.

Related-to: http://tracker.ceph.com/issues/38931
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
(cherry picked from commit f7c5b01e181630bb15e8b923b0334eb6adfdf50a)

src/osd/PG.cc

index 99b88706367af3a710e42625c8497e21915a4be3..41c585efd8f204a9a032f01dabf25a763f4e447c 100644 (file)
@@ -964,6 +964,7 @@ void PG::remove_down_peer_info(const OSDMapRef osdmap)
       peer_missing.erase(p->first);
       peer_log_requested.erase(p->first);
       peer_missing_requested.erase(p->first);
+      peer_purged.erase(p->first); // so we can re-purge if necessary
       peer_info.erase(p++);
       removed = true;
     } else