Review please :) > -----Original Message----- > From: Nagendra Kumar > Sent: 07 February 2017 11:53 > To: hans.nordeb...@ericsson.com; Praveen Malviya; > minh.c...@dektech.com.au; gary....@dektech.com.au > Cc: opensaf-devel@lists.sourceforge.net > Subject: [devel] [PATCH 1 of 1] amfd: return TRY_AGAIN on rollback of > shutdown admin op [#2133] > > 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
------------------------------------------------------------------------------ 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