osaf/services/saf/amf/amfd/sg_nway_fsm.cc |  6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)


AMFD asserted during lock operation on NG when its nodes are deplyed with
N-WAY model application.

When lock on NG operation is issued, AMFD sends quiesced state to active SIs in 
all the
three SUs. Responses for SU2 and SU3 comes and AMFD sends SU level deletion to 
them.
SU2 contains standby assignment of SI1 which is still getting quiesced in SU1. 
Now
SU1 faults with su-failover recovery when SU2 is still not responded for 
deletion of
assignments. AMFD tries to perform recovery of SU1 and tries to fail-over SI1 
of SU1
but could not find any valid standby in any other SU. Since failover is not
possible, AMFD tries to delete all standby assignments of SI1. AMFD tries to 
send
deletion for SI1 to SU2 for which SU level deletion is already sent and it 
asserts.

Patch avoids sending duplicate deletion of assignments.

diff --git a/osaf/services/saf/amf/amfd/sg_nway_fsm.cc 
b/osaf/services/saf/amf/amfd/sg_nway_fsm.cc
--- a/osaf/services/saf/amf/amfd/sg_nway_fsm.cc
+++ b/osaf/services/saf/amf/amfd/sg_nway_fsm.cc
@@ -3014,11 +3014,13 @@ void avd_sg_nway_node_fail_stable(AVD_CL
                                avd_sg_su_oper_list_add(cb, curr_sisu->su, 
false);
                        } else {
                                /* As susi failover is not possible, delete all 
the assignments 
-                                  corresponding to curr_susi->si except on 
failed node.
+                                  corresponding to curr_susi->si except on 
failed node/su. Also skip
+                                  SISUs for which deletion is already sent on 
healthy node.
                                 */
                                for (curr_sisu = curr_susi->si->list_of_sisu ;
                                        curr_sisu != nullptr; curr_sisu = 
curr_sisu->si_next) {
-                                       if (curr_sisu != curr_susi) {
+                                       if ((curr_sisu != curr_susi) &&
+                                               (curr_sisu->fsm != 
AVD_SU_SI_STATE_UNASGN)) {
                                                rc = 
avd_susi_del_send(curr_sisu);
                                                if (NCSCC_RC_SUCCESS == rc)
                                                        
avd_sg_su_oper_list_add(cb, curr_sisu->su, false);

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to