From: Sage Weil Date: Wed, 20 Mar 2013 13:51:25 +0000 (-0700) Subject: crush: allow an item to be inserted twice X-Git-Tag: v0.62~177^2~13 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4e2557a038dc1e8c68993ad8571d74e2eb8ea90a;p=ceph.git 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 --- diff --git a/src/crush/CrushWrapper.cc b/src/crush/CrushWrapper.cc index f8b1b01879e5..02f361e8b058 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) {