On 01/24/2014 05:06 AM, Nagendra Kumar wrote:
>>> +                   (su_ptr->saAmfSUPresenceState ==
>>> +                    SA_AMF_PRESENCE_INSTANTIATED) &&
>>
>> keep above expression on same line
>
> But the line is exceeding 80 lines when the line break is kept in the same 
> line.

That should not be the case with proper code structure and naming. I think the 
above is an exemption to the rule because 
it makes the code very hard to read and understand if you break lines like that.
/Hans

>
> Thanks
> -Nagu
>
>> -----Original Message-----
>> From: Hans Feldt [mailto:hans.fe...@ericsson.com]
>> Sent: 23 January 2014 19:23
>> To: Nagendra Kumar; hans.nordeb...@ericsson.com; Praveen Malviya;
>> Mathivanan Naickan Palanivelu; Hrishikesh Chenna
>> Cc: opensaf-devel@lists.sourceforge.net
>> Subject: Re: [PATCH 1 of 1] amf: support for automatic comp instantiation and
>> deletion [#597]
>>
>> Ack with minor comments inline.
>> Thanks,
>> Hans
>>
>>
>> On 01/23/2014 07:20 AM, nagendr...@oracle.com wrote:
>>>    osaf/services/saf/amf/amfd/comp.cc              |  37 ++++++++++++++++---
>>>    osaf/services/saf/amf/amfd/ndproc.cc            |  10 +++-
>>>    osaf/services/saf/amf/amfnd/clc.cc              |  10 +++++
>>>    osaf/services/saf/amf/amfnd/compdb.cc           |  47
>> +++++++++++++++++++++---
>>>    osaf/services/saf/amf/amfnd/include/avnd_comp.h |   2 +
>>>    osaf/services/saf/amf/amfnd/su.cc               |  27 ++++++++++++-
>>>    6 files changed, 115 insertions(+), 18 deletions(-)
>>>
>>>
>>> When any component is added in the instantiated SU, Amf will try to
>> instantiate the component.
>>> When any component is deleted from instantiated SU, Amf will try to
>> terminate the component.
>>>
>>> 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
>>> @@ -173,17 +173,18 @@ void avd_comp_delete(AVD_COMP *comp)
>>>    static void comp_add_to_model(AVD_COMP *comp)
>>>    {
>>>     SaNameT dn;
>>> +   AVD_SU *su_ptr = comp->su;
>>
>> better with just "su"
>>
>>>
>>>     TRACE_ENTER2("%s", comp->comp_info.name.value);
>>>
>>>     /* Check parent link to see if it has been added already */
>>> -   if (comp->su != NULL) {
>>> +   if (su_ptr != NULL) {
>>>             TRACE("already added");
>>>             goto done;
>>>     }
>>>
>>>     avsv_sanamet_init(&comp->comp_info.name, &dn, "safSu");
>>> -   comp->su = avd_su_get(&dn);
>>> +   su_ptr = avd_su_get(&dn);
>>>
>>>     avd_comp_db_add(comp);
>>>     comp->comp_type = avd_comptype_get(&comp->saAmfCompType);
>>> @@ -195,7 +196,7 @@ static void comp_add_to_model(AVD_COMP *
>>>      * corresponding node is UP send the component information
>>>      * to the Node.
>>>      */
>>> -   if (comp->su->su_is_external) {
>>> +   if (su_ptr->su_is_external) {
>>>             /* This is an external SU, so there is no node assigned to it.
>>>                For some purpose of validations and sending SU/Comps info
>> to
>>>                hosting node (Controllers), we can take use of the hosting
>>> @@ -219,12 +220,36 @@ static void comp_add_to_model(AVD_COMP *
>>>     if ((comp->comp_info.category == AVSV_COMP_TYPE_SA_AWARE) ||
>>>         (comp->comp_info.category ==
>> AVSV_COMP_TYPE_PROXIED_LOCAL_PRE_INSTANTIABLE) ||
>>>         (comp->comp_info.category ==
>> AVSV_COMP_TYPE_EXTERNAL_PRE_INSTANTIABLE)) {
>>> -           comp->su->saAmfSUPreInstantiable =
>> static_cast<SaBoolT>(true);
>>> +           su_ptr->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
>>> +      instantiates it. Amfnd has capability for finding which component
>>> +      has been added newly. */
>>> +   if ((su_ptr->saAmfSUAdminState !=
>> SA_AMF_ADMIN_LOCKED_INSTANTIATION) &&
>>> +                   (su_ptr->saAmfSUPresenceState ==
>>> +                    SA_AMF_PRESENCE_INSTANTIATED) &&
>>
>> keep above expression on same line
>>
>>> +                   (avd_cb->avail_state_avd == SA_AMF_HA_ACTIVE)) {
>>> +           AVD_AVND *node = su_ptr->su_on_node;
>>> +           if ((node->node_state == AVD_AVND_STATE_PRESENT) ||
>>> +                           (node->node_state ==
>>> +                            AVD_AVND_STATE_NO_CONFIG) ||
>>
>> keep above expression on same line
>>
>>> +                           (node->node_state ==
>> AVD_AVND_STATE_NCS_INIT)) {
>>> +                   if (avd_snd_su_msg(avd_cb, su_ptr) !=
>>> +                                   NCSCC_RC_SUCCESS) {
>>> +                           LOG_ER("%s: avd_snd_su_msg failed %s",
>>> +                                           __FUNCTION__,
>>> +                                           su_ptr->name.value);
>>
>> log to whom you failed to send and comp DN, one day you will need it...
>>
>>> +                           goto done;
>>> +                   }
>>> +           }
>>>     }
>>>
>>>     /* Set runtime cached attributes. */
>>> -   avd_saImmOiRtObjectUpdate(&comp->su->name,
>> const_cast<SaImmAttrNameT>("saAmfSUPreInstantiable"),
>>> -           SA_IMM_ATTR_SAUINT32T, &comp->su-
>>> saAmfSUPreInstantiable);
>>> +   avd_saImmOiRtObjectUpdate(&su_ptr->name,
>> const_cast<SaImmAttrNameT>("saAmfSUPreInstantiable"),
>>> +           SA_IMM_ATTR_SAUINT32T, &su_ptr-
>>> saAmfSUPreInstantiable);
>>>
>>>     avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
>> const_cast<SaImmAttrNameT>("saAmfCompReadinessState"),
>>>             SA_IMM_ATTR_SAUINT32T, &comp-
>>> saAmfCompReadinessState);
>>> diff --git a/osaf/services/saf/amf/amfd/ndproc.cc
>> b/osaf/services/saf/amf/amfd/ndproc.cc
>>> --- a/osaf/services/saf/amf/amfd/ndproc.cc
>>> +++ b/osaf/services/saf/amf/amfd/ndproc.cc
>>> @@ -608,9 +608,13 @@ void avd_data_update_req_evh(AVD_CL_CB *
>>>     case AVSV_SA_AMF_COMP:{
>>>                     /* Find the component record in the database,
>> specified in the message. */
>>>                     if ((comp = avd_comp_get(&n2d_msg-
>>> msg_info.n2d_data_req.param_info.name)) == NULL) {
>>> -                           LOG_ER("%s: Invalid Comp '%s' (%u)",
>> __FUNCTION__,
>>> -                                   n2d_msg-
>>> msg_info.n2d_data_req.param_info.name.value,
>>> -                                   n2d_msg-
>>> msg_info.n2d_data_req.param_info.name.length);
>>> +                           /* In case of component delete, component
>> gets
>>> +                              deleted at Amfd first and then it gets
>>> +                              uninstantiated and then deleted at Amfnd.
>>> +                              So, when update for presence state comes
>> from
>>> +                              Amfnd, the component doesn't exists in
>> Amfd*/
>>> +                           LOG_IN("%s: Invalid Comp '%s'",
>> __FUNCTION__,
>>> +                                           n2d_msg-
>>> msg_info.n2d_data_req.param_info.name.value);
>>>                             goto done;
>>>                     }
>>>
>>> diff --git a/osaf/services/saf/amf/amfnd/clc.cc
>> b/osaf/services/saf/amf/amfnd/clc.cc
>>> --- a/osaf/services/saf/amf/amfnd/clc.cc
>>> +++ b/osaf/services/saf/amf/amfnd/clc.cc
>>> @@ -1306,6 +1306,16 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_
>>>             }
>>>     }
>>>
>>> +   /* This is a case of 'component delete' when su is in intantiated
>>> +      state. Component can go into uninstantiated state or termination
>>> +      failed state, but the component information needs to be deleted from
>>> +      data base. */
>>> +   if ((comp->pending_delete == true) &&
>>> +                   ((comp->pres ==
>> SA_AMF_PRESENCE_UNINSTANTIATED) ||
>>> +                    (comp->pres ==
>> SA_AMF_PRESENCE_TERMINATION_FAILED)) &&
>>> +                   (comp->su->pres ==
>> SA_AMF_PRESENCE_INSTANTIATED))
>>> +           rc = avnd_compdb_rec_del(cb, &comp->name);
>>> +
>>>     done:
>>>     TRACE_LEAVE2("%u", rc);
>>>     return rc;
>>> diff --git a/osaf/services/saf/amf/amfnd/compdb.cc
>> b/osaf/services/saf/amf/amfnd/compdb.cc
>>> --- a/osaf/services/saf/amf/amfnd/compdb.cc
>>> +++ b/osaf/services/saf/amf/amfnd/compdb.cc
>>> @@ -837,15 +837,50 @@ uint32_t avnd_comp_oper_req(AVND_CB *cb,
>>>
>>>     case AVSV_OBJ_OPR_DEL:
>>>             {
>>
>> the above opening brace is on the wrong line thus causing unnecessary
>> indentation and hard top read code, please change
>> or remove (if possible) it
>>
>>> -                   AVND_COMP *comp = 0;
>>> +                   /* This request comes when any component is being
>>> +                      deleted. When this request comes from Amfd,
>>> +                      component can be in instantiated or uninstantiated
>>> +                      state and in that case, Amfnd will uninstantiate the
>>> +                      component and delete the record from its data base.
>>> +                      This is kind of automatic termination of a component
>>> +                      when comp is getting deleted. */
>>> +                   AVND_COMP *comp =
>>> +                           m_AVND_COMPDB_REC_GET(cb->compdb,
>> param->name);
>>> +                   if (comp == NULL) {
>>> +                           LOG_ER("%s: Comp '%s' not found",
>> __FUNCTION__,
>>> +                                           param->name.value);
>>> +                           goto done;
>>> +                   }
>>>
>>> -                   /* get the record */
>>> -                   comp = m_AVND_COMPDB_REC_GET(cb->compdb,
>> param->name);
>>> -                   if (comp) {
>>> -                           /* delete the record */
>>> -
>>      m_AVND_SEND_CKPT_UPDT_ASYNC_RMV(cb, comp,
>> AVND_CKPT_COMP_CONFIG);
>>> +                   if ((comp->pres ==
>> SA_AMF_PRESENCE_UNINSTANTIATED) &&
>>> +                                   (comp->su->pres ==
>>> +
>> SA_AMF_PRESENCE_UNINSTANTIATED)) {
>>
>> no line break above
>>
>>> +
>>      m_AVND_SEND_CKPT_UPDT_ASYNC_RMV(cb, comp,
>>> +
>>      AVND_CKPT_COMP_CONFIG);
>>>                             rc = avnd_compdb_rec_del(cb, &param-
>>> name);
>>> +                           goto done;
>>>                     }
>>> +
>>> +                   /* Terminate the pi comp. It will terminate the
>>> +                      component and delete the comp record. */
>>> +                   if
>> (m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(comp)) {
>>> +                           comp->pending_delete = true;
>>
>> isn't this setting common to both types of components?
>>
>>> +                           TRACE("Running the component clc FSM,
>> terminate"
>>> +                                           " the component");
>>
>> th above trace is not needed, remove
>>
>>> +                           rc = avnd_comp_clc_fsm_run(cb, comp,
>>> +
>>      AVND_COMP_CLC_PRES_FSM_EV_TERM);
>>> +                           goto done;
>>> +                   }
>>> +                   /* Terminate the Npi comp. After deleting the csi, comp
>>> +                      will be already terminated, so we just want to delete
>>> +                      the comp record.*/
>>> +                   if
>> (!m_AVND_COMP_TYPE_IS_PREINSTANTIABLE(comp)) {
>>> +
>>      m_AVND_SEND_CKPT_UPDT_ASYNC_RMV(cb, comp,
>>> +
>>      AVND_CKPT_COMP_CONFIG);
>>> +                           rc = avnd_compdb_rec_del(cb, &param-
>>> name);
>>> +                           goto done;
>>> +                   }
>>> +
>>>             }
>>>             break;
>>>
>>> diff --git a/osaf/services/saf/amf/amfnd/include/avnd_comp.h
>> b/osaf/services/saf/amf/amfnd/include/avnd_comp.h
>>> --- a/osaf/services/saf/amf/amfnd/include/avnd_comp.h
>>> +++ b/osaf/services/saf/amf/amfnd/include/avnd_comp.h
>>> @@ -359,6 +359,8 @@ typedef struct avnd_comp_tag {
>>>     SaBoolT admin_oper;   /*set to true if undergoing admin operation */
>>>     int config_is_valid; /* Used to indicate that config has to be refreshed
>> from IMM */
>>>     bool assigned_flag; /* Used in finding multiple csi for a single comp
>> while csi mod.*/
>>> +   bool pending_delete; /* Used in deleting component when su is in
>>> +                           instantiated state.*/
>>>
>>>    } AVND_COMP;
>>>
>>> diff --git a/osaf/services/saf/amf/amfnd/su.cc
>> b/osaf/services/saf/amf/amfnd/su.cc
>>> --- a/osaf/services/saf/amf/amfnd/su.cc
>>> +++ b/osaf/services/saf/amf/amfnd/su.cc
>>> @@ -79,9 +79,13 @@ uint32_t avnd_evt_avd_reg_su_evh(AVND_CB
>>>
>>>     /* scan the su list & add each su to su-db */
>>>     for (su_info = info->su_list; su_info; su = 0, su_info = su_info->next) 
>>> {
>>> -           su = avnd_sudb_rec_add(cb, su_info, &rc);
>>> -           if (!su)
>>> -                   break;
>>> +           su = m_AVND_SUDB_REC_GET(cb->sudb, su_info->name);
>>> +           /* This function is common
>>> +              1. for adding new SU in the data base
>>> +              2. for adding a new componet in the existing su.
>>> +              So, we need to check wether the SU exists or not. */
>>
>> two spelling issues above, remove the "we need to"
>>
>>> +           if (su == NULL)
>>> +                   su = avnd_sudb_rec_add(cb, su_info, &rc);
>>>
>>>             m_AVND_SEND_CKPT_UPDT_ASYNC_ADD(cb, su,
>> AVND_CKPT_SU_CONFIG);
>>>
>>> @@ -93,11 +97,28 @@ uint32_t avnd_evt_avd_reg_su_evh(AVND_CB
>>>                     rc = NCSCC_RC_FAILURE;
>>>                     break;
>>>             }
>>> +
>>> +           /* When NPI comp is added into PI SU(that is
>> UNINSTANTIATED),
>>> +              we don't have to run SU FSM as anyway, we are not
>>> +              instantiating NPI component. In this case, anyway, SU will
>>> +              remain in instantiated state. NPI comp will get instantiated
>>> +              when corresponding csi is added. */
>>> +           bool su_is_instantiated;
>>> +           m_AVND_SU_IS_INSTANTIATED(su, su_is_instantiated);
>>> +
>>> +           if ((su->pres == SA_AMF_PRESENCE_INSTANTIATED) &&
>>> +                           (su_is_instantiated == false)) {
>>> +                   avnd_su_pres_state_set(su,
>>> +
>>      SA_AMF_PRESENCE_UNINSTANTIATED);
>>> +                   rc = avnd_su_pres_fsm_run(cb, su, 0,
>>> +                                   AVND_SU_PRES_FSM_EV_INST);
>>> +           }
>>>     }
>>>
>>>     /*** send the response to AvD ***/
>>>     rc = avnd_di_reg_su_rsp_snd(cb, &info->su_list->name, rc);
>>>
>>> +
>>>    done:
>>>     TRACE_LEAVE();
>>>     return rc;
>>>
>>>
>
>

------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to