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 10 of 10] amfd: Make AVD_SUTYPE a class [#1142]
> 
>  osaf/services/saf/amf/amfd/include/su.h          |    3 +-
>  osaf/services/saf/amf/amfd/include/sutcomptype.h |    2 +-
>  osaf/services/saf/amf/amfd/include/sutype.h      |   24 +++-
>  osaf/services/saf/amf/amfd/sgtype.cc             |    2 +-
>  osaf/services/saf/amf/amfd/su.cc                 |    6 +-
>  osaf/services/saf/amf/amfd/sutcomptype.cc        |    2 +-
>  osaf/services/saf/amf/amfd/sutype.cc             |  108 
> +++++++++-------------
>  7 files changed, 70 insertions(+), 77 deletions(-)
> 
> 
> 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
> @@ -35,6 +35,7 @@
>  #include "include/db_template.h"
> 
>  class AVD_SG;
> +class AVD_SUTYPE;
> 
>  /**
>   * AMF director Service Unit representation.
> @@ -94,7 +95,7 @@ class AVD_SU {
> 
>       AVD_SU *sg_list_su_next;        /* the next SU in the SG */
>       AVD_SU *avnd_list_su_next;      /* the next SU in the AvND */
> -     struct avd_sutype *su_type;
> +     AVD_SUTYPE *su_type;
>       AVD_SU *su_list_su_type_next;
> 
>       void set_su_failover(bool value);
> diff --git a/osaf/services/saf/amf/amfd/include/sutcomptype.h
> b/osaf/services/saf/amf/amfd/include/sutcomptype.h
> --- a/osaf/services/saf/amf/amfd/include/sutcomptype.h
> +++ b/osaf/services/saf/amf/amfd/include/sutcomptype.h
> @@ -36,7 +36,7 @@ typedef struct {
>  } AVD_SUTCOMP_TYPE;
>  extern AmfDb<std::string, AVD_SUTCOMP_TYPE> *sutcomptype_db;
> 
> -SaAisErrorT avd_sutcomptype_config_get(SaNameT *sutype_name, struct
> avd_sutype *sut);
> +SaAisErrorT avd_sutcomptype_config_get(SaNameT *sutype_name,
> AVD_SUTYPE *sut);
>  void avd_sutcomptype_constructor(void);
> 
>  #endif
> diff --git a/osaf/services/saf/amf/amfd/include/sutype.h
> b/osaf/services/saf/amf/amfd/include/sutype.h
> --- a/osaf/services/saf/amf/amfd/include/sutype.h
> +++ b/osaf/services/saf/amf/amfd/include/sutype.h
> @@ -20,16 +20,24 @@
> 
>  #include <saAis.h>
>  #include <su.h>
> +#include <vector>
> 
> -struct avd_sutype {
> -     SaNameT name;
> -     SaUint32T saAmfSutIsExternal;
> -     SaUint32T saAmfSutDefSUFailover;
> -     SaNameT *saAmfSutProvidesSvcTypes; /* array of DNs, size in
> number_svc_types */
> -     unsigned int number_svc_types;  /* size of array
> saAmfSutProvidesSvcTypes */
> -     AVD_SU *list_of_su;
> +class AVD_SUTYPE {
> + public:
> +  explicit AVD_SUTYPE(const SaNameT *dn);
> +  SaNameT name {};
> +  SaUint32T saAmfSutIsExternal {};
> +  SaUint32T saAmfSutDefSUFailover {};
> +  SaNameT *saAmfSutProvidesSvcTypes {}; /* array of DNs, size in
> number_svc_types */
> +  unsigned int number_svc_types {};  /* size of array
> saAmfSutProvidesSvcTypes */
> +  std::vector<AVD_SU*> list_of_su {};
> + private:
> +  AVD_SUTYPE();
> +  // disallow copy and assign
> +  AVD_SUTYPE(const AVD_SUTYPE&);
> +  void operator=(const AVD_SUTYPE&);
>  };
> -extern AmfDb<std::string, avd_sutype> *sutype_db;
> +extern AmfDb<std::string, AVD_SUTYPE> *sutype_db;
> 
>  /**
>   * Get SaAmfSUType from IMM and create internal objects
> 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
> @@ -84,7 +84,7 @@ static int is_config_valid(const SaNameT
>       char *parent;
>       SaUint32T value;
>       SaBoolT abool;
> -     struct avd_sutype *sut;
> +     AVD_SUTYPE *sut;
>       const SaImmAttrValuesT_2 *attr;
> 
>       if ((parent = strchr((char*)dn->value, ',')) == NULL) {
> 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
> @@ -230,7 +230,7 @@ static int is_config_valid(const SaNameT
>       SaAmfAdminStateT admstate;
>       char *parent;
>       SaUint32T saAmfSutIsExternal;
> -     struct avd_sutype *sut = NULL;
> +     AVD_SUTYPE *sut = NULL;
>       CcbUtilOperationData_t *tmp;
>       AVD_SG *sg;
> 
> @@ -416,7 +416,7 @@ static AVD_SU *su_create(const SaNameT *
>  {
>       int rc = -1;
>       AVD_SU *su;
> -     struct avd_sutype *sut;
> +     AVD_SUTYPE *sut;
>       SaAisErrorT error;
> 
>       TRACE_ENTER2("'%s'", dn->value);
> @@ -1691,7 +1691,7 @@ static void su_ccb_apply_modify_hdlr(str
>                                         su-
> >saAmfSUMaintenanceCampaign.value, su->name.value);
>                       }
>               } else if (!strcmp(attr_mod->modAttr.attrName,
> "saAmfSUType")) {
> -                     struct avd_sutype *sut;
> +                     AVD_SUTYPE *sut;
>                       SaNameT sutype_name = *(SaNameT*) attr_mod-
> >modAttr.attrValues[0];
>                       TRACE("Modified saAmfSUType from '%s' to '%s'", su-
> >saAmfSUType.value, sutype_name.value);
>                       sut = sutype_db-
> >find(Amf::to_string(&sutype_name));
> diff --git a/osaf/services/saf/amf/amfd/sutcomptype.cc
> b/osaf/services/saf/amf/amfd/sutcomptype.cc
> --- a/osaf/services/saf/amf/amfd/sutcomptype.cc
> +++ b/osaf/services/saf/amf/amfd/sutcomptype.cc
> @@ -65,7 +65,7 @@ static int is_config_valid(const SaNameT
>       return 1;
>  }
> 
> -SaAisErrorT avd_sutcomptype_config_get(SaNameT *sutype_name, struct
> avd_sutype *sut)
> +SaAisErrorT avd_sutcomptype_config_get(SaNameT *sutype_name,
> AVD_SUTYPE *sut)
>  {
>       AVD_SUTCOMP_TYPE *sutcomptype;
>       SaAisErrorT error;
> diff --git a/osaf/services/saf/amf/amfd/sutype.cc
> b/osaf/services/saf/amf/amfd/sutype.cc
> --- a/osaf/services/saf/amf/amfd/sutype.cc
> +++ b/osaf/services/saf/amf/amfd/sutype.cc
> @@ -27,37 +27,41 @@
>  #include <cluster.h>
>  #include <ntf.h>
>  #include <proc.h>
> +#include <algorithm>
> 
> -AmfDb<std::string, avd_sutype> *sutype_db = NULL;
> +AmfDb<std::string, AVD_SUTYPE> *sutype_db = NULL;
> 
> -static struct avd_sutype *sutype_new(const SaNameT *dn)
> +//
> +AVD_SUTYPE::AVD_SUTYPE(const SaNameT *dn) {
> +  memcpy(&name.value, dn->value, dn->length);
> +  name.length = dn->length;
> +}
> +
> +static AVD_SUTYPE *sutype_new(const SaNameT *dn)
>  {
> -     struct avd_sutype *sutype = new avd_sutype();
> -
> -     memcpy(sutype->name.value, dn->value, dn->length);
> -     sutype->name.length = dn->length;
> +     AVD_SUTYPE *sutype = new AVD_SUTYPE(dn);
> 
>       return sutype;
>  }
> 
> -static void sutype_delete(struct avd_sutype **sutype)
> +static void sutype_delete(AVD_SUTYPE **sutype)
>  {
> -     osafassert(NULL == (*sutype)->list_of_su);
> +     osafassert(true == (*sutype)->list_of_su.empty());
>       delete [] (*sutype)->saAmfSutProvidesSvcTypes;
>       delete *sutype;
>       *sutype = NULL;
>  }
> 
> -static void sutype_db_add(struct avd_sutype *sutype)
> +static void sutype_db_add(AVD_SUTYPE *sutype)
>  {
>       unsigned int rc = sutype_db->insert(Amf::to_string(&sutype-
> >name),sutype);
>       osafassert(rc == NCSCC_RC_SUCCESS);
>  }
> 
> -static struct avd_sutype *sutype_create(const SaNameT *dn, const
> SaImmAttrValuesT_2 **attributes)
> +static AVD_SUTYPE *sutype_create(const SaNameT *dn, const
> SaImmAttrValuesT_2 **attributes)
>  {
>       const SaImmAttrValuesT_2 *attr;
> -     struct avd_sutype *sutype;
> +     AVD_SUTYPE *sutype;
>       int rc = 0;
>       unsigned i = 0;
>       SaAisErrorT error;
> @@ -166,7 +170,7 @@ static int is_config_valid(const SaNameT
> 
>  SaAisErrorT avd_sutype_config_get(void)
>  {
> -     struct avd_sutype *sut;
> +     AVD_SUTYPE *sut;
>       SaAisErrorT error;
>       SaImmSearchHandleT searchHandle;
>       SaImmSearchParametersT_2 searchParam;
> @@ -228,7 +232,7 @@ static void sutype_ccb_apply_modify_hdlr
>       int i = 0;
> 
>       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata-
> >objectName.value);
> -     avd_sutype *sut = sutype_db->find(Amf::to_string(&opdata-
> >objectName));
> +     AVD_SUTYPE *sut = sutype_db->find(Amf::to_string(&opdata-
> >objectName));
> 
>       while ((attr_mod = opdata->param.modify.attrMods[i++]) != NULL) {
>               if (!strcmp(attr_mod->modAttr.attrName,
> "saAmfSutDefSUFailover")) {
> @@ -239,7 +243,7 @@ static void sutype_ccb_apply_modify_hdlr
>                       /* Modify saAmfSUFailover for SUs which had
> inherited saAmfSutDefSUFailover.
>                               Modification will not be done for the NPI SU
> */
>                       if (old_value != sut->saAmfSutDefSUFailover) {
> -                             for (AVD_SU *su = sut->list_of_su; su; su = su-
> >su_list_su_type_next) {
> +                             for (const auto& su : sut->list_of_su) {
>                                       if ((!su->saAmfSUFailover_configured)
> && (su->saAmfSUPreInstantiable)) {
>                                               su-
> >set_su_failover(static_cast<bool>(sut->saAmfSutDefSUFailover));
>                                       }
> @@ -255,7 +259,7 @@ static void sutype_ccb_apply_modify_hdlr
> 
>  static void sutype_ccb_apply_cb(CcbUtilOperationData_t *opdata)
>  {
> -     struct avd_sutype *sut;
> +     AVD_SUTYPE *sut;
> 
>       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata-
> >objectName.value);
> 
> @@ -291,7 +295,7 @@ static SaAisErrorT sutype_ccb_completed_
>       SaAisErrorT rc = SA_AIS_OK;
>       const SaImmAttrModificationT_2 *attr_mod;
>       int i = 0;
> -     avd_sutype *sut = sutype_db->find(Amf::to_string(&opdata-
> >objectName));
> +     AVD_SUTYPE *sut = sutype_db->find(Amf::to_string(&opdata-
> >objectName));
> 
>       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata-
> >objectName.value);
>       while ((attr_mod = opdata->param.modify.attrMods[i++]) != NULL) {
> @@ -311,7 +315,7 @@ static SaAisErrorT sutype_ccb_completed_
>                               goto done;
>                       }
> 
> -                     for (AVD_SU *su = sut->list_of_su; su; su = su-
> >su_list_su_type_next) {
> +                     for (const auto& su : sut->list_of_su) {
>                               if (su->saAmfSUFailover_configured)
>                                       continue;
> 
> @@ -341,8 +345,7 @@ done:
>  static SaAisErrorT sutype_ccb_completed_cb(CcbUtilOperationData_t
> *opdata)
>  {
>       SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION;
> -     struct avd_sutype *sut;
> -     AVD_SU *su;
> +     AVD_SUTYPE *sut;
>       bool su_exist = false;
>       CcbUtilOperationData_t *t_opData;
> 
> @@ -358,24 +361,23 @@ static SaAisErrorT sutype_ccb_completed_
>               break;
>       case CCBUTIL_DELETE:
>               sut = sutype_db->find(Amf::to_string(&opdata->objectName));
> -             if (NULL != sut->list_of_su) {
> -                     /* check whether there exists a delete operation for
> -                      * each of the SU in the su_type list in the current CCB
> -                      */
> -                     su = sut->list_of_su;
> -                     while (su != NULL) {
> -                             t_opData =
> ccbutil_getCcbOpDataByDN(opdata->ccbId, &su->name);
> -                             if ((t_opData == NULL) || (t_opData-
> >operationType != CCBUTIL_DELETE)) {
> -                                     su_exist = true;
> -                                     break;
> -                             }
> -                             su = su->su_list_su_type_next;
> -                     }
> -                     if (su_exist == true) {
> -                             report_ccb_validation_error(opdata,
> "SaAmfSUType '%s'is in use",sut->name.value);
> -                             goto done;
> +
> +             /* check whether there exists a delete operation for
> +              * each of the SU in the su_type list in the current CCB
> +              */
> +
> +             for (const auto& su : sut->list_of_su) {
> +                     t_opData = ccbutil_getCcbOpDataByDN(opdata-
> >ccbId, &su->name);
> +                     if ((t_opData == NULL) || (t_opData->operationType
> != CCBUTIL_DELETE)) {
> +                             su_exist = true;
> +                             break;
>                       }
>               }
> +
> +             if (su_exist == true) {
> +                     report_ccb_validation_error(opdata, "SaAmfSUType
> '%s'is in use",sut->name.value);
> +                     goto done;
> +             }
>               rc = SA_AIS_OK;
>               break;
>       default:
> @@ -391,41 +393,23 @@ done:
>       /* Add SU to list in SU Type */
>  void avd_sutype_add_su(AVD_SU* su)
>  {
> -     struct avd_sutype *sut = su->su_type;
> -     su->su_list_su_type_next = sut->list_of_su;
> -     sut->list_of_su = su;
> +     AVD_SUTYPE *sut = su->su_type;
> +     sut->list_of_su.push_back(su);
>  }
> 
> -void avd_sutype_remove_su(AVD_SU* su)
> -{
> -     AVD_SU *i_su = NULL;
> -     AVD_SU *prev_su = NULL;
> +void avd_sutype_remove_su(AVD_SU* su) {
> +  AVD_SUTYPE *su_type = su->su_type;
> 
> -     if (su->su_type != NULL) {
> -             i_su = su->su_type->list_of_su;
> -
> -             while ((i_su != NULL) && (i_su != su)) {
> -                     prev_su = i_su;
> -                     i_su = i_su->su_list_su_type_next;
> -             }
> -
> -             if (i_su == su) {
> -                     if (prev_su == NULL) {
> -                             su->su_type->list_of_su = su-
> >su_list_su_type_next;
> -                     } else {
> -                             prev_su->su_list_su_type_next = su-
> >su_list_su_type_next;
> -                     }
> -
> -                     su->su_list_su_type_next = NULL;
> -                     su->su_type = NULL;
> -             }
> -     }
> +  if (su_type != nullptr) {
> +    su_type->list_of_su.erase(std::remove(su_type->list_of_su.begin(),
> +                                          su_type->list_of_su.end(), su), 
> su_type-
> >list_of_su.end());

[Nagu]: Looks complex to understand, can it be done as like #9th of patch 
series?

> +  }
>  }
> 
>  void avd_sutype_constructor(void)
>  {
> 
> -     sutype_db = new AmfDb<std::string, avd_sutype>;
> +     sutype_db = new AmfDb<std::string, AVD_SUTYPE>;
>       avd_class_impl_set("SaAmfSUBaseType", NULL, NULL,
>               avd_imm_default_OK_completed_cb, NULL);
>       avd_class_impl_set("SaAmfSUType", NULL, NULL,

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