]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osdmap: add NOUP, NODOWN, NOIN, NOOUT flags
authorSage Weil <sage.weil@dreamhost.com>
Tue, 24 Apr 2012 03:30:14 +0000 (20:30 -0700)
committerSage Weil <sage@newdream.net>
Tue, 24 Apr 2012 21:10:46 +0000 (14:10 -0700)
These prevent OSDs from being marked up, down, in, or out, respectively.

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

index 44f7162bd15ee8d93f7ae00ab0590a436ae57730..3a83c4f9f4e7951a9e807ac1e82ab1d541bcc128 100644 (file)
@@ -134,6 +134,10 @@ extern const char *ceph_osd_state_name(int s);
 #define CEPH_OSDMAP_PAUSERD  (1<<2)  /* pause all reads */
 #define CEPH_OSDMAP_PAUSEWR  (1<<3)  /* pause all writes */
 #define CEPH_OSDMAP_PAUSEREC (1<<4)  /* pause recovery */
+#define CEPH_OSDMAP_NOUP     (1<<5)  /* block osd boot */
+#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 */
 
 /*
  * The error code to return when an OSD can't handle a write
index 0189fca617c9ce820186eddf417e1bf5d48240bd..445f85fa4f943d6e858b5549d23d12c9128262ed 100644 (file)
@@ -904,24 +904,37 @@ void OSDMap::generate_test_instances(list<OSDMap*>& o)
   delete cct;
 }
 
-string OSDMap::get_flag_string() const
+string OSDMap::get_flag_string(unsigned f)
 {
   string s;
-  if (test_flag(CEPH_OSDMAP_NEARFULL))
+  if ( f& CEPH_OSDMAP_NEARFULL)
     s += ",nearfull";
-  if (test_flag(CEPH_OSDMAP_FULL))
+  if (f & CEPH_OSDMAP_FULL)
     s += ",full";
-  if (test_flag(CEPH_OSDMAP_PAUSERD))
+  if (f & CEPH_OSDMAP_PAUSERD)
     s += ",pauserd";
-  if (test_flag(CEPH_OSDMAP_PAUSEWR))
+  if (f & CEPH_OSDMAP_PAUSEWR)
     s += ",pausewr";
-  if (test_flag(CEPH_OSDMAP_PAUSEREC))
+  if (f & CEPH_OSDMAP_PAUSEREC)
     s += ",pauserec";
+  if (f & CEPH_OSDMAP_NOUP)
+    s += ",no-up";
+  if (f & CEPH_OSDMAP_NODOWN)
+    s += ",no-down";
+  if (f & CEPH_OSDMAP_NOOUT)
+    s += ",no-out";
+  if (f & CEPH_OSDMAP_NOIN)
+    s += ",no-in";
   if (s.length())
     s = s.erase(0, 1);
   return s;
 }
 
+string OSDMap::get_flag_string() const
+{
+  return get_flag_string(flags);
+}
+
 struct qi {
   int item;
   int depth;
index 196c52e9261b69508c66b055776c52abcb4f7216..4ac784acdfb3425c250e7e0ea7922416e2eefa21 100644 (file)
@@ -681,6 +681,7 @@ public:
   void print_tree(ostream& out) const;
 
   string get_flag_string() const;
+  static string get_flag_string(unsigned flags);
   void dump_json(ostream& out) const;
   void dump(Formatter *f) const;
   static void generate_test_instances(list<OSDMap*>& o);