osaf/services/saf/amf/amfd/include/sg.h  |    2 +
 osaf/services/saf/amf/amfd/sg_npm_fsm.cc |  230 ++++--------------------------
 2 files changed, 39 insertions(+), 193 deletions(-)


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
@@ -510,6 +510,8 @@
         uint32_t su_fault_sg_relgn(AVD_CL_CB *cb, AVD_SU *su);
         uint32_t susi_sucss_sg_reln(AVD_CL_CB *cb, AVD_SU *su, struct 
avd_su_si_rel_tag *susi,
           AVSV_SUSI_ACT act, SaAmfHAStateT state);
+        bool sg_stable(AVD_CL_CB* cb, AVD_SU* su);
+        void node_fail_sg_relgn(AVD_CL_CB* cb, AVD_SU* su);
 };
 
 /**
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
@@ -3213,7 +3213,7 @@
  * 
  **************************************************************************/
 
-static void avd_sg_npm_node_fail_sg_relgn(AVD_CL_CB *cb, AVD_SU *su)
+void SG_NPM::node_fail_sg_relgn(AVD_CL_CB *cb, AVD_SU *su)
 {
        AVD_SU_SI_REL *l_susi, *o_susi, *ot_susi;
        bool l_flag = false;
@@ -3329,26 +3329,7 @@
                                        
su->sg_of_su->admin_si->set_si_switch(cb, AVSV_SI_TOGGLE_STABLE);
                                        m_AVD_CLEAR_SG_ADMIN_SI(cb, 
(su->sg_of_su));
 
-                                       if (su->sg_of_su->su_oper_list.empty() 
== true) {
-                                               /* both the SI admin pointer 
and SU oper list are empty.
-                                                * Do the functionality as in 
stable state to verify if 
-                                                * new assignments can be done. 
If yes stay in the same state.
-                                                * If no new assignments change 
state to stable.
-                                                */
-                                               if 
(avd_sg_npm_su_chose_asgn(cb, su->sg_of_su) == NULL) {
-                                                       /* all the assignments 
have already been done in the SG. */
-                                                       m_AVD_SET_SG_FSM(cb, 
(su->sg_of_su), AVD_SG_FSM_STABLE);
-                                                       
avd_sidep_sg_take_action(su->sg_of_su); 
-                                                       if ((AVD_SG_FSM_STABLE 
== su->sg_of_su->sg_fsm_state) &&
-                                                                       (true 
== su->sg_of_su->equal_ranked_su) &&
-                                                                       
(SA_TRUE == su->sg_of_su->saAmfSGAutoAdjust)) {
-                                                               /* SG fsm is 
stable, screen for possibility of
-                                                                  
redistributing SI to achieve equal distribution */
-                                                               
avd_sg_npm_screening_for_si_redistr(su->sg_of_su);
-                                                       }
-                                               }
-                                       }
-
+                                       sg_stable(cb, su);
                                }       /* if ((l_susi->state == 
SA_AMF_HA_QUIESCED) &&
                                           (l_susi->fsm == 
AVD_SU_SI_STATE_MODIFY)) */
                                else if ((l_susi->state == SA_AMF_HA_QUIESCED) 
&&
@@ -3367,25 +3348,7 @@
                                        /* Free all the SI assignments to this 
SU. */
                                        su->delete_all_susis();
 
-                                       if (su->sg_of_su->su_oper_list.empty() 
== true) {
-                                               /* both the SI admin pointer 
and SU oper list are empty.
-                                                * Do the functionality as in 
stable state to verify if 
-                                                * new assignments can be done. 
If yes stay in the same state.
-                                                * If no new assignments change 
state to stable.
-                                                */
-                                               if 
(avd_sg_npm_su_chose_asgn(cb, su->sg_of_su) == NULL) {
-                                                       /* all the assignments 
have already been done in the SG. */
-                                                       m_AVD_SET_SG_FSM(cb, 
(su->sg_of_su), AVD_SG_FSM_STABLE);
-                                                       
avd_sidep_sg_take_action(su->sg_of_su); 
-                                                       if ((AVD_SG_FSM_STABLE 
== su->sg_of_su->sg_fsm_state) &&
-                                                                       (true 
== su->sg_of_su->equal_ranked_su) &&
-                                                                       
(SA_TRUE == su->sg_of_su->saAmfSGAutoAdjust)) {
-                                                               /* SG fsm is 
stable, screen for possibility of
-                                                                  
redistributing SI to achieve equal distribution */
-                                                               
avd_sg_npm_screening_for_si_redistr(su->sg_of_su);
-                                                       }
-                                               }
-                                       }
+                                       sg_stable(cb, su);
                                }       /* else if ((l_susi->state == 
SA_AMF_HA_QUIESCED) &&
                                           (l_susi->fsm == 
AVD_SU_SI_STATE_ASGND)) */
                                else if (l_susi->state == SA_AMF_HA_STANDBY) {
@@ -3427,25 +3390,7 @@
                                        /* Free all the SI assignments to this 
SU. */
                                        su->delete_all_susis();
 
-                                       if (su->sg_of_su->su_oper_list.empty() 
== true) {
-                                               /* both the SI admin pointer 
and SU oper list are empty.
-                                                * Do the functionality as in 
stable state to verify if 
-                                                * new assignments can be done. 
If yes stay in the same state.
-                                                * If no new assignments change 
state to stable.
-                                                */
-                                               if 
(avd_sg_npm_su_chose_asgn(cb, su->sg_of_su) == NULL) {
-                                                       /* all the assignments 
have already been done in the SG. */
-                                                       m_AVD_SET_SG_FSM(cb, 
(su->sg_of_su), AVD_SG_FSM_STABLE);
-                                                       
avd_sidep_sg_take_action(su->sg_of_su); 
-                                                       if ((AVD_SG_FSM_STABLE 
== su->sg_of_su->sg_fsm_state) &&
-                                                                       (true 
== su->sg_of_su->equal_ranked_su) &&
-                                                                       
(SA_TRUE == su->sg_of_su->saAmfSGAutoAdjust)) {
-                                                               /* SG fsm is 
stable, screen for possibility of
-                                                                  
redistributing SI to achieve equal distribution */
-                                                               
avd_sg_npm_screening_for_si_redistr(su->sg_of_su);
-                                                       }
-                                               }
-                                       }
+                                       sg_stable(cb, su);
                                }
                                /* else if (l_susi->state == SA_AMF_HA_ACTIVE) 
*/
                        } else {        /* if 
(su->sg_of_su->admin_si->si_switch == AVSV_SI_TOGGLE_SWITCH) */
@@ -3481,26 +3426,7 @@
                                        /*  Remove the SI from the SI admin 
pointer.  */
                                        m_AVD_CLEAR_SG_ADMIN_SI(cb, 
(su->sg_of_su));
 
-                                       if (su->sg_of_su->su_oper_list.empty() 
== true) {
-                                               /* both the SI admin pointer 
and SU oper list are empty.
-                                                * Do the functionality as in 
stable state to verify if 
-                                                * new assignments can be done. 
If yes stay in the same state.
-                                                * If no new assignments change 
state to stable.
-                                                */
-                                               if 
(avd_sg_npm_su_chose_asgn(cb, su->sg_of_su) == NULL) {
-                                                       /* all the assignments 
have already been done in the SG. */
-                                                       m_AVD_SET_SG_FSM(cb, 
(su->sg_of_su), AVD_SG_FSM_STABLE);
-                                                       
avd_sidep_sg_take_action(su->sg_of_su); 
-                                                       if ((AVD_SG_FSM_STABLE 
== su->sg_of_su->sg_fsm_state) &&
-                                                                       (true 
== su->sg_of_su->equal_ranked_su) &&
-                                                                       
(SA_TRUE == su->sg_of_su->saAmfSGAutoAdjust)) {
-                                                               /* SG fsm is 
stable, screen for possibility of
-                                                                  
redistributing SI to achieve equal distribution */
-                                                               
avd_sg_npm_screening_for_si_redistr(su->sg_of_su);
-                                                       }
-                                               }
-                                       }
-
+                                       sg_stable(cb, su);
                                }       /* if ((l_susi->state == 
SA_AMF_HA_QUIESCING) ||
                                           (l_susi->state == 
SA_AMF_HA_QUIESCED)) */
                                else if (l_susi->state == SA_AMF_HA_STANDBY) {
@@ -3595,26 +3521,7 @@
                                   (su->list_of_susi->state == 
SA_AMF_HA_QUIESCING) ||
                                   (su->list_of_susi->state == 
SA_AMF_HA_ACTIVE)) */
 
-                       if (su->sg_of_su->su_oper_list.empty() == true) {
-                               /* both the SI admin pointer and SU oper list 
are empty.
-                                * Do the functionality as in stable state to 
verify if 
-                                * new assignments can be done. If yes stay in 
the same state.
-                                * If no new assignments change state to stable.
-                                */
-                               if (avd_sg_npm_su_chose_asgn(cb, su->sg_of_su) 
== NULL) {
-                                       /* all the assignments have already 
been done in the SG. */
-                                       m_AVD_SET_SG_FSM(cb, (su->sg_of_su), 
AVD_SG_FSM_STABLE);
-                                       avd_sidep_sg_take_action(su->sg_of_su); 
-                                                       if ((AVD_SG_FSM_STABLE 
== su->sg_of_su->sg_fsm_state) &&
-                                                                       (true 
== su->sg_of_su->equal_ranked_su) &&
-                                                                       
(SA_TRUE == su->sg_of_su->saAmfSGAutoAdjust)) {
-                                                               /* SG fsm is 
stable, screen for possibility of
-                                                                  
redistributing SI to achieve equal distribution */
-                                                               
avd_sg_npm_screening_for_si_redistr(su->sg_of_su);
-                                                       }
-                               }
-                       }
-
+                       sg_stable(cb, su);
                } else {        /*if (l_flag == true) */
 
                        /* SU not in the SU oper list */
@@ -3722,31 +3629,9 @@
                        }
                }
 
-               if (su_oper_list.empty() == true) {
-                       /* SU oper list are empty.
-                        * Do the functionality as in stable state to verify if 
-                        * new assignments can be done. If yes change state to 
SG realign.
-                        * If no new assignments change state to stable.
-                        */
-                       if (avd_sg_npm_su_chose_asgn(cb, su->sg_of_su) == NULL) 
{
-                               /* all the assignments have already been done 
in the SG. */
-                               m_AVD_SET_SG_FSM(cb, (su->sg_of_su), 
AVD_SG_FSM_STABLE);
-                               avd_sidep_sg_take_action(su->sg_of_su); 
-                                                       if ((AVD_SG_FSM_STABLE 
== su->sg_of_su->sg_fsm_state) &&
-                                                                       (true 
== su->sg_of_su->equal_ranked_su) &&
-                                                                       
(SA_TRUE == su->sg_of_su->saAmfSGAutoAdjust)) {
-                                                               /* SG fsm is 
stable, screen for possibility of
-                                                                  
redistributing SI to achieve equal distribution */
-                                                               
avd_sg_npm_screening_for_si_redistr(su->sg_of_su);
-                                                       }
-                       } else {
-                               /* new assignments need to be done in the SG. */
-                               m_AVD_SET_SG_FSM(cb, (su->sg_of_su), 
AVD_SG_FSM_SG_REALIGN);
-                       }
-               } else {
-                       /* Change state to SG realign. */
+               if (sg_stable(cb, su) == false) {
                        m_AVD_SET_SG_FSM(cb, (su->sg_of_su), 
AVD_SG_FSM_SG_REALIGN);
-               }
+               } 
        } else {                /* if(su->sg_of_su->su_oper_list.su == su) */
 
                /* the SU is not the same as the SU in the list */
@@ -3876,29 +3761,7 @@
                                su->sg_of_su->admin_si->set_si_switch(cb, 
AVSV_SI_TOGGLE_STABLE);
                                m_AVD_CLEAR_SG_ADMIN_SI(cb, (su->sg_of_su));
 
-                               if (su_oper_list.empty() == true) {
-                                       /* both the SI admin pointer and SU 
oper list are empty.
-                                        * Do the functionality as in stable 
state to verify if 
-                                        * new assignments can be done. If yes 
stay in the same state.
-                                        * If no new assignments change state 
to stable.
-                                        */
-                                       if (avd_sg_npm_su_chose_asgn(cb, 
su->sg_of_su) == NULL) {
-                                               /* all the assignments have 
already been done in the SG. */
-                                               m_AVD_SET_SG_FSM(cb, 
(su->sg_of_su), AVD_SG_FSM_STABLE);
-                                               
avd_sidep_sg_take_action(su->sg_of_su); 
-                                                       if ((AVD_SG_FSM_STABLE 
== su->sg_of_su->sg_fsm_state) &&
-                                                                       (true 
== su->sg_of_su->equal_ranked_su) &&
-                                                                       
(SA_TRUE == su->sg_of_su->saAmfSGAutoAdjust)) {
-                                                               /* SG fsm is 
stable, screen for possibility of
-                                                                  
redistributing SI to achieve equal distribution */
-                                                               
avd_sg_npm_screening_for_si_redistr(su->sg_of_su);
-                                                       }
-                                       } else {
-                                               /* Change state to SG realign. 
*/
-                                               m_AVD_SET_SG_FSM(cb, 
(su->sg_of_su), AVD_SG_FSM_SG_REALIGN);
-                                       }
-                               } else {
-                                       /* Change state to SG realign. */
+                               if (sg_stable(cb, su) == false) {
                                        m_AVD_SET_SG_FSM(cb, (su->sg_of_su), 
AVD_SG_FSM_SG_REALIGN);
                                }
 
@@ -3977,29 +3840,7 @@
                                /* Free all the SI assignments to this SU. */
                                su->delete_all_susis();
 
-                               if (su_oper_list.empty() == true) {
-                                       /* both the SI admin pointer and SU 
oper list are empty.
-                                        * Do the functionality as in stable 
state to verify if 
-                                        * new assignments can be done. If yes 
stay in the same state.
-                                        * If no new assignments change state 
to stable.
-                                        */
-                                       if (avd_sg_npm_su_chose_asgn(cb, 
su->sg_of_su) == NULL) {
-                                               /* all the assignments have 
already been done in the SG. */
-                                               m_AVD_SET_SG_FSM(cb, 
(su->sg_of_su), AVD_SG_FSM_STABLE);
-                                               
avd_sidep_sg_take_action(su->sg_of_su); 
-                                                       if ((AVD_SG_FSM_STABLE 
== su->sg_of_su->sg_fsm_state) &&
-                                                                       (true 
== su->sg_of_su->equal_ranked_su) &&
-                                                                       
(SA_TRUE == su->sg_of_su->saAmfSGAutoAdjust)) {
-                                                               /* SG fsm is 
stable, screen for possibility of
-                                                                  
redistributing SI to achieve equal distribution */
-                                                               
avd_sg_npm_screening_for_si_redistr(su->sg_of_su);
-                                                       }
-                                       } else {
-                                               /* Change state to SG realign. 
*/
-                                               m_AVD_SET_SG_FSM(cb, 
(su->sg_of_su), AVD_SG_FSM_SG_REALIGN);
-                                       }
-                               } else {
-                                       /* Change state to SG realign. */
+                               if (sg_stable(cb, su) == false) {
                                        m_AVD_SET_SG_FSM(cb, (su->sg_of_su), 
AVD_SG_FSM_SG_REALIGN);
                                }
                        }
@@ -4034,29 +3875,7 @@
                                /*  Remove the SI from the SI admin pointer.  */
                                m_AVD_CLEAR_SG_ADMIN_SI(cb, (su->sg_of_su));
 
-                               if (su_oper_list.empty() == true) {
-                                       /* both the SI admin pointer and SU 
oper list are empty.
-                                        * Do the functionality as in stable 
state to verify if 
-                                        * new assignments can be done. If yes 
stay in the same state.
-                                        * If no new assignments change state 
to stable.
-                                        */
-                                       if (avd_sg_npm_su_chose_asgn(cb, 
su->sg_of_su) == NULL) {
-                                               /* all the assignments have 
already been done in the SG. */
-                                               m_AVD_SET_SG_FSM(cb, 
(su->sg_of_su), AVD_SG_FSM_STABLE);
-                                               
avd_sidep_sg_take_action(su->sg_of_su); 
-                                                       if ((AVD_SG_FSM_STABLE 
== su->sg_of_su->sg_fsm_state) &&
-                                                                       (true 
== su->sg_of_su->equal_ranked_su) &&
-                                                                       
(SA_TRUE == su->sg_of_su->saAmfSGAutoAdjust)) {
-                                                               /* SG fsm is 
stable, screen for possibility of
-                                                                  
redistributing SI to achieve equal distribution */
-                                                               
avd_sg_npm_screening_for_si_redistr(su->sg_of_su);
-                                                       }
-                                       } else {
-                                               /* Change state to SG realign. 
*/
-                                               m_AVD_SET_SG_FSM(cb, 
(su->sg_of_su), AVD_SG_FSM_SG_REALIGN);
-                                       }
-                               } else {
-                                       /* Change state to SG realign. */
+                               if (sg_stable(cb, su) == false) {
                                        m_AVD_SET_SG_FSM(cb, (su->sg_of_su), 
AVD_SG_FSM_SG_REALIGN);
                                }
 
@@ -4132,7 +3951,7 @@
                break;          /* case AVD_SG_FSM_STABLE: */
        case AVD_SG_FSM_SG_REALIGN:
 
-               avd_sg_npm_node_fail_sg_relgn(cb, su);
+               node_fail_sg_relgn(cb, su);
 
                break;          /* case AVD_SG_FSM_SG_REALIGN: */
        case AVD_SG_FSM_SU_OPER:
@@ -4452,3 +4271,28 @@
 SG_NPM::~SG_NPM() {
 }
 
+bool SG_NPM::sg_stable(AVD_CL_CB* cb, AVD_SU* su) {
+       if (su->sg_of_su->su_oper_list.empty() == true) {
+               /* both the SI admin pointer and SU oper list are empty.
+                * Do the functionality as in stable state to verify if 
+                * new assignments can be done. If yes stay in the same state.
+                * If no new assignments change state to stable.
+                */
+               if (avd_sg_npm_su_chose_asgn(cb, su->sg_of_su) == NULL) {
+                       /* all the assignments have already been done in the 
SG. */
+                       m_AVD_SET_SG_FSM(cb, (su->sg_of_su), AVD_SG_FSM_STABLE);
+                       avd_sidep_sg_take_action(su->sg_of_su); 
+                       if ((AVD_SG_FSM_STABLE == su->sg_of_su->sg_fsm_state) &&
+                                       (true == su->sg_of_su->equal_ranked_su) 
&&
+                                       (SA_TRUE == 
su->sg_of_su->saAmfSGAutoAdjust)) {
+                               /* SG fsm is stable, screen for possibility of
+                                  redistributing SI to achieve equal 
distribution */
+                               
avd_sg_npm_screening_for_si_redistr(su->sg_of_su);
+                       }
+                       
+                       return true;
+               }
+       }
+       
+       return false;
+}
\ No newline at end of file

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to