ack, review only. Thanks/Minh

On 21/1/19 2:52 pm, Gary Lee wrote:
If relaxed node promotion is enabled, allow a SC to remain
active if the peer SC can be seen, even if access to the
consensus service is lost.
---
  src/amf/amfd/ndfsm.cc  |  2 +-
  src/amf/amfd/ndproc.cc | 13 +++++++++++--
  src/amf/amfd/proc.h    |  2 +-
  3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/amf/amfd/ndfsm.cc b/src/amf/amfd/ndfsm.cc
index 4146ddc..8c8f3c5 100644
--- a/src/amf/amfd/ndfsm.cc
+++ b/src/amf/amfd/ndfsm.cc
@@ -817,7 +817,7 @@ void avd_mds_avnd_down_evh(AVD_CL_CB *cb, AVD_EVT *evt) {
        if (cb->node_failover_delay == 0) {
          avd_node_failover(node);
        }
-      check_quorum();
+      check_quorum(cb);
        node->node_info.member = SA_FALSE;
        // Update standby out of sync if standby sc goes down
        if (avd_cb->node_id_avd_other == node->node_info.nodeId) {
diff --git a/src/amf/amfd/ndproc.cc b/src/amf/amfd/ndproc.cc
index c4eebb1..ec347fc 100644
--- a/src/amf/amfd/ndproc.cc
+++ b/src/amf/amfd/ndproc.cc
@@ -1245,15 +1245,24 @@ void avd_node_failover(AVD_AVND *node, const bool 
mw_only) {
    TRACE_LEAVE();
  }
-void check_quorum() {
+void check_quorum(AVD_CL_CB *cb) {
    TRACE_ENTER();
Consensus consensus_service;
    if (consensus_service.IsRemoteFencingEnabled() == false &&
        consensus_service.IsWritable() == false) {
+    // if relaxed mode is enabled, ignore failure if peer SC is up
+    if (consensus_service.IsRelaxedNodePromotionEnabled() == true) {
+      AVD_AVND* peer = avd_node_find_nodeid(cb->node_id_avd_other);
+      if (peer != nullptr && peer->node_state == AVD_AVND_STATE_PRESENT) {
+        LOG_NO("Relaxed node promotion is enabled, peer SC is connected");
+        return;
+      }
+    }
+
      // remote fencing is disabled and we have lost write access
      // reboot this node to prevent split brain
      opensaf_reboot(0, nullptr,
        "Quorum lost. Rebooting this node to prevent split-brain");
    }
-}
\ No newline at end of file
+}
diff --git a/src/amf/amfd/proc.h b/src/amf/amfd/proc.h
index a378218..f1dc7ba 100644
--- a/src/amf/amfd/proc.h
+++ b/src/amf/amfd/proc.h
@@ -96,7 +96,7 @@ void avd_process_hb_event(AVD_CL_CB *cb_now, struct AVD_EVT 
*evt);
  extern void avd_node_mark_absent(AVD_AVND *node);
  extern void avd_tmr_snd_hb_evh(AVD_CL_CB *cb, AVD_EVT *evt);
  extern void avd_node_failover(AVD_AVND *node, const bool mw_only = false);
-extern void check_quorum();
+extern void check_quorum(AVD_CL_CB *cb);
  extern AVD_SU *get_other_su_from_oper_list(AVD_SU *su);
  extern void su_complete_admin_op(AVD_SU *su, SaAisErrorT result);
  extern void comp_complete_admin_op(AVD_COMP *comp, SaAisErrorT result);


_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to