From 7885566246927cb7c03513d2fb2f961d5771bca3 Mon Sep 17 00:00:00 2001 From: Kamoltat Date: Fri, 4 Nov 2022 02:02:49 +0000 Subject: [PATCH] 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) --- src/mon/ConnectionTracker.h | 5 +++++ src/mon/Elector.cc | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mon/ConnectionTracker.h b/src/mon/ConnectionTracker.h index c248f7f692764..a8b116efcbfb1 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 af1109ae8d269..c725a38e9ba6c 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) -- 2.39.5