From 0af5eb6d31add3ba5e9dc8261657b2b3d6f45ad0 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Tue, 11 Jan 2022 00:10:36 +0000 Subject: [PATCH] osd: PeeringState: fix selection order in calc_replicated_acting_stretch We were previously mis-ordering these to *de*prioritize the existing acting set. That is bad! We generate OSD candidates from the acting set and strays, and push them into the candidates list as a tuple of <,osd_id>. Then we sort the list. Then we go through the list from front to back and push_back entries into the appropriate ancestor lists. And then we pop_back() off the lists to select the acting set. Which of course turns our nice careful order backwards! So don't do that. Fixes: https://tracker.ceph.com/issues/53824 Signed-off-by: Greg Farnum --- src/osd/PeeringState.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index 03688fd11aa..dd73537799e 100644 --- a/src/osd/PeeringState.cc +++ b/src/osd/PeeringState.cc @@ -1854,8 +1854,8 @@ public: } osd_id_t pop_osd() { ceph_assert(!is_empty()); - auto ret = osds.back(); - osds.pop_back(); + auto ret = osds.front(); + osds.pop_front(); return ret.second; } @@ -1864,7 +1864,7 @@ public: osd_ord_t get_ord() const { return osds.empty() ? std::make_tuple(false, eversion_t()) - : osds.back().first; + : osds.front().first; } bool is_empty() const { return osds.empty(); } -- 2.39.5