]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: QuorumService: return health status on get_health()
authorJoao Eduardo Luis <joao.luis@inktank.com>
Fri, 19 Apr 2013 18:26:51 +0000 (19:26 +0100)
committerJoao Eduardo Luis <joao.luis@inktank.com>
Fri, 19 Apr 2013 18:26:51 +0000 (19:26 +0100)
This allows us to return the appropriate overall health status on
Monitor::get_health().

Fixes: 4574
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
src/mon/ConfigKeyService.h
src/mon/DataHealthService.cc
src/mon/DataHealthService.h
src/mon/HealthMonitor.cc
src/mon/HealthMonitor.h
src/mon/HealthService.h
src/mon/Monitor.cc
src/mon/QuorumService.h

index aee85bc08599783ee2e1cf845ea732c707af7744..49e15acdfc652c25f2ada19227b79e446615ea55 100644 (file)
@@ -58,8 +58,11 @@ public:
    * @{
    */
   virtual void init() { }
-  virtual void get_health(Formatter *f,
-                          list<pair<health_status_t,string> > *detail) { }
+  virtual health_status_t get_health(
+                          Formatter *f,
+                          list<pair<health_status_t,string> > *detail) {
+    return HEALTH_OK;
+  }
   virtual bool service_dispatch(Message *m);
 
   virtual void start_epoch() { }
index 2410cbc4d680b142bf7e067750d91c5cc72e840e..d1a227fe0fd66e657cb28012157adc402f100ee5 100644 (file)
@@ -54,8 +54,9 @@ void DataHealthService::start_epoch()
   last_warned_percent = 0;
 }
 
-void DataHealthService::get_health(Formatter *f,
-                                   list<pair<health_status_t,string> > *detail)
+health_status_t DataHealthService::get_health(
+    Formatter *f,
+    list<pair<health_status_t,string> > *detail)
 {
   dout(10) << __func__ << dendl;
   assert(f != NULL);
@@ -63,6 +64,8 @@ void DataHealthService::get_health(Formatter *f,
   f->open_object_section("data_health");
   f->open_array_section("mons");
 
+  health_status_t overall_status = HEALTH_OK;
+
   for (map<entity_inst_t,DataStats>::iterator it = stats.begin();
        it != stats.end(); ++it) {
     string mon_name = mon->monmap->get_name(it->first.addr);
@@ -78,6 +81,9 @@ void DataHealthService::get_health(Formatter *f,
       health_detail = "low disk space!";
     }
 
+    if (overall_status > health_status)
+      overall_status = health_status;
+
     if (detail && health_status != HEALTH_OK) {
       stringstream ss;
       ss << "mon." << mon_name << " addr " << it->first.addr
@@ -101,6 +107,8 @@ void DataHealthService::get_health(Formatter *f,
 
   f->close_section(); // mons
   f->close_section(); // data_health
+
+  return overall_status;
 }
 
 int DataHealthService::update_stats()
index de7ab0ac25877af1f9e6735842a8759b38697914..c94327f31294260282cdf6b2f144a7749a342262 100644 (file)
@@ -75,7 +75,7 @@ public:
     start_tick();
   }
 
-  virtual void get_health(Formatter *f,
+  virtual health_status_t get_health(Formatter *f,
                           list<pair<health_status_t,string> > *detail);
 
   virtual int get_type() {
index cf3d962b2c4f24c3d67c1fb90b413e0b8c4f8c9c..b62ed7da31ec4b8e5cd7b7ff61b9bca94d4f9271 100644 (file)
@@ -78,7 +78,7 @@ void HealthMonitor::service_shutdown()
   services.clear();
 }
 
-void HealthMonitor::get_health(Formatter *f,
+health_status_t HealthMonitor::get_health(Formatter *f,
                                list<pair<health_status_t,string> > *detail) {
   assert(f != NULL);
   f->open_object_section("health");
index 85581edde9b6a4eb3224243a058f5d6061b07aa8..e0255d20081aaeae3968f4b66f93ca49d3c37b73 100644 (file)
@@ -47,7 +47,7 @@ public:
    * @{
    */
   virtual void init();
-  virtual void get_health(Formatter *f,
+  virtual health_status_t get_health(Formatter *f,
                           list<pair<health_status_t,string> > *detail);
   virtual bool service_dispatch(Message *m);
 
index b62ed5991eb4507e3f8a4358d483faa960464cb6..1e041f5739ebde7dd4b00f529aefaa89891b4fe2 100644 (file)
@@ -44,7 +44,7 @@ public:
   HealthService *get() {
     return static_cast<HealthService *>(RefCountedObject::get());
   }
-  virtual void get_health(Formatter *f,
+  virtual health_status_t get_health(Formatter *f,
                           list<pair<health_status_t,string> > *detail) = 0;
   virtual int get_type() = 0;
   virtual string get_name() const = 0;
index e3d33ce9d60987c02d072d1ac0696493db679805..da6a7e662bd775c39316d4ad36a0b3df36a065f7 100644 (file)
@@ -2297,8 +2297,12 @@ void Monitor::get_health(string& status, bufferlist *detailbl, Formatter *f)
   if (f)
     f->close_section();
 
-  if (f)
-    health_monitor->get_health(f, (detailbl ? &detail : NULL));
+  if (f) {
+    health_status_t hmstatus =
+      health_monitor->get_health(f, (detailbl ? &detail : NULL));
+    if (overall > hmstatus)
+      overall = hmstatus;
+  }
 
   stringstream fss;
   fss << overall;
index dfa4f4165e9521d6aa8b74a20f55a6570bd3d8c6..7506421caf4e4bf5ef19fc12d3eb6d8dc71c243d 100644 (file)
@@ -133,7 +133,7 @@ public:
 
   virtual void init() { }
 
-  virtual void get_health(Formatter *f,
+  virtual health_status_t get_health(Formatter *f,
                           list<pair<health_status_t,string> > *detail) = 0;
   virtual int get_type() = 0;
   virtual string get_name() const = 0;