osaf/services/saf/amf/amfd/sgproc.cc |  10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)


If lock/shutdown operation on a nodegroup is in progress and component faults 
with
sufailover recovery while handling quiesced/quiescing callback, then two 
problems
are obserbed in case of 2N application:
1)If both the active and standby assignments are part of nodegroup then lock
operation succeeds but unlock does not lead to assignment in any SU. Here
there is no problem in shutdown opreation.
2)If active assignment is in the nodegroup and standby assignment is outside
the nodegroup then nodegroup admin state sticks to SHUTTING_DOWN but operation
succeeds. Since ng admin state is not locked, unlock operation is rejected by
AMF. Here there is no problem with lock operation.

AMF is resetting nodegroup params before failover of SU.
In case 1, SG was not stable while AMF tries to reset the sg admin state.So
internally SG remained it locked state. When user tries to unlock the ng,
operation succeeds but no assignment occurs as SG is locked internally.
In case 2, AMF tries to mark the node and ng from SHUTTING_DOWN
to locked before sufailover. Before sufailover su still has SIs assigned to it 
in
quiescing state. Because of this node is not marked locked ans so also ng.

In sufailover, AMF deletes all the assignment and marks the node locked and sg
becomes stable. So after sufailover processing, if AMF performs ng related
activities it will set things in proper state. Patch ensures this.

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
@@ -399,6 +399,7 @@ done:
 static uint32_t sg_su_failover_func(AVD_SU *su)
 {
        uint32_t rc = NCSCC_RC_FAILURE;
+       SaAisErrorT res = SA_AIS_OK;
 
        TRACE_ENTER2("'%s', %u", su->name.value, su->sg_of_su->sg_fsm_state);
 
@@ -425,8 +426,6 @@ static uint32_t sg_su_failover_func(AVD_
                   In case of Node unlock this counter is incremented per susi. 
So decrement 
                   should also be done per susi.
                 */ 
-               
-               SaAisErrorT res = SA_AIS_OK;
                if (su->su_on_node->saAmfNodeAdminState == 
SA_AMF_ADMIN_UNLOCKED) {
                        for (AVD_SU_SI_REL *susi = su->list_of_susi; susi; susi 
= susi->su_next) {
                                if (susi->fsm == AVD_SU_SI_STATE_ASGN) 
@@ -441,9 +440,6 @@ static uint32_t sg_su_failover_func(AVD_
                        AVD_AVND *node = su->su_on_node;
                        node_complete_admin_op(node, res);
                }
-
-               /* If nodegroup level operation is finished on all the nodes, 
reply to imm.*/
-               process_su_si_response_for_ng(su, res);
        }
 
        /*If the AvD is in AVD_APP_STATE then reassign all the SUSI assignments 
for this SU */
@@ -480,6 +476,10 @@ static uint32_t sg_su_failover_func(AVD_
                su->delete_all_susis();
        }
 
+       /* If nodegroup level operation is finished on all the nodes, reply to 
imm.*/
+       if (su->su_on_node->admin_ng != NULL)
+               process_su_si_response_for_ng(su, res);
+
        rc =  NCSCC_RC_SUCCESS;
 
 done:

------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to