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