osaf/services/saf/amf/amfd/include/susi.h |   2 +
 osaf/services/saf/amf/amfd/sg_2n_fsm.cc   |  48 ++-------------
 osaf/services/saf/amf/amfd/sgproc.cc      |  59 +-------------------
 osaf/services/saf/amf/amfd/siass.cc       |  90 +++++++++++++++++++++++++++++++
 4 files changed, 101 insertions(+), 98 deletions(-)


In this patch two functions have been renamed and moved from sg_2n_fsm.cc and 
sgproc.cc
to siass.cc. These functions will used by other red models also in the context 
of SI dependency
feature. At present sg_2n_fsm is using these functions, so names have been 
changed in sg_2n_fsm.cc

diff --git a/osaf/services/saf/amf/amfd/include/susi.h 
b/osaf/services/saf/amf/amfd/include/susi.h
--- a/osaf/services/saf/amf/amfd/include/susi.h
+++ b/osaf/services/saf/amf/amfd/include/susi.h
@@ -160,4 +160,6 @@ extern uint32_t avd_susi_role_failover(A
 extern uint32_t avd_susi_role_failover2(AVD_SU_SI_REL *sisu, AVD_SU *su);
 extern bool si_assignment_state_check(AVD_SI *si);
 extern SaAmfHAStateT avd_su_state_determine(AVD_SU *su);
+extern AVD_SU_SI_REL *avd_siass_next_susi_to_quiesce(const AVD_SU_SI_REL 
*susi);
+extern bool avd_susi_quiesced_canbe_given(const AVD_SU_SI_REL *susi);
 #endif
diff --git a/osaf/services/saf/amf/amfd/sg_2n_fsm.cc 
b/osaf/services/saf/amf/amfd/sg_2n_fsm.cc
--- a/osaf/services/saf/amf/amfd/sg_2n_fsm.cc
+++ b/osaf/services/saf/amf/amfd/sg_2n_fsm.cc
@@ -149,38 +149,6 @@ bool all_assignments_done(const AVD_SU *
        return true;
 }
 /**
- * @brief        Quiesced role modifications has to be done in reverse order 
of si-si dependency.        
- *               When susi response is received for quiesced modification, 
this routine finds 
- *               which is the next susi to be quiesced based on si-si 
dependency. 
- *
- * @param [in]   susi for which we got the response 
- *
- * @returns      pointer to AVD_SU_SI_REL 
- */
-static AVD_SU_SI_REL *next_susi_tobe_quiesced(const AVD_SU_SI_REL *susi)
-{
-       AVD_SU_SI_REL *a_susi;
-       AVD_SPONS_SI_NODE *spons_si_node;
-
-       TRACE_ENTER2("'%s' '%s'", susi->si->name.value, susi->su->name.value);
-
-       for (a_susi = susi->su->list_of_susi; a_susi; a_susi = a_susi->su_next) 
{
-               if (a_susi->state == SA_AMF_HA_ACTIVE) {
-                       for (spons_si_node = 
susi->si->spons_si_list;spons_si_node;spons_si_node = spons_si_node->next) {
-                               if (spons_si_node->si == a_susi->si) {
-                                       /* Check if quiesced response came for 
all of its dependents */ 
-                                       if 
(avd_sidep_quiesced_done_for_all_dependents(spons_si_node->si, susi->su)) {
-                                               goto done;
-                                       }
-                               }
-                       }
-               }
-       }
-done:
-       TRACE_LEAVE2("next_susi: %s",a_susi ? a_susi->si->name.value : NULL);
-       return a_susi;
-}
-/**
  * @brief       Checks if any assignment is changing into quiesced state. If 
yes, then return true.
  *              If all are quisced then return false.
  *
@@ -1870,14 +1838,14 @@ static uint32_t avd_sg_2n_susi_sucss_sg_
                                        }
                                }
                        } else {
-                               n_susi = next_susi_tobe_quiesced(susi);
+                               n_susi = avd_siass_next_susi_to_quiesce(susi);
                                while (n_susi) {
                                        rc = avd_susi_mod_send(n_susi, 
SA_AMF_HA_QUIESCED);
                                        if (rc == NCSCC_RC_FAILURE) {
                                                LOG_ER("%s:%u: %s ", __FILE__, 
__LINE__, su->name.value);
                                                goto done;
                                        }
-                                       n_susi = next_susi_tobe_quiesced(susi);
+                                       n_susi = 
avd_siass_next_susi_to_quiesce(susi);
                                }
                        }
                        goto done;
@@ -1964,7 +1932,7 @@ static uint32_t avd_sg_2n_susi_sucss_su_
                                        m_AVD_SET_SG_FSM(cb, (su->sg_of_su), 
AVD_SG_FSM_SG_REALIGN);
                                }
                        } else {
-                               n_susi = next_susi_tobe_quiesced(susi);
+                               n_susi = avd_siass_next_susi_to_quiesce(susi);
                                while (n_susi) {
                                        /* determine the modify-state for 
active sis */
                                        if ((su->saAmfSUAdminState == 
SA_AMF_ADMIN_SHUTTING_DOWN) ||
@@ -1979,7 +1947,7 @@ static uint32_t avd_sg_2n_susi_sucss_su_
                                                LOG_ER("%s:%u: %s ", __FILE__, 
__LINE__, su->name.value);
                                                goto done;
                                        }
-                                       n_susi = next_susi_tobe_quiesced(susi);
+                                       n_susi = 
avd_siass_next_susi_to_quiesce(susi);
                                }
                        }
                } else {
@@ -2534,7 +2502,7 @@ uint32_t avd_sg_2n_susi_sucss_func(AVD_C
                                        }
 
                                } else {
-                                       n_susi = next_susi_tobe_quiesced(susi);
+                                       n_susi = 
avd_siass_next_susi_to_quiesce(susi);
                                        while (n_susi) {
 
                                                rc = avd_susi_mod_send(n_susi, 
state);
@@ -2542,7 +2510,7 @@ uint32_t avd_sg_2n_susi_sucss_func(AVD_C
                                                        LOG_ER("%s:%u: %s ", 
__FILE__, __LINE__, su->name.value);
                                                        goto done;
                                                }
-                                               n_susi = 
next_susi_tobe_quiesced(susi);
+                                               n_susi = 
avd_siass_next_susi_to_quiesce(susi);
                                        }
                                }
                        } else {
@@ -2605,14 +2573,14 @@ uint32_t avd_sg_2n_susi_sucss_func(AVD_C
                                                a_su = a_su->sg_list_su_next;
                                        }
                                } else {
-                                       n_susi = next_susi_tobe_quiesced(susi);
+                                       n_susi = 
avd_siass_next_susi_to_quiesce(susi);
                                        while (n_susi) {
                                                rc = avd_susi_mod_send(n_susi, 
static_cast<SaAmfHAStateT>(su->sg_of_su->saAmfSGAdminState));
                                                if (rc == NCSCC_RC_FAILURE) {
                                                        LOG_ER("%s:%u: %s ", 
__FILE__, __LINE__, su->name.value);
                                                        goto done;
                                                }
-                                               n_susi = 
next_susi_tobe_quiesced(susi);
+                                               n_susi = 
avd_siass_next_susi_to_quiesce(susi);
                                        }
                                }
                        } else {
diff --git a/osaf/services/saf/amf/amfd/sgproc.cc 
b/osaf/services/saf/amf/amfd/sgproc.cc
--- a/osaf/services/saf/amf/amfd/sgproc.cc
+++ b/osaf/services/saf/amf/amfd/sgproc.cc
@@ -1897,63 +1897,6 @@ done:
        return rc;
 }
 /**
- * @brief      Checks whether quiesced role can be given to susi or not 
- *
- * @param[in]   susi
- *
- * @return     true/false 
- **/
-bool  quiesc_role_canbe_given_to_susi(const AVD_SU_SI_REL *susi)
-{
-       AVD_SI_SI_DEP *si_dep_rec;
-       AVD_SI *dep_si;
-       AVD_SI_SI_DEP_INDX si_indx;
-       AVD_SU_SI_REL *sisu;
-       bool quiesc_role = true;
-
-       TRACE_ENTER2("%s %s", susi->su->name.value, susi->si->name.value);
-
-       if (!susi->si->num_dependents) {
-               /* This SI doesnot have any dependents on it, so quiesced role 
can be given */
-               return quiesc_role;
-       } else {
-               /* Check if any of its dependents assigned to same SU for which 
quiesced role is not yet given */
-               memset(&si_indx, '\0', sizeof(si_indx));
-               si_indx.si_name_prim.length = susi->si->name.length;
-               memcpy(si_indx.si_name_prim.value, susi->si->name.value, 
si_indx.si_name_prim.length);
-               si_dep_rec = avd_sidep_find_next(avd_cb, &si_indx, true);
-
-               while (si_dep_rec != NULL) {
-                       if 
(m_CMP_HORDER_SANAMET(si_dep_rec->indx_imm.si_name_prim, si_indx.si_name_prim) 
!= 0) {
-                               /* Seems no more node exists in spons_anchor 
tree with
-                                * "si_indx.si_name_prim" as primary key
-                                */
-                               break;
-                       }
-                       dep_si = avd_si_get(&si_dep_rec->indx_imm.si_name_sec);
-                       if (dep_si == NULL) {
-                               /* No corresponding SI node?? some thing wrong 
*/
-                               si_dep_rec = avd_sidep_find_next(avd_cb, 
&si_dep_rec->indx_imm, true);
-                               continue;
-                       }
-                       for (sisu = dep_si->list_of_sisu; sisu ; sisu = 
sisu->si_next) {
-                               if (sisu->su == susi->su) {
-                                       if ((sisu->state == SA_AMF_HA_ACTIVE) ||
-                                               ((sisu->state == 
SA_AMF_HA_QUIESCED) && (sisu->fsm == AVD_SU_SI_STATE_MODIFY))) {
-                                               quiesc_role = false;
-                                               goto done;
-                                       }       
-                               }       
-
-                       }
-                       si_dep_rec = avd_sidep_find_next(avd_cb, 
&si_dep_rec->indx_imm, true);
-               }
-       }
-done:
-       TRACE_LEAVE2(" :%u",quiesc_role);
-       return quiesc_role;
-}
-/**
  * @brief      Does role modification to assignments in the SU based on 
dependency
  *
  * @param[in]   su
@@ -1970,7 +1913,7 @@ uint32_t avd_sg_susi_mod_snd_honouring_s
 
        for (susi = su->list_of_susi; susi; susi = susi->su_next) {
                if (susi->state != SA_AMF_HA_QUIESCED) {
-                       if (quiesc_role_canbe_given_to_susi(susi)) {
+                       if (avd_susi_quiesced_canbe_given(susi)) {
                                rc = avd_susi_mod_send(susi, state);
                                if (rc == NCSCC_RC_FAILURE) {
                                        LOG_ER("%s:%u: %s", __FILE__, __LINE__, 
susi->su->name.value);
diff --git a/osaf/services/saf/amf/amfd/siass.cc 
b/osaf/services/saf/amf/amfd/siass.cc
--- a/osaf/services/saf/amf/amfd/siass.cc
+++ b/osaf/services/saf/amf/amfd/siass.cc
@@ -781,3 +781,93 @@ bool si_assignment_state_check(AVD_SI *s
        return assignmemt_status;
 }
 
+/**
+ * @brief        Quiesced role modifications has to be done in reverse order 
of si-si dependency.        
+ *               When susi response is received for quiesced modification, 
this routine finds 
+ *               which is the next susi to be quiesced based on si-si 
dependency. 
+ *
+ * @param [in]   susi for which we got the response 
+ *
+ * @returns      pointer to AVD_SU_SI_REL 
+ */
+AVD_SU_SI_REL *avd_siass_next_susi_to_quiesce(const AVD_SU_SI_REL *susi)
+{
+       AVD_SU_SI_REL *a_susi;
+       AVD_SPONS_SI_NODE *spons_si_node;
+
+       TRACE_ENTER2("'%s' '%s'", susi->si->name.value, susi->su->name.value);
+
+       for (a_susi = susi->su->list_of_susi; a_susi; a_susi = a_susi->su_next) 
{
+               if (a_susi->state == SA_AMF_HA_ACTIVE) {
+                       for (spons_si_node = 
susi->si->spons_si_list;spons_si_node;spons_si_node = spons_si_node->next) {
+                               if (spons_si_node->si == a_susi->si) {
+                                       /* Check if quiesced response came for 
all of its dependents */ 
+                                       if 
(avd_sidep_quiesced_done_for_all_dependents(spons_si_node->si, susi->su)) {
+                                               goto done;
+                                       }
+                               }
+                       }
+               }
+       }
+done:
+       TRACE_LEAVE2("next_susi: %s",a_susi ? a_susi->si->name.value : NULL);
+       return a_susi;
+}
+
+/**
+ * @brief      Checks whether quiesced role can be given to susi or not 
+ *
+ * @param[in]   susi
+ *
+ * @return     true/false 
+ **/
+bool avd_susi_quiesced_canbe_given(const AVD_SU_SI_REL *susi)
+{
+       AVD_SI_SI_DEP *si_dep_rec;
+       AVD_SI *dep_si;
+       AVD_SI_SI_DEP_INDX si_indx;
+       AVD_SU_SI_REL *sisu;
+       bool quiesc_role = true;
+
+       TRACE_ENTER2("%s %s", susi->su->name.value, susi->si->name.value);
+
+       if (!susi->si->num_dependents) {
+               /* This SI doesnot have any dependents on it, so quiesced role 
can be given */
+               return quiesc_role;
+       } else {
+               /* Check if any of its dependents assigned to same SU for which 
quiesced role is not yet given */
+               memset(&si_indx, '\0', sizeof(si_indx));
+               si_indx.si_name_prim.length = susi->si->name.length;
+               memcpy(si_indx.si_name_prim.value, susi->si->name.value, 
si_indx.si_name_prim.length);
+               si_dep_rec = avd_sidep_find_next(avd_cb, &si_indx, true);
+
+               while (si_dep_rec != NULL) {
+                       if 
(m_CMP_HORDER_SANAMET(si_dep_rec->indx_imm.si_name_prim, si_indx.si_name_prim) 
!= 0) {
+                               /* Seems no more node exists in spons_anchor 
tree with
+                                * "si_indx.si_name_prim" as primary key
+                                */
+                               break;
+                       }
+                       dep_si = avd_si_get(&si_dep_rec->indx_imm.si_name_sec);
+                       if (dep_si == NULL) {
+                               /* No corresponding SI node?? some thing wrong 
*/
+                               si_dep_rec = avd_sidep_find_next(avd_cb, 
&si_dep_rec->indx_imm, true);
+                               continue;
+                       }
+                       for (sisu = dep_si->list_of_sisu; sisu ; sisu = 
sisu->si_next) {
+                               if (sisu->su == susi->su) {
+                                       if ((sisu->state == SA_AMF_HA_ACTIVE) ||
+                                               ((sisu->state == 
SA_AMF_HA_QUIESCED) && (sisu->fsm == AVD_SU_SI_STATE_MODIFY))) {
+                                               quiesc_role = false;
+                                               goto done;
+                                       }       
+                               }       
+
+                       }
+                       si_dep_rec = avd_sidep_find_next(avd_cb, 
&si_dep_rec->indx_imm, true);
+               }
+       }
+done:
+       TRACE_LEAVE2("quiesc_role:%u",quiesc_role);
+       return quiesc_role;
+}

------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to