]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: add 'ceph osd rm N...' command
authorSage Weil <sage@newdream.net>
Tue, 3 May 2011 19:37:33 +0000 (12:37 -0700)
committerSage Weil <sage@newdream.net>
Tue, 3 May 2011 19:37:33 +0000 (12:37 -0700)
So we can mark an old osd as deleted and have it not appear in the osdmap
dump, summary count.

Signed-off-by: Sage Weil <sage@newdream.net>
src/mon/OSDMonitor.cc

index d25569e370fa5580bac283bb349127333e0d7e8a..a94ae07bcc7a23aa96de948c733029e49d6c207a 100644 (file)
@@ -1530,6 +1530,29 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
        return true;
       }
     }
+    else if (m->cmd[1] == "rm" && m->cmd.size() >= 3) {
+      bool any = false;
+      for (unsigned j = 2; j < m->cmd.size(); j++) {
+       long osd = strtol(m->cmd[2].c_str(), 0, 10);
+       if (!osdmap.exists(osd)) {
+         ss << "osd" << osd << " does not exist";
+       } else if (osdmap.is_up(osd)) {
+         ss << "osd" << osd << " is still up";
+       } else {
+         pending_inc.new_state[osd] = CEPH_OSD_EXISTS;
+         if (any)
+           ss << ", osd" << osd;
+         else 
+           ss << "marked dne osd" << osd;
+         any = true;
+       }
+      }
+      if (any) {
+       getline(ss, rs);
+       paxos->wait_for_commit(new Monitor::C_Command(mon, m, 0, rs, paxos->get_version()));
+       return true;
+      }
+    }
     else if (m->cmd[1] == "blacklist" && m->cmd.size() >= 4) {
       entity_addr_t addr;
       if (!addr.parse(m->cmd[3].c_str(), 0))