]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crush: allow an item to be inserted twice
authorSage Weil <sage@inktank.com>
Wed, 20 Mar 2013 13:51:25 +0000 (06:51 -0700)
committerSage Weil <sage@inktank.com>
Thu, 21 Mar 2013 16:57:19 +0000 (09:57 -0700)
Modify insert_item() to let you add an existing item to a new position
in the map.

Signed-off-by: Sage Weil <sage@inktank.com>
src/crush/CrushWrapper.cc

index f8b1b01879e5ec0699b1a645d48848d3fc756939..02f361e8b058fe1460ba7aa8a10031fe5d5e989a 100644 (file)
@@ -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<int,string>::iterator p = type_map.begin(); p != type_map.end(); ++p) {