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