> -----Original Message----- > From: Nagendra Kumar [mailto:nagendr...@oracle.com] > Sent: den 13 maj 2014 11:33 > To: Hans Feldt; Hans Nordebäck > Cc: opensaf-devel@lists.sourceforge.net > Subject: Re: [devel] [PATCH 3 of 5] amfd: move supreinst logic from comp to > su [#713] > > 1. Not sure, why you have moved the logic to su from comp. Since component > being added in su makes difference of PI/NPI SU. > Ideally the code should have been in su. [Hans] I have moved the logic to SU since that is where it belongs, you say it yourself. I don't understand your comment, it is contradictory...
> 2. Removing logic whether su is being deleted, will result in > ERROR_NOT_EXIST in rt update of su. Any specific reason for > removing it ? [Hans] When logic moved to SU it got hard and ugly to keep it. Removing it simplifies the code and we can now handle ERROR_NOT_EXIST in rt update of su without a problem. The check whether SU is deleted was really just an optimization to skip the IMM update. OK? Thanks, Hans > > Thanks > -Nagu > > > -----Original Message----- > > From: Hans Feldt [mailto:osafde...@gmail.com] > > Sent: 13 May 2014 11:24 > > To: Nagendra Kumar; hans.nordeb...@ericsson.com > > Cc: opensaf-devel@lists.sourceforge.net > > Subject: [PATCH 3 of 5] amfd: move supreinst logic from comp to su [#713] > > > > osaf/services/saf/amf/amfd/comp.cc | 65 > > +++----------------------------- > > osaf/services/saf/amf/amfd/include/su.h | 1 + > > osaf/services/saf/amf/amfd/su.cc | 39 ++++++++++++++++++- > > 3 files changed, 43 insertions(+), 62 deletions(-) > > > > > > Comp was directly manipulating SU data, this is now moved to SU. > > > > diff --git a/osaf/services/saf/amf/amfd/comp.cc > > b/osaf/services/saf/amf/amfd/comp.cc > > --- a/osaf/services/saf/amf/amfd/comp.cc > > +++ b/osaf/services/saf/amf/amfd/comp.cc > > @@ -246,11 +246,6 @@ static void comp_add_to_model(AVD_COMP * > > } > > } > > > > - /* Verify if the SUs preinstan value need to be changed */ > > - if (comp_is_preinstantiable(comp) == true) { > > - su->saAmfSUPreInstantiable = static_cast<SaBoolT>(true); > > - } > > - > > /* This is a case of adding a component in SU which is instantiated > > state. This could be used in upgrade scenarios. When components > > are added, it is sent to Amfnd for instantiation and Amfnd > > @@ -280,9 +275,6 @@ static void comp_add_to_model(AVD_COMP * > > avd_comp_oper_state_set(comp, > > SA_AMF_OPERATIONAL_ENABLED); > > > > /* Set runtime cached attributes. */ > > - avd_saImmOiRtObjectUpdate(&su->name, "saAmfSUPreInstantiable", > > - SA_IMM_ATTR_SAUINT32T, &su->saAmfSUPreInstantiable); > > - > > avd_saImmOiRtObjectUpdate(&comp->comp_info.name, > > "saAmfCompReadinessState", > > SA_IMM_ATTR_SAUINT32T, &comp- > > >saAmfCompReadinessState); > > > > @@ -1500,17 +1492,9 @@ static void comp_ccb_apply_modify_hdlr(s > > > > static void comp_ccb_apply_delete_hdlr(struct CcbUtilOperationData *opdata) > > { > > - AVD_COMP *comp = NULL, *i_comp = NULL; > > - bool isPre; > > - AVD_AVND *su_node_ptr = NULL; > > - AVSV_PARAM_INFO param; > > - SaBoolT old_val; > > - bool su_delete = false; > > - struct CcbUtilOperationData *t_opData; > > - > > TRACE_ENTER(); > > > > - comp = avd_comp_get(&opdata->objectName); > > + AVD_COMP *comp = avd_comp_get(&opdata->objectName); > > /* comp should be found in the database even if it was > > * due to parent su delete the changes are applied in > > * bottom up order so all the component deletes are applied > > @@ -1519,58 +1503,21 @@ static void comp_ccb_apply_delete_hdlr(s > > **/ > > osafassert(comp != NULL); > > > > - old_val = comp->su->saAmfSUPreInstantiable; > > - > > - /* Verify if the SUs preinstan value need to be changed */ > > - if (comp_is_preinstantiable(comp) == true) { > > - isPre = false; > > - i_comp = comp->su->list_of_comp; > > - while (i_comp) { > > - if ((comp_is_preinstantiable(i_comp) == true) && > > (i_comp != comp)) { > > - isPre = true; > > - break; > > - } > > - i_comp = i_comp->su_comp_next; > > - } /* end while */ > > - > > - if (isPre == true) { > > - comp->su->saAmfSUPreInstantiable = > > static_cast<SaBoolT>(true); > > - } else { > > - comp->su->saAmfSUPreInstantiable = > > static_cast<SaBoolT>(false); > > - } > > - } > > - > > - /* check whether the SU is also undergoing delete operation */ > > - t_opData = ccbutil_getCcbOpDataByDN(opdata->ccbId, &comp->su- > > >name); > > - if (t_opData && t_opData->operationType == CCBUTIL_DELETE) { > > - su_delete = true; > > - } > > - > > - /* if SU is not being deleted and the PreInstantiable state has changed > > - * then update the IMM with the new value for saAmfSUPreInstantiable > > */ > > - if (su_delete == false && old_val != comp->su- > > >saAmfSUPreInstantiable) { > > - avd_saImmOiRtObjectUpdate(&comp->su->name, > > "saAmfSUPreInstantiable", > > - SA_IMM_ATTR_SAUINT32T, &comp->su- > > >saAmfSUPreInstantiable); > > - /* If SU becomes NPI then enable saAmfSUFailover flag Sec > > 3.11.1.3.2 AMF-B.04.01 spec */ > > - if (!comp->su->saAmfSUPreInstantiable) { > > - comp->su->set_su_failover(true); > > - } > > - } > > - > > - /* send a message to the AVND deleting the > > - * component. > > - */ > > - su_node_ptr = comp->su->get_node_ptr(); > > + // send message to ND requesting delete of the component > > + AVD_AVND *su_node_ptr = comp->su->get_node_ptr(); > > if ((su_node_ptr->node_state == AVD_AVND_STATE_PRESENT) || > > (su_node_ptr->node_state == AVD_AVND_STATE_NO_CONFIG) || > > (su_node_ptr->node_state == AVD_AVND_STATE_NCS_INIT)) { > > + AVSV_PARAM_INFO param; > > memset(((uint8_t *)¶m), '\0', > > sizeof(AVSV_PARAM_INFO)); > > param.act = AVSV_OBJ_OPR_DEL; > > param.name = comp->comp_info.name; > > param.class_id = AVSV_SA_AMF_COMP; > > avd_snd_op_req_msg(avd_cb, su_node_ptr, ¶m); > > } > > + > > avd_comp_delete(comp); > > + > > TRACE_LEAVE(); > > } > > > > diff --git a/osaf/services/saf/amf/amfd/include/su.h > > b/osaf/services/saf/amf/amfd/include/su.h > > --- a/osaf/services/saf/amf/amfd/include/su.h > > +++ b/osaf/services/saf/amf/amfd/include/su.h > > @@ -121,6 +121,7 @@ class AVD_SU { > > > > private: > > void send_attribute_update(AVSV_AMF_SU_ATTR_ID attrib_id); > > + void set_saAmfSUPreInstantiable(bool value); > > > > // disallow copy and assign, TODO(hafe) add common macro for this > > AVD_SU(const AVD_SU&); > > diff --git a/osaf/services/saf/amf/amfd/su.cc > > b/osaf/services/saf/amf/amfd/su.cc > > --- a/osaf/services/saf/amf/amfd/su.cc > > +++ b/osaf/services/saf/amf/amfd/su.cc > > @@ -147,9 +147,30 @@ void AVD_SU::remove_comp(AVD_COMP *comp) > > } > > } > > > > - if (su_ref->list_of_comp == NULL) { > > - /* Revert to def val */ > > - su_ref->saAmfSUPreInstantiable = static_cast<SaBoolT>(false); > > + bool old_preinst_value = saAmfSUPreInstantiable; > > + bool curr_preinst_value = false; > > + > > + // check if preinst possibly is still true > > + if (comp_is_preinstantiable(comp) == true) { > > + i_comp = list_of_comp; > > + while (i_comp) { > > + if (comp_is_preinstantiable(i_comp) == true) { > > + curr_preinst_value = true; > > + break; > > + } > > + i_comp = i_comp->su_comp_next; > > + } > > + } > > + > > + // if preinst has changed, update IMM and recalculate saAmfSUFailover > > + if (curr_preinst_value != old_preinst_value) { > > + set_saAmfSUPreInstantiable(curr_preinst_value); > > + > > + /* If SU becomes NPI then set saAmfSUFailover flag > > + * Sec 3.11.1.3.2 AMF-B.04.01 spec */ > > + if (saAmfSUPreInstantiable == false) { > > + comp->su->set_su_failover(true); > > + } > > } > > } > > > > @@ -185,6 +206,11 @@ void AVD_SU::add_comp(AVD_COMP *comp) { > > prev_comp->su_comp_next = comp; > > comp->su_comp_next = i_comp; > > } > > + > > + /* Verify if the SUs preinstan value need to be changed */ > > + if (comp_is_preinstantiable(comp) == true) { > > + set_saAmfSUPreInstantiable(true); > > + } > > } > > > > /** > > @@ -1748,3 +1774,10 @@ bool AVD_SU::is_in_service(void) { > > (saAmfSUOperState == > > SA_AMF_OPERATIONAL_ENABLED); > > } > > } > > + > > +void AVD_SU::set_saAmfSUPreInstantiable(bool value) { > > + saAmfSUPreInstantiable = static_cast<SaBoolT>(value); > > + avd_saImmOiRtObjectUpdate(&name, "saAmfSUPreInstantiable", > > + SA_IMM_ATTR_SAUINT32T, > > &saAmfSUPreInstantiable); > > + TRACE("%s saAmfSUPreInstantiable %u", name.value, value); > > +} > > ------------------------------------------------------------------------------ > "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE > Instantly run your Selenium tests across 300+ browser/OS combos. > Get unparalleled scalability from the best Selenium testing platform available > Simple to use. Nothing to install. Get started now for free." > http://p.sf.net/sfu/SauceLabs > _______________________________________________ > Opensaf-devel mailing list > Opensaf-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/opensaf-devel ------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel