osaf/services/saf/amf/amfd/include/sg.h  |   1 +
 osaf/services/saf/amf/amfd/nodegroup.cc  |   4 +-
 osaf/services/saf/amf/amfd/sg_npm_fsm.cc |  62 ++++++++++++++++++++++++++++++-
 3 files changed, 62 insertions(+), 5 deletions(-)


Currently 2N, N-Way Active and NoRed models are supported for lock, shutdown,
lock-in and unlock-in admin operations on NGs.

This patch supports NplusM model also.

diff --git a/osaf/services/saf/amf/amfd/include/sg.h 
b/osaf/services/saf/amf/amfd/include/sg.h
--- a/osaf/services/saf/amf/amfd/include/sg.h
+++ b/osaf/services/saf/amf/amfd/include/sg.h
@@ -507,6 +507,7 @@ public:
        uint32_t susi_failed(AVD_CL_CB *cb, AVD_SU *su,
                struct avd_su_si_rel_tag *susi, AVSV_SUSI_ACT act, 
SaAmfHAStateT state);
         void node_fail_si_oper(AVD_CL_CB *cb, AVD_SU *su);
+       void ng_admin(AVD_SU *su, AVD_AMF_NG *ng);
         
 private:
         uint32_t su_fault_su_oper(AVD_CL_CB *cb, AVD_SU *su);
diff --git a/osaf/services/saf/amf/amfd/nodegroup.cc 
b/osaf/services/saf/amf/amfd/nodegroup.cc
--- a/osaf/services/saf/amf/amfd/nodegroup.cc
+++ b/osaf/services/saf/amf/amfd/nodegroup.cc
@@ -687,6 +687,7 @@ void avd_ng_admin_state_set(AVD_AMF_NG* 
        avd_send_admin_state_chg_ntf(&ng->name,
                        (SaAmfNotificationMinorIdT)SA_AMF_NTFID_NG_ADMIN_STATE,
                        old_state, ng->saAmfNGAdminState);
+       TRACE_LEAVE();
 }
 /**
  * @brief  Verify if Node is stable for admin operation on Nodegroup etc.
@@ -749,8 +750,7 @@ static SaAisErrorT check_red_model_servi
                        LOG_NO("service outage for '%s' because of 
shutdown/lock "
                                        "on 
'%s'",sg->name.value,ng->name.value);
 
-               if ((sg->sg_redundancy_model == SA_AMF_N_WAY_REDUNDANCY_MODEL) 
||
-                               (sg->sg_redundancy_model == 
SA_AMF_NPM_REDUNDANCY_MODEL)) { 
+               if (sg->sg_redundancy_model == SA_AMF_N_WAY_REDUNDANCY_MODEL) { 
                        LOG_NO("Admin op on '%s'  hosting SUs of '%s' with 
redundancy '%u' "
                                        "is not supported",ng->name.value, 
sg->name.value,
                                        sg->sg_redundancy_model);
diff --git a/osaf/services/saf/amf/amfd/sg_npm_fsm.cc 
b/osaf/services/saf/amf/amfd/sg_npm_fsm.cc
--- a/osaf/services/saf/amf/amfd/sg_npm_fsm.cc
+++ b/osaf/services/saf/amf/amfd/sg_npm_fsm.cc
@@ -120,16 +120,16 @@ static AVD_SU_SI_REL *avd_sg_npm_su_othr
                if (i_susi->si->list_of_sisu != i_susi) {
                        o_susi = i_susi->si->list_of_sisu;
                        if (o_susi->fsm != AVD_SU_SI_STATE_UNASGN)
-                               return o_susi;
+                               break;
                } else if (i_susi->si->list_of_sisu->si_next != 
AVD_SU_SI_REL_NULL) {
                        o_susi = i_susi->si->list_of_sisu->si_next;
                        if (o_susi->fsm != AVD_SU_SI_STATE_UNASGN)
-                               return o_susi;
+                               break;
                }
 
                i_susi = i_susi->su_next;
        }
-
+       TRACE_LEAVE2("o_susi:'%p'",o_susi);
        return o_susi;
 }
 
@@ -4452,6 +4452,62 @@ uint32_t SG_NPM::sg_admin_down(AVD_CL_CB
        return NCSCC_RC_SUCCESS;
 }
 
+/*
+ * @brief      Handles modification of assignments in SU of NpM SG
+ *             because of lock or shutdown operation on Node group.
+ *             If SU does not have any SIs assigned to it, AMF will try
+ *             to instantiate new SUs in the SG. If SU has assignments,
+ *             then depending upon lock or shutdown operation, quiesced
+ *             or quiescing state will be sent for active SIs in SU.
+ *            If SU has only standby assignments then remove the assignments.
+ *
+ * @param[in]  ptr to SU
+ * @param[in]  ptr to nodegroup AVD_AMF_NG.
+ */
+void SG_NPM::ng_admin(AVD_SU *su, AVD_AMF_NG *ng) 
+{
+  SaAmfHAStateT ha_state;
+
+  TRACE_ENTER2("'%s', sg_fsm_state:%u",su->name.value,
+    su->sg_of_su->sg_fsm_state);
+
+  if (su->list_of_susi == nullptr) {
+    avd_sg_app_su_inst_func(avd_cb, su->sg_of_su);
+    return;
+  }
+
+  if (ng->saAmfNGAdminState == SA_AMF_ADMIN_SHUTTING_DOWN)
+    ha_state = SA_AMF_HA_QUIESCING;
+  else
+    ha_state = SA_AMF_HA_QUIESCED;
+
+  if (su->list_of_susi->state == SA_AMF_HA_ACTIVE) {
+    if (avd_sg_su_si_mod_snd(avd_cb, su, ha_state) == NCSCC_RC_FAILURE) {
+      LOG_ER("quiescing/quiesced state transtion failed for 
'%s'",su->name.value);
+      goto done;
+    }
+  } else {
+    if (avd_sg_su_si_del_snd(avd_cb, su) == NCSCC_RC_FAILURE) {
+      LOG_ER("removal of standby assignment failed for '%s'",su->name.value);
+      goto done;
+    }
+  }
+
+  avd_sg_su_oper_list_add(avd_cb, su, false);
+  su->sg_of_su->set_fsm_state(AVD_SG_FSM_SG_REALIGN);
+
+  //Increment node counter for tracking status of ng operation.
+  if ((su->any_susi_fsm_in_modify() == true) ||
+       (su->any_susi_fsm_in_unasgn() == true)) {
+    su->su_on_node->su_cnt_admin_oper++;
+    TRACE("node:%s, su_cnt_admin_oper:%u", su->su_on_node->name.value,
+      su->su_on_node->su_cnt_admin_oper);
+  }
+done:
+  TRACE_LEAVE();
+  return;
+}
+
 SG_NPM::~SG_NPM() {
 }
 

------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity planning
reports.http://sdm.link/zohodev2dev
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to