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