Hi, Nack for this version, I think we need todo some iterations of this.
I have a slightly similar patch. I think this one is strange in that the response I sent if the su_switch state is STABLE. No logic in that... Also the response code should be refactored into its own function e.g. "complete_siswap" Besides the patch does not handle SUFailover during SI-swap. I would also prefer to fix 822 first since they are somewhat related. Will share a patch for it. Thanks, Hans > -----Original Message----- > From: praveen.malv...@oracle.com [mailto:praveen.malv...@oracle.com] > Sent: den 28 mars 2014 14:14 > To: Hans Feldt; nagendr...@oracle.com; Hans Nordebäck > Cc: opensaf-devel@lists.sourceforge.net > Subject: [PATCH 1 of 1] amfd: return AIS_OK instead of BAD_OP for si-swap > admin op [#823] > > osaf/services/saf/amf/amfd/sg_2n_fsm.cc | 23 +++++++++++++---------- > 1 files changed, 13 insertions(+), 10 deletions(-) > > > Problem: During si-swap if quiesced assignment faults, AMF returns > BAD_OPERATION even though si-swap completes successfuly after recovery. > > Reason: During si-swap, AMF sends quiesced assignment to active SU. > During quiesced assignments, one of the components faults. > AMF performs cleanup of this failed component and perfroms the failover of > assignments to standby SU. For the faulted SU assignments are deleted and > when it gets sucessfully repaired, AMF assigns it with standby assignments. > Thus si-swap operation eventually gets successful, but AMF returns > BAD_OPERATION for the operation. > > Fix: Since AMF performs si-swap successfuly despite fault in quiesced state, > this patch ensures that AMF returns SA_AIS_OK for the operation. > > diff --git a/osaf/services/saf/amf/amfd/sg_2n_fsm.cc > b/osaf/services/saf/amf/amfd/sg_2n_fsm.cc > --- a/osaf/services/saf/amf/amfd/sg_2n_fsm.cc > +++ b/osaf/services/saf/amf/amfd/sg_2n_fsm.cc > @@ -888,16 +888,6 @@ static uint32_t avd_sg_2n_su_fault_su_op > if (su->sg_of_su->su_oper_list.su == su) { > su_ha_state = avd_su_state_determine(su); > if (su_ha_state == SA_AMF_HA_QUIESCED) { > - if (su->su_switch == AVSV_SI_TOGGLE_SWITCH) { > - AVD_SU_SI_REL *temp_susi; > - for (temp_susi = su->list_of_susi; temp_susi != > NULL; temp_susi = temp_susi->su_next) { > - if (temp_susi->si->invocation != 0) { > - > avd_saImmOiAdminOperationResult(cb->immOiHandle, > - > temp_susi->si->invocation, SA_AIS_ERR_BAD_OPERATION); > - temp_susi->si->invocation = 0; > - } > - } > - } > m_AVD_SET_SU_SWITCH(cb, su, AVSV_SI_TOGGLE_STABLE); > } else if (su_ha_state == SA_AMF_HA_QUIESCING) { > if (avd_sidep_si_dependency_exists_within_su(su)) { > @@ -2095,6 +2085,19 @@ static uint32_t avd_sg_2n_susi_sucss_su_ > } > > m_AVD_SET_SG_FSM(cb, (su->sg_of_su), > AVD_SG_FSM_SG_REALIGN); > + > + if (su->su_switch == AVSV_SI_TOGGLE_STABLE) { > + for (AVD_SU_SI_REL *temp_susi = > su->list_of_susi; > + temp_susi != NULL; > + temp_susi = temp_susi->su_next) > { > + if (temp_susi->si->invocation != 0) { > + > avd_saImmOiAdminOperationResult(cb->immOiHandle, > + > temp_susi->si->invocation, SA_AIS_OK); > + temp_susi->si->invocation = 0; > + } > + } > + } > + > } > } else if ((act == AVSV_SUSI_ACT_MOD) && (state == SA_AMF_HA_STANDBY) && > (su->sg_of_su->su_oper_list.su == su)) { ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel