From 6003325d24272642ec56502c59c61977e3afd45b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 23 Apr 2012 20:30:14 -0700 Subject: [PATCH] osdmap: add NOUP, NODOWN, NOIN, NOOUT flags These prevent OSDs from being marked up, down, in, or out, respectively. Signed-off-by: Sage Weil --- src/include/rados.h | 4 ++++ src/osd/OSDMap.cc | 25 +++++++++++++++++++------ src/osd/OSDMap.h | 1 + 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/include/rados.h b/src/include/rados.h index 44f7162bd15ee..3a83c4f9f4e79 100644 --- a/src/include/rados.h +++ b/src/include/rados.h @@ -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 diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index 0189fca617c9c..445f85fa4f943 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -904,24 +904,37 @@ void OSDMap::generate_test_instances(list& 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; diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index 196c52e9261b6..4ac784acdfb34 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -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& o); -- 2.39.5