]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/HealthMonitor: trigger a proposal if stat updated 16477/head
authorKefu Chai <kchai@redhat.com>
Fri, 21 Jul 2017 10:00:26 +0000 (18:00 +0800)
committerKefu Chai <kchai@redhat.com>
Fri, 21 Jul 2017 10:31:53 +0000 (18:31 +0800)
leader should always propose if the peon update it with new health stats

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/mon/HealthMonitor.cc
src/mon/HealthMonitor.h

index 32f62667e25f169883efe64147968cea83a4b6e8..af2af807ead0beec55ca8bfdef45922777d96cf8 100644 (file)
@@ -152,7 +152,15 @@ version_t HealthMonitor::get_trim_to()
 
 bool HealthMonitor::preprocess_query(MonOpRequestRef op)
 {
-  switch (op->get_req()->get_type()) {
+  return false;
+}
+
+bool HealthMonitor::prepare_update(MonOpRequestRef op)
+{
+  Message *m = op->get_req();
+  dout(7) << "prepare_update " << *m
+         << " from " << m->get_orig_source_inst() << dendl;
+  switch (m->get_type()) {
   case MSG_MON_HEALTH:
     {
       MMonHealth *hm = static_cast<MMonHealth*>(op->get_req());
@@ -164,22 +172,18 @@ bool HealthMonitor::preprocess_query(MonOpRequestRef op)
       }
       return services[service_type]->service_dispatch(op);
     }
-
   case MSG_MON_HEALTH_CHECKS:
-    return preprocess_health_checks(op);
+    return prepare_health_checks(op);
+  default:
+    return false;
   }
-  return false;
-}
-
-bool HealthMonitor::prepare_update(MonOpRequestRef op)
-{
-  return false;
 }
 
-bool HealthMonitor::preprocess_health_checks(MonOpRequestRef op)
+bool HealthMonitor::prepare_health_checks(MonOpRequestRef op)
 {
   MMonHealthChecks *m = static_cast<MMonHealthChecks*>(op->get_req());
-  quorum_checks[m->get_source().num()] = m->health_checks;
+  // no need to check if it's changed, the peon has done so
+  quorum_checks[m->get_source().num()] = std::move(m->health_checks);
   return true;
 }
 
index 5387ce0340a8978454e2fe0e4c728d1799d38b6c..342778dbc22312af2b1b2e3c4b411f96df79c2f3 100644 (file)
@@ -47,7 +47,6 @@ public:
   bool preprocess_query(MonOpRequestRef op) override;
   bool prepare_update(MonOpRequestRef op) override;
 
-  bool preprocess_health_checks(MonOpRequestRef op);
   bool prepare_health_checks(MonOpRequestRef op);
 
   bool check_leader_health();