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.
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 ?

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 *)&param), '\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, &param);
>       }
> +
>       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

Reply via email to