Hi Nagu, I'm looking at the patch.
Thanks, Minh On 14/02/17 16:21, Nagendra Kumar wrote: > 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