Hi Thuan

ack from me.

Thanks

Minh

On 16/11/20 12:24 pm, thuan.tran wrote:
AMFD recovery after headless should check if any SI sponsor
under failover to decide SG stable or not.
---
  src/amf/amfd/sg.cc     |  3 ++-
  src/amf/amfd/sgproc.cc |  3 +--
  src/amf/amfd/su.cc     | 19 +++++++++++++++++++
  src/amf/amfd/su.h      |  1 +
  4 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/src/amf/amfd/sg.cc b/src/amf/amfd/sg.cc
index e2c2528c8..6ed585c49 100644
--- a/src/amf/amfd/sg.cc
+++ b/src/amf/amfd/sg.cc
@@ -2405,7 +2405,8 @@ bool AVD_SG::any_assignment_in_progress() {
    for (const auto &su : list_of_su) {
      if (su->any_susi_fsm_in(AVD_SU_SI_STATE_ASGN) ||
          su->any_susi_fsm_in(AVD_SU_SI_STATE_UNASGN) ||
-        su->any_susi_fsm_in(AVD_SU_SI_STATE_MODIFY)) {
+        su->any_susi_fsm_in(AVD_SU_SI_STATE_MODIFY) ||
+        su->any_sponsor_si_under_failover()) {
        pending = true;
        break;
      }
diff --git a/src/amf/amfd/sgproc.cc b/src/amf/amfd/sgproc.cc
index 405e2c45d..7de64f4a8 100644
--- a/src/amf/amfd/sgproc.cc
+++ b/src/amf/amfd/sgproc.cc
@@ -2480,9 +2480,7 @@ uint32_t avd_sg_su_oper_list_add(AVD_CL_CB *cb, AVD_SU 
*su, bool ckpt,
    }
TRACE("added %s to %s", su->name.c_str(), su->sg_of_su->name.c_str());
-
    su_oper_list.push_back(su);
-
    if (!ckpt) {
      // Update to IMM if headless is enabled
      if (cb->scs_absence_max_duration > 0 && wrt_to_imm) {
@@ -2539,6 +2537,7 @@ uint32_t avd_sg_su_oper_list_del(AVD_CL_CB *cb, AVD_SU 
*su, bool ckpt,
      goto done;
    }
+ TRACE("erased %s to %s", su->name.c_str(), su->sg_of_su->name.c_str());
    su_oper_list.erase(elem);
    if (!ckpt) {
      // Update to IMM if headless is enabled
diff --git a/src/amf/amfd/su.cc b/src/amf/amfd/su.cc
index 5a6c69c33..1fe92c16b 100644
--- a/src/amf/amfd/su.cc
+++ b/src/amf/amfd/su.cc
@@ -2692,6 +2692,25 @@ bool AVD_SU::any_susi_fsm_in(uint32_t check_fsm) {
    TRACE_LEAVE();
    return rc;
  }
+/**
+ * @brief    Checks if sponsor SI under failover
+ * @result   true/false
+ */
+bool AVD_SU::any_sponsor_si_under_failover() {
+  TRACE_ENTER2("SU:'%s'", name.c_str());
+  bool rc = false;
+  for (AVD_SU_SI_REL *susi = list_of_susi; susi && rc == false;
+       susi = susi->su_next) {
+    TRACE("SUSI:'%s,%s', si_dep_state:'%d'", susi->su->name.c_str(),
+          susi->si->name.c_str(), susi->si->si_dep_state);
+    if (susi->si->si_dep_state == AVD_SI_FAILOVER_UNDER_PROGRESS) {
+      rc = true;
+      TRACE("Found");
+    }
+  }
+  TRACE_LEAVE();
+  return rc;
+}
  /**
   * @brief  Verify if SU is stable for admin operation on any higher
             level enity like SG, Node and Nodegroup etc.
diff --git a/src/amf/amfd/su.h b/src/amf/amfd/su.h
index f32f3138a..3a6266c7c 100644
--- a/src/amf/amfd/su.h
+++ b/src/amf/amfd/su.h
@@ -146,6 +146,7 @@ class AVD_SU {
    void lock(SaImmOiHandleT immoi_handle, SaInvocationT invocation,
              SaAmfAdminStateT adm_state);
    bool any_susi_fsm_in(uint32_t check_fsm);
+  bool any_sponsor_si_under_failover();
    SaAisErrorT check_su_stability();
    uint32_t curr_num_standby_sis();
    uint32_t curr_num_active_sis();


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

Reply via email to