]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: 'osd down ... --definitely-dead'
authorSage Weil <sage@redhat.com>
Tue, 18 Jun 2019 16:47:05 +0000 (11:47 -0500)
committerSage Weil <sage@redhat.com>
Thu, 25 Jul 2019 20:55:35 +0000 (15:55 -0500)
Like 'osd down', but we also set dead_epoch.  Should only be used if we
know the process/host is already completely dead and unresponsive.

Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/MonCommands.h
src/mon/OSDMonitor.cc

index fc86c4d2c36c9c1cc0ef416682e5daea208d6c4e..a507b8b38b989a39c4be554e6f21b29cad9fbbdc 100644 (file)
@@ -813,7 +813,8 @@ COMMAND("osd require-osd-release "\
        "set the minimum allowed OSD release to participate in the cluster",
        "osd", "rw")
 COMMAND("osd down " \
-       "type=CephString,name=ids,n=N", \
+       "name=ids,type=CephString,n=N "
+       "name=definitely_dead,type=CephBool,req=false", \
        "set osd(s) <id> [<id>...] down, " \
         "or use <any|all> to set all osds down", \
         "osd", "rw")
index 0944f8164cf052a29af3e9e42b1254458cd56e70..973a6e06ec1a2358e14861a5801d6bc3a907f1be 100644 (file)
@@ -10780,9 +10780,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     bool any = false;
     bool stop = false;
     bool verbose = true;
+    bool definitely_dead = false;
 
     vector<string> idvec;
     cmd_getval(cct, cmdmap, "ids", idvec);
+    cmd_getval(cct, cmdmap, "definitely_dead", definitely_dead);
+    derr << "definitely_dead " << (int)definitely_dead << dendl;
     for (unsigned j = 0; j < idvec.size() && !stop; j++) {
       set<int> osds;
 
@@ -10821,6 +10824,15 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
            ss << "marked down osd." << osd << ". ";
            any = true;
          }
+         if (definitely_dead) {
+           if (!pending_inc.new_xinfo.count(osd)) {
+             pending_inc.new_xinfo[osd] = osdmap.osd_xinfo[osd];
+           }
+           if (pending_inc.new_xinfo[osd].dead_epoch < pending_inc.epoch) {
+             any = true;
+           }
+           pending_inc.new_xinfo[osd].dead_epoch = pending_inc.epoch;
+         }
         } else if (prefix == "osd out") {
          if (osdmap.is_out(osd)) {
             if (verbose)