From 746069ee62c74ecf04ed45988029d5c3382a38d2 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 30 Oct 2013 09:00:52 -0700 Subject: [PATCH] crush/CrushWrapper: simplify get_full_location_ordered() Just ascend the hierarchy; it is much less complicated. Signed-off-by: Sage Weil --- src/crush/CrushWrapper.cc | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/src/crush/CrushWrapper.cc b/src/crush/CrushWrapper.cc index 9a7abd2cd13..84eaf768ba2 100644 --- a/src/crush/CrushWrapper.cc +++ b/src/crush/CrushWrapper.cc @@ -323,32 +323,16 @@ map CrushWrapper::get_full_location(int id) int CrushWrapper::get_full_location_ordered(int id, vector >& path) { - int parent_id, ret; - pair parent_coord; - parent_coord = get_immediate_parent(id, &ret); - - // read the type map and get the name of the type with the largest ID - int high_type = 0; - for (map::iterator it = type_map.begin(); it != type_map.end(); ++it){ - if ( (*it).first > high_type ) - high_type = (*it).first; - } - - string high_type_name = type_map[high_type]; - - path.push_back(parent_coord); - parent_id = get_item_id(parent_coord.second); - - - while (parent_coord.first != high_type_name) { - parent_coord = get_immediate_parent(parent_id); + int cur = id; + int ret; + while (true) { + pair parent_coord = get_immediate_parent(cur, &ret); + if (ret != 0) + break; path.push_back(parent_coord); - if ( parent_coord.first != high_type_name ){ - parent_id = get_item_id(parent_coord.second); - } + cur = get_item_id(parent_coord.second); } - - return ret; + return 0; }