]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osdmap: add NOBACKFILL flag
authorSage Weil <sage@inktank.com>
Fri, 24 Aug 2012 01:00:57 +0000 (18:00 -0700)
committerSage Weil <sage@inktank.com>
Fri, 31 Aug 2012 22:12:38 +0000 (15:12 -0700)
This will tell the OSDs to please not initiate any backfill operations.

Signed-off-by: Sage Weil <sage@inktank.com>
src/include/rados.h
src/mon/OSDMonitor.cc
src/osd/OSDMap.cc

index 679b90c353e7307bd25478759dac5a8a5ff2cc26..01d2f6d8722497b4148aac06551b332a2490688e 100644 (file)
@@ -130,6 +130,7 @@ extern const char *ceph_osd_state_name(int s);
 #define CEPH_OSDMAP_NODOWN   (1<<6)  /* block osd mark-down/failure */
 #define CEPH_OSDMAP_NOOUT    (1<<7)  /* block osd auto mark-out */
 #define CEPH_OSDMAP_NOIN     (1<<8)  /* block osd auto mark-in */
+#define CEPH_OSDMAP_NOBACKFILL (1<<9) /* block osd backfill */
 
 /*
  * The error code to return when an OSD can't handle a write
index 88590c254a1739bde52a4761c6b9c2156018753e..1988010f0b3f14457b209970eb015749179b1847 100644 (file)
@@ -2073,6 +2073,12 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
     else if (m->cmd.size() == 3 && m->cmd[1] == "unset" && m->cmd[2] == "noin") {
       return prepare_unset_flag(m, CEPH_OSDMAP_NOIN);
     }
+    else if (m->cmd.size() == 3 && m->cmd[1] == "set" && m->cmd[2] == "nobackfill") {
+      return prepare_set_flag(m, CEPH_OSDMAP_NOBACKFILL);
+    }
+    else if (m->cmd.size() == 3 && m->cmd[1] == "unset" && m->cmd[2] == "nobackfill") {
+      return prepare_unset_flag(m, CEPH_OSDMAP_NOBACKFILL);
+    }
     else if (m->cmd[1] == "cluster_snap" && m->cmd.size() == 3) {
       // ** DISABLE THIS FOR NOW **
       ss << "cluster snapshot currently disabled (broken implementation)";
index 960f02d9b8a210cecdad38447cc4388caf42a94c..7a93562091e3e61f0d271fd123c5a8474b50b022 100644 (file)
@@ -1264,6 +1264,8 @@ string OSDMap::get_flag_string(unsigned f)
     s += ",no-out";
   if (f & CEPH_OSDMAP_NOIN)
     s += ",no-in";
+  if (f & CEPH_OSDMAP_NOBACKFILL)
+    s += ",no-backfill";
   if (s.length())
     s = s.erase(0, 1);
   return s;