- Split-brain recovery in headless enable, IMMND may expected restart.
If AMFND not wait IMMND restart but reinit CLM, CLM callback trigger,
clm_to_amf_node() is called then AMFND stuck in init IMM OM causes delay
restart IMMND, delay resend node_up then AMFD will order reboot node.
- Slow down this reinit CLM help avoid node unexpected reboot order.
---
 src/amf/amfnd/avnd_cb.h | 1 +
 src/amf/amfnd/clc.cc    | 7 +++++++
 src/amf/amfnd/clm.cc    | 9 +++++++++
 src/amf/amfnd/main.cc   | 1 +
 4 files changed, 18 insertions(+)

diff --git a/src/amf/amfnd/avnd_cb.h b/src/amf/amfnd/avnd_cb.h
index 8b0cc2304..0fa0590ff 100644
--- a/src/amf/amfnd/avnd_cb.h
+++ b/src/amf/amfnd/avnd_cb.h
@@ -125,6 +125,7 @@ typedef struct avnd_cb_tag {
   SaTimeT scs_absence_max_duration;
   /* the timer for supervision of the absence of SC */
   AVND_TMR sc_absence_tmr;
+  bool immnd_down;
 } AVND_CB;
 
 #define AVND_CB_NULL ((AVND_CB *)0)
diff --git a/src/amf/amfnd/clc.cc b/src/amf/amfnd/clc.cc
index f78e1a707..e8e309051 100644
--- a/src/amf/amfnd/clc.cc
+++ b/src/amf/amfnd/clc.cc
@@ -3333,6 +3333,13 @@ uint32_t avnd_comp_clc_cmd_execute(AVND_CB *cb, 
AVND_COMP *comp,
     // outcome of command is reported in comp_clc_resp_callback()
   }
 
+  if (comp->name.find("safComp=IMMND,") != std::string::npos) {
+    if (cmd_type == AVND_COMP_CLC_CMD_TYPE_CLEANUP)
+      cb->immnd_down = true;
+    else if (cmd_type == AVND_COMP_CLC_CMD_TYPE_INSTANTIATE)
+      cb->immnd_down = false;
+  }
+
   TRACE_2("success");
   goto done;
 
diff --git a/src/amf/amfnd/clm.cc b/src/amf/amfnd/clm.cc
index 06eb229c7..01151b2a7 100644
--- a/src/amf/amfnd/clm.cc
+++ b/src/amf/amfnd/clm.cc
@@ -312,6 +312,15 @@ done:
 static void *avnd_clm_init_thread(void *arg) {
   TRACE_ENTER();
   AVND_CB *cb = static_cast<AVND_CB *>(arg);
+  int count = 0;
+
+  while (cb->immnd_down && count++ < 100)
+    osaf_nanosleep(&kHundredMilliseconds);
+    /* Split-brain recovery in headless enable, IMMND may expected restart.
+     * If AMFND not wait IMMND restart but reinit CLM, CLM callback trigger,
+     * clm_to_amf_node() is called then AMFND stuck in init IMM OM causes delay
+     * restart IMMND, delay resend node_up then AMFD will order reboot node.
+     * Slow down this reinit CLM help avoid node unexpected reboot order */
 
   avnd_clm_init(cb);
 
diff --git a/src/amf/amfnd/main.cc b/src/amf/amfnd/main.cc
index d7857fabe..cef0543e6 100644
--- a/src/amf/amfnd/main.cc
+++ b/src/amf/amfnd/main.cc
@@ -334,6 +334,7 @@ AVND_CB *avnd_cb_create() {
 
   cb->is_avd_down = true;
   cb->amfd_sync_required = false;
+  cb->immnd_down = false;
 
   // retrieve hydra configuration from IMM
   hydra_config_get(cb);
-- 
2.17.1



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

Reply via email to