src/amf/amfd/sg_2n_fsm.cc |  17 +++++++++++++++++
 src/amf/amfd/sgproc.cc    |  13 ++++++++++---
 2 files changed, 27 insertions(+), 3 deletions(-)


When shutdown operation on SI is issued and if there are
some faults (component failover, SU failover or node failover) on
components on SU getting quiescing csi cbk, then in the following situation
TRY_AGAIN is returned and admin state is rolled back to unlock:
For SI having only one SUSI:
   Without SI Dep : a.) in comp fo
For SI having two SUSI:
   Without SI Dep : a.) in node fo, su fo, comp fo
   With SI Dep : a.) node fo, su fo
In other cases below, the admin state is marked locked :
For SI having only one SUSI:
   Without SI Dep : a.) node fo, su fo
   With SI Dep :    a.) node fo, su fo, comp fo
For SI having two SUSI:
   With SI Dep : a.) Comp fo

diff --git a/src/amf/amfd/sg_2n_fsm.cc b/src/amf/amfd/sg_2n_fsm.cc
--- a/src/amf/amfd/sg_2n_fsm.cc
+++ b/src/amf/amfd/sg_2n_fsm.cc
@@ -1,6 +1,7 @@
 /*      -*- OpenSAF  -*-
  *
  * (C) Copyright 2008 The OpenSAF Foundation
+ * Copyright (C) 2017, Oracle and/or its affiliates. All rights reserved.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
@@ -1050,9 +1051,17 @@ uint32_t SG_2N::su_fault_si_oper(AVD_SU 
                                        
su->sg_of_su->admin_si->set_admin_state(SA_AMF_ADMIN_LOCKED);
                                else
                                        
su->sg_of_su->admin_si->set_admin_state(SA_AMF_ADMIN_UNLOCKED);
+                               AVD_SI *si_tmp = su->sg_of_su->admin_si;
                                m_AVD_CLEAR_SG_ADMIN_SI(cb, (su->sg_of_su));
                                avd_sg_su_oper_list_add(cb, su, false);
                                su->sg_of_su->set_fsm_state(AVD_SG_FSM_SU_OPER);
+                               if ((si_tmp->invocation != 0) && 
(si_tmp->saAmfSIAdminState == SA_AMF_ADMIN_UNLOCKED)) {
+                                       TRACE("Admin operation fails on 
SI:'%s'", si_tmp->name.c_str());
+                                       
avd_saImmOiAdminOperationResult(avd_cb->immOiHandle,
+                                                       si_tmp->invocation, 
SA_AIS_ERR_TRY_AGAIN);
+                                       si_tmp->invocation = 0;
+                               }
+
                        } else {
                                /* The SU has standby assignments. Change the 
SI admin state to
                                 * unlock. Remove the SI from the SI admin 
pointer. 
@@ -3150,8 +3159,16 @@ void SG_2N::node_fail_si_oper(AVD_SU *su
                                }
 
                                
su->sg_of_su->admin_si->set_admin_state(SA_AMF_ADMIN_UNLOCKED);
+                               AVD_SI *si_tmp = su->sg_of_su->admin_si;
                                m_AVD_CLEAR_SG_ADMIN_SI(cb, (su->sg_of_su));
                                su->delete_all_susis();
+                               if (si_tmp->invocation != 0) {
+                                       TRACE("Admin operation fails on 
SI:'%s'", si_tmp->name.c_str());
+                                       
avd_saImmOiAdminOperationResult(avd_cb->immOiHandle,
+                                                       si_tmp->invocation, 
SA_AIS_ERR_TRY_AGAIN);
+                                       si_tmp->invocation = 0;
+                               }
+
                        } /* if (s_susi != AVD_SU_SI_REL_NULL) */
                        else {
                                
su->sg_of_su->admin_si->set_admin_state(SA_AMF_ADMIN_LOCKED);
diff --git a/src/amf/amfd/sgproc.cc b/src/amf/amfd/sgproc.cc
--- a/src/amf/amfd/sgproc.cc
+++ b/src/amf/amfd/sgproc.cc
@@ -1,6 +1,7 @@
 /*      -*- OpenSAF  -*-
  *
  * (C) Copyright 2008 The OpenSAF Foundation
+ * Copyright (C) 2017, Oracle and/or its affiliates. All rights reserved.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
@@ -518,9 +519,15 @@ static uint32_t sg_su_failover_func(AVD_
 
                        /* Reply to IMM for admin operation on SI */
                        if (susi->si->invocation != 0) {
-                               
avd_saImmOiAdminOperationResult(avd_cb->immOiHandle,
-                                               susi->si->invocation, 
SA_AIS_OK);
-                               susi->si->invocation = 0;
+                               if ((susi->su->sg_of_su->admin_si != nullptr) &&
+                                               
(susi->su->sg_of_su->admin_si->saAmfSIAdminState == SA_AMF_ADMIN_SHUTTING_DOWN) 
&&
+                                               
(susi->su->sg_of_su->sg_redundancy_model == SA_AMF_2N_REDUNDANCY_MODEL)) {
+                                       TRACE("Do nothing.");
+                               } else {
+                                       
avd_saImmOiAdminOperationResult(avd_cb->immOiHandle,
+                                                       susi->si->invocation, 
SA_AIS_OK);
+                                       susi->si->invocation = 0;
+                               }
                        }
                }
                su->sg_of_su->node_fail(avd_cb, su);

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to