From 6578ce0539f8b4a70f04e9de9f3993f56b085d9c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 12 Apr 2019 11:49:13 -0500 Subject: [PATCH] osd/OSDMap: add get_crush_node_flags(int osd) Signed-off-by: Sage Weil --- src/osd/OSDMap.cc | 17 +++++++++++++++++ src/osd/OSDMap.h | 2 ++ src/test/osd/TestOSDMap.cc | 31 +++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index e5b4b94874e..efb2b9b6d59 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -5843,3 +5843,20 @@ float OSDMap::pool_raw_used_rate(int64_t poolid) const ceph_abort_msg("unrecognized pool type"); } } + +unsigned OSDMap::get_crush_node_flags(int osd) const +{ + unsigned flags = 0; + if (!crush_node_flags.empty()) { + // the map will contain type -> name + std::map ploc = crush->get_full_location(osd); + for (auto& i : ploc) { + int id = crush->get_item_id(i.second); + auto p = crush_node_flags.find(id); + if (p != crush_node_flags.end()) { + flags |= p->second; + } + } + } + return flags; +} diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index e2c9d5a70c5..46081422e9b 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -827,6 +827,8 @@ public: return !is_out(osd); } + unsigned get_crush_node_flags(int osd) const; + bool is_noup(int osd) const { return exists(osd) && (osd_state[osd] & CEPH_OSD_NOUP); } diff --git a/src/test/osd/TestOSDMap.cc b/src/test/osd/TestOSDMap.cc index b51f73ecbe9..0967a536a24 100644 --- a/src/test/osd/TestOSDMap.cc +++ b/src/test/osd/TestOSDMap.cc @@ -509,6 +509,37 @@ TEST_F(OSDMapTest, PrimaryAffinity) { } } +TEST_F(OSDMapTest, get_crush_node_flags) { + set_up_map(); + + for (unsigned i=0; i out; -- 2.39.5