Please find comment inlined with [Nagu].

Thanks
-Nagu
> -----Original Message-----
> From: Hans Nordeback [mailto:[email protected]]
> Sent: 14 August 2015 20:20
> To: Praveen Malviya; Nagendra Kumar; [email protected]
> Cc: [email protected]
> 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?

>  }
> 
> -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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to