Hi Nagu,

please see comment inlined with [HansN]/Thanks HansN

On 09/09/2015 11:17 AM, Nagendra Kumar wrote:
> Please find comment inlined with [Nagu].
>
> Thanks
> -Nagu
>> -----Original Message-----
>> From: Hans Nordeback [mailto:hans.nordeb...@ericsson.com]
>> Sent: 14 August 2015 20:20
>> To: Praveen Malviya; Nagendra Kumar; gary....@dektech.com.au
>> Cc: opensaf-devel@lists.sourceforge.net
>> Subject: [PATCH 07 of 10] amfd: Make AVD_AMF_SG_TYPE a class [#1142]
>>
>>   osaf/services/saf/amf/amfd/include/sg.h     |   3 +-
>>   osaf/services/saf/amf/amfd/include/sgtype.h |  39 ++++++++-----
>>   osaf/services/saf/amf/amfd/sg.cc            |   1 -
>>   osaf/services/saf/amf/amfd/sgtype.cc        |  84 
>> +++++++++++-----------------
>>   4 files changed, 59 insertions(+), 68 deletions(-)
>>
>>
>> diff --git a/osaf/services/saf/amf/amfd/include/sg.h
>> b/osaf/services/saf/amf/amfd/include/sg.h
>> --- a/osaf/services/saf/amf/amfd/include/sg.h
>> +++ b/osaf/services/saf/amf/amfd/include/sg.h
>> @@ -192,8 +192,7 @@ public:
>>      SaInvocationT adminOp_invocationId;
>>      SaAmfAdminOperationIdT adminOp;
>>
>> -    AVD_SG *sg_list_sg_type_next;
>> -    struct avd_amf_sg_type_tag *sg_type;
>> +    AVD_AMF_SG_TYPE *sg_type;
>>      AVD_SG *sg_list_app_next;
>>      AVD_APP *app;
>>      bool equal_ranked_su; /* This flag is set when ranks of all SU is the
>> same.
>> diff --git a/osaf/services/saf/amf/amfd/include/sgtype.h
>> b/osaf/services/saf/amf/amfd/include/sgtype.h
>> --- a/osaf/services/saf/amf/amfd/include/sgtype.h
>> +++ b/osaf/services/saf/amf/amfd/include/sgtype.h
>> @@ -27,28 +27,37 @@
>>
>>   #include <saAmf.h>
>>   #include <include/db_template.h>
>> +#include <vector>
>>
>>   class AVD_SG;
>>
>> -typedef struct avd_amf_sg_type_tag {
>> -    SaNameT name;
>> -    bool saAmfSgtDefAutoRepair_configured; /* True when user
>> configures saAmfSGDefAutoRepair else false */
>> +class AVD_AMF_SG_TYPE {
>> + public:
>> +  explicit AVD_AMF_SG_TYPE(const SaNameT *dn);
>> +  SaNameT name {};
>> +  bool saAmfSgtDefAutoRepair_configured {}; /* True when user configures
>> saAmfSGDefAutoRepair else false */
>>      /******************** B.04 model
>> *************************************************/
>> -    SaNameT *saAmfSGtValidSuTypes;  /* array of DNs, size in
>> number_su_type */
>> -    SaAmfRedundancyModelT saAmfSgtRedundancyModel;
>> -    SaBoolT saAmfSgtDefAutoRepair;
>> -    SaBoolT saAmfSgtDefAutoAdjust;
>> -    SaTimeT saAmfSgtDefAutoAdjustProb;
>> -    SaTimeT saAmfSgtDefCompRestartProb;
>> -    SaUint32T saAmfSgtDefCompRestartMax;
>> -    SaTimeT saAmfSgtDefSuRestartProb;
>> -    SaUint32T saAmfSgtDefSuRestartMax;
>> +  SaNameT *saAmfSGtValidSuTypes {}; /* array of DNs, size in
>> number_su_type */
>> +  SaAmfRedundancyModelT saAmfSgtRedundancyModel {};
>> +  SaBoolT saAmfSgtDefAutoRepair {};
>> +  SaBoolT saAmfSgtDefAutoAdjust {};
>> +  SaTimeT saAmfSgtDefAutoAdjustProb {};
>> +  SaTimeT saAmfSgtDefCompRestartProb {};
>> +  SaUint32T saAmfSgtDefCompRestartMax {};
>> +  SaTimeT saAmfSgtDefSuRestartProb {};
>> +  SaUint32T saAmfSgtDefSuRestartMax {};
>>      /******************** B.04 model
>> *************************************************/
>>
>> -    uint32_t number_su_type;        /* size of array saAmfSGtValidSuTypes
>> */
>> -    AVD_SG *list_of_sg;
>> +  uint32_t number_su_type {};       /* size of array saAmfSGtValidSuTypes */
>> +  std::vector<AVD_SG*> list_of_sg {};
>> + private:
>> +  AVD_AMF_SG_TYPE();
>> +  void initialize();
>> +  // disallow copy and assign
>> +  AVD_AMF_SG_TYPE(const AVD_AMF_SG_TYPE&);
>> +  void operator=(const AVD_AMF_SG_TYPE&);
>>
>> -} AVD_AMF_SG_TYPE;
>> +};
>>
>>   extern AmfDb<std::string, AVD_AMF_SG_TYPE> *sgtype_db;
>>   SaAisErrorT avd_sgtype_config_get(void);
>> diff --git a/osaf/services/saf/amf/amfd/sg.cc
>> b/osaf/services/saf/amf/amfd/sg.cc
>> --- a/osaf/services/saf/amf/amfd/sg.cc
>> +++ b/osaf/services/saf/amf/amfd/sg.cc
>> @@ -119,7 +119,6 @@ AVD_SG::AVD_SG():
>>              sg_redundancy_model(SA_AMF_NO_REDUNDANCY_MODEL),
>>              list_of_su(NULL),
>>              list_of_si(NULL),
>> -            sg_list_sg_type_next(NULL),
>>              sg_type(NULL),
>>              sg_list_app_next(NULL),
>>              app(NULL),
>> diff --git a/osaf/services/saf/amf/amfd/sgtype.cc
>> b/osaf/services/saf/amf/amfd/sgtype.cc
>> --- a/osaf/services/saf/amf/amfd/sgtype.cc
>> +++ b/osaf/services/saf/amf/amfd/sgtype.cc
>> @@ -26,42 +26,27 @@
>>   #include <ntf.h>
>>   #include <sgtype.h>
>>   #include <proc.h>
>> +#include <algorithm>
>>
>>   AmfDb<std::string, AVD_AMF_SG_TYPE> *sgtype_db = NULL;
>>
>>   void avd_sgtype_add_sg(AVD_SG *sg)
>>   {
>> -    sg->sg_list_sg_type_next = sg->sg_type->list_of_sg;
>> -    sg->sg_type->list_of_sg = sg;
>> +    sg->sg_type->list_of_sg.push_back(sg);
> [Nagu]: Though order doesn't matter here, push_back add in the end. Is this 
> reason to use push_back?
[HansN] list_of_sg is a std::vector, there is no push_front on std::vector.
>
>>   }
>>
>> -void avd_sgtype_remove_sg(AVD_SG *sg)
>> -{
>> -    AVD_SG *i_sg = NULL;
>> -    AVD_SG *prev_sg = NULL;
>> +void avd_sgtype_remove_sg(AVD_SG *sg) {
>> +  AVD_AMF_SG_TYPE *sg_type = sg->sg_type;
>>
>> -    if (sg->sg_type != NULL) {
>> -            i_sg = sg->sg_type->list_of_sg;
>> -
>> -            while ((i_sg != NULL) && (i_sg != sg)) {
>> -                    prev_sg = i_sg;
>> -                    i_sg = i_sg->sg_list_sg_type_next;
>> -            }
>> -
>> -            if (i_sg != sg) {
>> -                    /* Log a fatal error */
>> -                    osafassert(0);
>> -            } else {
>> -                    if (prev_sg == NULL) {
>> -                            sg->sg_type->list_of_sg = sg-
>>> sg_list_sg_type_next;
>> -                    } else {
>> -                            prev_sg->sg_list_sg_type_next = sg-
>>> sg_list_sg_type_next;
>> -                    }
>> -            }
>> -
>> -            sg->sg_list_sg_type_next = NULL;
>> -            sg->sg_type = NULL;
>> -    }
>> +  if (sg_type != nullptr) {
>> +    auto pos = std::find(sg_type->list_of_sg.begin(), 
>> sg_type->list_of_sg.end(),
>> sg);
>> +    if(pos != sg_type->list_of_sg.end()) {
>> +      sg_type->list_of_sg.erase(pos);
>> +    } else {
>> +      /* Log a fatal error */
>> +      osafassert(0);
>> +    }
>> +  }
>>   }
>>
>>   static void sgtype_delete(AVD_AMF_SG_TYPE *sg_type)
>> @@ -167,6 +152,12 @@ static int is_config_valid(const SaNameT
>>      return 1;
>>   }
>>
>> +//
>> +AVD_AMF_SG_TYPE::AVD_AMF_SG_TYPE(const SaNameT *dn) {
>> +  memcpy(&name.value, dn->value, dn->length);
>> +  name.length = dn->length;
>> +}
>> +
>>   /**
>>    * Create a new SG type object and initialize its attributes from the 
>> attribute
>> list.
>>    * @param dn
>> @@ -184,10 +175,7 @@ static AVD_AMF_SG_TYPE *sgtype_create(Sa
>>
>>      TRACE_ENTER2("'%s'", dn->value);
>>
>> -    sgt = new AVD_AMF_SG_TYPE();
>> -
>> -    memcpy(sgt->name.value, dn->value, dn->length);
>> -    sgt->name.length = dn->length;
>> +    sgt = new AVD_AMF_SG_TYPE(dn);
>>
>>      error =
>> immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSgtRedundancyModel"
>> ), attributes, 0, &sgt->saAmfSgtRedundancyModel);
>>      osafassert(error == SA_AIS_OK);
>> @@ -354,7 +342,7 @@ static SaAisErrorT sgtype_ccb_completed_
>>   {
>>      SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION;
>>      AVD_AMF_SG_TYPE *sgt;
>> -    AVD_SG *sg;
>> +
>>      bool sg_exist = false;
>>      CcbUtilOperationData_t *t_opData;
>>
>> @@ -370,23 +358,18 @@ static SaAisErrorT sgtype_ccb_completed_
>>              break;
>>      case CCBUTIL_DELETE:
>>              sgt = sgtype_db->find(Amf::to_string(&opdata->objectName));
>> -            if (sgt->list_of_sg != NULL) {
>> -                    /* check whether there exists a delete operation for
>> -                     * each of the SG in the sg_type list in the current CCB
>> -                     */
>> -                    sg = sgt->list_of_sg;
>> -                    while (sg != NULL) {
>> -                            t_opData =
>> ccbutil_getCcbOpDataByDN(opdata->ccbId, &sg->name);
>> -                            if ((t_opData == NULL) || (t_opData-
>>> operationType != CCBUTIL_DELETE)) {
>> -                                    sg_exist = true;
>> -                                    break;
>> -                            }
>> -                            sg = sg->sg_list_sg_type_next;
>> -                    }
>> -                    if (sg_exist == true) {
>> -                            report_ccb_validation_error(opdata, "SGs
>> exist of this SG type '%s'",sgt->name.value);
>> +
>> +            for (const auto& sg : sgt->list_of_sg) {
>> +                    t_opData = ccbutil_getCcbOpDataByDN(opdata-
>>> ccbId, &sg->name);
>> +                    if ((t_opData == NULL) || (t_opData->operationType
>> != CCBUTIL_DELETE)) {
>> +                            sg_exist = true;
>> +                            break;
>> +                    }
>> +            }
>> +
>> +            if (sg_exist == true) {
>> +                    report_ccb_validation_error(opdata, "SGs exist of this
>> SG type '%s'",sgt->name.value);
>>                              goto done;
>> -                    }
>>              }
>>              opdata->userData = sgt; /* Save for later use in apply
>> */
>>              rc = SA_AIS_OK;
>> @@ -438,7 +421,8 @@ static void sgtype_ccb_apply_modify_hdlr
>>
>>                      /* Modify saAmfSGAutoRepair for SGs which had
>> inherited saAmfSgtDefAutoRepair.*/
>>                      if (old_value != sgt->saAmfSgtDefAutoRepair) {
>> -                            for (AVD_SG *sg = sgt->list_of_sg; sg; sg = sg-
>>> sg_list_sg_type_next) {
>> +
>> +                            for (const auto& sg : sgt->list_of_sg) {
>>                                      if (!sg-
>>> saAmfSGAutoRepair_configured) {
>>                                              sg->saAmfSGAutoRepair =
>> static_cast<SaBoolT>(sgt->saAmfSgtDefAutoRepair);
>>                                              TRACE("Modified
>> saAmfSGAutoRepair is '%u'", sg->saAmfSGAutoRepair);


------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to