From: Kamoltat Date: Fri, 4 Nov 2022 02:02:49 +0000 (+0000) Subject: mon/Elector & ConnectionTracker: reset peer_tracker.rank X-Git-Tag: v17.2.6~258^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=21537564202a767f6f1a80ccf0b4633aa20f9540;p=ceph.git mon/Elector & ConnectionTracker: reset peer_tracker.rank In `notify_clear_peer_state()` we another mechanism in reseting our `peer_tracker.rank` to match our own monitor.rank. This is added so there is a way for us to recover from a scenrio where `peer_tracker.rank` is messed up from adjusting the ranks or removing ranks. `notifiy_clear_peer_state()` can be triggered by using the command: `ceph connection scores reset` Also in `clear_peer_reports`, besides reassigning my_reports to an empty object, we also have to make `my_reports` = `rank` from `peer_tracker`, such that we don't get -1 as a rank in my_reports. Fixes: https://tracker.ceph.com/issues/58049 Signed-off-by: Kamoltat (cherry picked from commit 55cf717a3070d10b6b02af33a66d6ad0acbba0f6) --- diff --git a/src/mon/ConnectionTracker.h b/src/mon/ConnectionTracker.h index f2ae5b123bc1..4196bca27934 100644 --- a/src/mon/ConnectionTracker.h +++ b/src/mon/ConnectionTracker.h @@ -152,6 +152,7 @@ class ConnectionTracker { encoding.clear(); peer_reports.clear(); my_reports = ConnectionReport(); + my_reports.rank = rank; } public: @@ -180,6 +181,10 @@ class ConnectionTracker { my_reports = o.my_reports; } void notify_reset() { clear_peer_reports(); } + void set_rank(int new_rank) { + rank = new_rank; + my_reports.rank = rank; + } void notify_rank_changed(int new_rank); void notify_rank_removed(int rank_removed, int new_rank); friend std::ostream& operator<<(std::ostream& o, const ConnectionTracker& c); diff --git a/src/mon/Elector.cc b/src/mon/Elector.cc index af1109ae8d26..c725a38e9ba6 100644 --- a/src/mon/Elector.cc +++ b/src/mon/Elector.cc @@ -719,8 +719,11 @@ void Elector::start_participating() void Elector::notify_clear_peer_state() { - dout(10) << __func__ << dendl; + dout(10) << __func__ << dendl; + dout(20) << " peer_tracker before: " << peer_tracker << dendl; peer_tracker.notify_reset(); + peer_tracker.set_rank(mon->rank); + dout(20) << " peer_tracker after: " << peer_tracker << dendl; } void Elector::notify_rank_changed(int new_rank)