From 4e2557a038dc1e8c68993ad8571d74e2eb8ea90a Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 20 Mar 2013 06:51:25 -0700 Subject: [PATCH] crush: allow an item to be inserted twice Modify insert_item() to let you add an existing item to a new position in the map. Signed-off-by: Sage Weil --- src/crush/CrushWrapper.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/crush/CrushWrapper.cc b/src/crush/CrushWrapper.cc index f8b1b01879e5e..02f361e8b058f 100644 --- a/src/crush/CrushWrapper.cc +++ b/src/crush/CrushWrapper.cc @@ -241,14 +241,16 @@ int CrushWrapper::insert_item(CephContext *cct, int item, float weight, string n ldout(cct, 5) << "insert_item item " << item << " weight " << weight << " name " << name << " loc " << loc << dendl; - if (name_exists(name.c_str())) { - ldout(cct, 1) << "error: device name '" << name << "' already exists as id " - << get_item_id(name.c_str()) << dendl; - return -EEXIST; + if (name_exists(name)) { + if (get_item_id(name) != item) { + ldout(cct, 10) << "device name '" << name << "' already exists as id " + << get_item_id(name.c_str()) << dendl; + return -EEXIST; + } + } else { + set_item_name(item, name); } - set_item_name(item, name.c_str()); - int cur = item; for (map::iterator p = type_map.begin(); p != type_map.end(); ++p) { -- 2.39.5