ack, code review only. Minor comment below. /Thanks HansN

On 01/25/2016 05:35 AM, Gary Lee wrote:
>   osaf/services/saf/amf/amfd/imm.cc |  281 
> ++++++++++++++++++-------------------
>   1 files changed, 138 insertions(+), 143 deletions(-)
>
>
> diff --git a/osaf/services/saf/amf/amfd/imm.cc 
> b/osaf/services/saf/amf/amfd/imm.cc
> --- a/osaf/services/saf/amf/amfd/imm.cc
> +++ b/osaf/services/saf/amf/amfd/imm.cc
> @@ -22,7 +22,7 @@
>   
>   #include <stdio.h>
>   #include <errno.h>
> -#include <string.h>
> +#include <cstring>
>   #include <sys/stat.h>
>   #include <unistd.h>
>   
> @@ -51,6 +51,8 @@
>   
>   #include "osaf_time.h"
>   #include <stdint.h>
> +#include <unordered_map>
> +#include <string>
>   
>   /* ========================================================================
>    *   DEFINITIONS
> @@ -63,6 +65,57 @@
>      imm_reinit_mutex and then proceeds for initialization. */
>   static pthread_mutex_t imm_reinit_thread_startup_mutex = 
> PTHREAD_MUTEX_INITIALIZER;
>   static pthread_cond_t imm_reinit_thread_startup_cond = 
> PTHREAD_COND_INITIALIZER;
> +
> +typedef std::unordered_map<std::string, AVSV_AMF_CLASS_ID> type_map;
[HansN] Minor comment, in c++11 alias can be used instead of typedefs, 
e.g. using type_map =  std::unordered_map<std::string, int>;
> +
> +type_map amf_type_map = {
> +     /* Cluster and Node Class Related */
> +     {"safAmfCluster",AVSV_SA_AMF_CLUSTER},
> +     {"safAmfNode",AVSV_SA_AMF_NODE},
> +     {"safAmfNodeGroup",AVSV_SA_AMF_NODE_GROUP},
> +     {"safInstalledSwBundle",AVSV_SA_AMF_NODE_SW_BUNDLE},
> +     /* Application Class Related */
> +     {"safApp",AVSV_SA_AMF_APP},
> +     {"safAppType",AVSV_SA_AMF_APP_BASE_TYPE},
> +     /* Service Group Class Related */
> +     {"safSg",AVSV_SA_AMF_SG},
> +     {"safSgType",AVSV_SA_AMF_SG_BASE_TYPE},
> +     /* Service Unit Class Related */
> +     {"safSu",AVSV_SA_AMF_SU},
> +     {"safSuType",AVSV_SA_AMF_SU_BASE_TYPE},
> +     {"safMemberCompType",AVSV_SA_AMF_SUT_COMP_TYPE},
> +     /* Service Instance Class Related */
> +     {"safSi",AVSV_SA_AMF_SI},
> +     {"safSvcType",AVSV_SA_AMF_SVC_BASE_TYPE},
> +     {"safDepend",AVSV_SA_AMF_SI_DEPENDENCY},
> +     {"safRankedSu",AVSV_SA_AMF_SI_RANKED_SU},
> +     {"safSISU",AVSV_SA_AMF_SI_ASSIGNMENT},
> +     {"safMemberCSType",AVSV_SA_AMF_SVC_TYPE_CS_TYPES},
> +     /* Component Service Instance Class Related */
> +     {"safCsi",AVSV_SA_AMF_CSI},
> +     {"safCSType",AVSV_SA_AMF_CS_BASE_TYPE},
> +     {"safCsiAttr",AVSV_SA_AMF_CSI_ATTRIBUTE},
> +     {"safCSIComp",AVSV_SA_AMF_CSI_ASSIGNMENT},
> +     /* Component and component types Related */
> +     {"safCompType",AVSV_SA_AMF_COMP_BASE_TYPE},
> +     {"safSupportedCsType",AVSV_SA_AMF_CLASS_INVALID},
> +     {"safComp",AVSV_SA_AMF_COMP},
> +     /* Global Component Attributes and Health Check Related */
> +     {"safRdn",AVSV_SA_AMF_COMP_GLOBAL_ATTR},
> +     {"safHealthcheckKey",AVSV_SA_AMF_CLASS_INVALID},
> +     /* Common Version Related */
> +     {"safVersion",AVSV_SA_AMF_CLASS_INVALID}
> +};
> +
> +type_map versioned_types = {
> +     {"safAppType",AVSV_SA_AMF_APP_TYPE},
> +     {"safSgType",AVSV_SA_AMF_SG_TYPE},
> +     {"safSuType",AVSV_SA_AMF_SU_TYPE},
> +     {"safSvcType",AVSV_SA_AMF_SVC_TYPE},
> +     {"safCSType",AVSV_SA_AMF_CS_TYPE},
> +     {"safCompType",AVSV_SA_AMF_COMP_TYPE}
> +};
> +
>   //
>   // TODO(HANO) Temporary use this function instead of strdup which uses 
> malloc.
>   // Later on remove this function and use std::string instead
> @@ -86,10 +139,11 @@
>       SaAisErrorT rc;
>       AvdJobDequeueResultT res;
>       
> -     TRACE_ENTER2("Create %s", parentName_.value);
> +     TRACE_ENTER2("Create %s", parentName_.c_str());
>   
> +     const SaNameTWrapper parent_name(parentName_);
>       rc = saImmOiRtObjectCreate_2(immOiHandle, className_,
> -                                  &parentName_, attrValues_);
> +                                  parent_name, attrValues_);
>   
>       if ((rc == SA_AIS_OK) || (rc == SA_AIS_ERR_EXIST)) {
>               delete Fifo::dequeue();
> @@ -150,7 +204,7 @@
>       const SaImmAttrModificationT_2 *attrMods[] = {&attrMod, nullptr};
>       SaImmAttrValueT attrValues[] = {value_};
>   
> -     TRACE_ENTER2("Update '%s' %s", dn_.value, attributeName_);
> +     TRACE_ENTER2("Update '%s' %s", dn.c_str(), attributeName_);
>   
>       attrMod.modType = SA_IMM_ATTR_VALUES_REPLACE;
>       attrMod.modAttr.attrName = attributeName_;
> @@ -158,7 +212,7 @@
>       attrMod.modAttr.attrValueType = attrValueType_;
>       attrMod.modAttr.attrValues = attrValues;
>   
> -     rc = saImmOiRtObjectUpdate_2(immOiHandle, &dn_, attrMods);
> +     rc = saImmOiRtObjectUpdate_o3(immOiHandle, dn.c_str(), attrMods);
>   
>       if ((rc == SA_AIS_OK) || (rc == SA_AIS_ERR_NOT_EXIST)) {
>               delete Fifo::dequeue();
> @@ -196,9 +250,9 @@
>       SaAisErrorT rc;
>       AvdJobDequeueResultT res;
>   
> -     TRACE_ENTER2("Delete %s", dn_.value);
> +     TRACE_ENTER2("Delete %s", dn.c_str());
>   
> -     rc = saImmOiRtObjectDelete(immOiHandle, &dn_);
> +     rc = saImmOiRtObjectDelete_o3(immOiHandle, dn.c_str());
>   
>       if ((rc == SA_AIS_OK) || (rc == SA_AIS_ERR_NOT_EXIST)) {
>               delete Fifo::dequeue();
> @@ -370,7 +424,7 @@
>       (SaImmOiImplementerNameT)"safAmfService";
>   static const SaImmOiImplementerNameT applierNamePrefix =
>       (SaImmOiImplementerNameT)"@safAmfService";
> -static SaVersionT immVersion = { 'A', 2, 11 };
> +static SaVersionT immVersion = { 'A', 2, 15 };
>   
>   /* This string array must match the AVSV_AMF_CLASS_ID enum */
>   static const char *avd_class_names[] = {
> @@ -456,6 +510,7 @@
>               valueSize = sizeof(SaTimeT);
>               break;
>       case SA_IMM_ATTR_SANAMET:
> +             //@todo this needs updating to support long DN
>               valueSize = sizeof(SaNameT);
>               break;
>       case SA_IMM_ATTR_SAFLOATT:
> @@ -535,13 +590,14 @@
>       return copy;
>   }
>   
> -static AVSV_AMF_CLASS_ID class_name_to_class_type(const char *className)
> +static AVSV_AMF_CLASS_ID class_name_to_class_type(const std::string& 
> className)
>   {
>       int i;
>   
>       for (i = 0; i < AVSV_SA_AMF_CLASS_MAX; i++) {
> -             if (strcmp(className, avd_class_names[i]) == 0)
> +             if (className.compare(avd_class_names[i]) == 0) {
>                       return static_cast<AVSV_AMF_CLASS_ID>(i);
> +             }
>       }
>   
>       osafassert(0);
> @@ -560,111 +616,49 @@
>    * NOTES: None.
>    *
>    **************************************************************************/
> -static AVSV_AMF_CLASS_ID object_name_to_class_type(const SaNameT *obj_name)
> +static AVSV_AMF_CLASS_ID object_name_to_class_type(const std::string& 
> obj_name)
>   {
> +     TRACE_ENTER2("%s", obj_name.c_str());
>       AVSV_AMF_CLASS_ID class_type = AVSV_SA_AMF_CLASS_INVALID;
>   
> -     /* Cluster and Node Class Related */
> -     if (strncmp((char *)&obj_name->value, "safAmfCluster=", 14) == 0) {
> -             class_type = AVSV_SA_AMF_CLUSTER;
> -     } else if (strncmp((char *)&obj_name->value, "safAmfNode=", 11) == 0) {
> -             class_type = AVSV_SA_AMF_NODE;
> -     } else if (strncmp((char *)&obj_name->value, "safAmfNodeGroup=", 16) == 
> 0) {
> -             class_type = AVSV_SA_AMF_NODE_GROUP;
> -     } else if (strncmp((char *)&obj_name->value, "safInstalledSwBundle=", 
> 21) == 0) {
> -             class_type = AVSV_SA_AMF_NODE_SW_BUNDLE;
> +     const std::string::size_type first_equal = obj_name.find('=');
> +     const std::string prefix(obj_name.substr(0, first_equal));
> +
> +     if (first_equal != std::string::npos) {
> +             // prefix contains all the chars before the first comma
> +             class_type = amf_type_map[prefix];
> +     } else {
> +             LOG_NO("unknown type: %s", obj_name.c_str());
> +             osafassert(false);
>       }
>   
> -     /* Application Class Related */
> -     else if (strncmp((char *)&obj_name->value, "safApp=", 7) == 0) {
> -             class_type = AVSV_SA_AMF_APP;
> -     } else if (strncmp((char *)&obj_name->value, "safAppType=", 11) == 0) {
> -             class_type = AVSV_SA_AMF_APP_BASE_TYPE;
> -     }
> -
> -     /* Service Group Class Related */
> -     else if (strncmp((char *)&obj_name->value, "safSg=", 6) == 0) {
> -             class_type = AVSV_SA_AMF_SG;
> -     } else if (strncmp((char *)&obj_name->value, "safSgType=", 10) == 0) {
> -             class_type = AVSV_SA_AMF_SG_BASE_TYPE;
> -     }
> -
> -     /* Service Unit Class Related */
> -     else if (strncmp((char *)&obj_name->value, "safSu=", 6) == 0) {
> -             class_type = AVSV_SA_AMF_SU;
> -     } else if (strncmp((char *)&obj_name->value, "safSuType=", 10) == 0) {
> -             class_type = AVSV_SA_AMF_SU_BASE_TYPE;
> -     } else if (strncmp((char *)&obj_name->value, "safMemberCompType=", 18) 
> == 0) {
> -             class_type = AVSV_SA_AMF_SUT_COMP_TYPE;
> -     }
> -
> -     /* Service Instance Class Related */
> -     else if (strncmp((char *)&obj_name->value, "safSi=", 6) == 0) {
> -             class_type = AVSV_SA_AMF_SI;
> -     } else if (strncmp((char *)&obj_name->value, "safSvcType=", 11) == 0) {
> -             class_type = AVSV_SA_AMF_SVC_BASE_TYPE;
> -     } else if (strncmp((char *)&obj_name->value, "safDepend=", 10) == 0) {
> -             class_type = AVSV_SA_AMF_SI_DEPENDENCY;
> -     } else if (strncmp((char *)&obj_name->value, "safRankedSu=", 12) == 0) {
> -             class_type = AVSV_SA_AMF_SI_RANKED_SU;
> -     } else if (strncmp((char *)&obj_name->value, "safSISU=", 8) == 0) {
> -             class_type = AVSV_SA_AMF_SI_ASSIGNMENT;
> -     } else if (strncmp((char *)&obj_name->value, "safMemberCSType=", 16) == 
> 0) {
> -             class_type = AVSV_SA_AMF_SVC_TYPE_CS_TYPES;
> -     }
> -
> -     /* Component Service Instance Class Related */
> -     else if (strncmp((char *)&obj_name->value, "safCsi=", 7) == 0) {
> -             class_type = AVSV_SA_AMF_CSI;
> -     } else if (strncmp((char *)&obj_name->value, "safCSType=", 10) == 0) {
> -             class_type = AVSV_SA_AMF_CS_BASE_TYPE;
> -     } else if (strncmp((char *)&obj_name->value, "safCsiAttr=", 11) == 0) {
> -             class_type = AVSV_SA_AMF_CSI_ATTRIBUTE;
> -     } else if (strncmp((char *)&obj_name->value, "safCSIComp=", 11) == 0) {
> -             class_type = AVSV_SA_AMF_CSI_ASSIGNMENT;
> -     }
> -
> -     /* Component and component types Related */
> -     else if (strncmp((char *)&obj_name->value, "safCompType=", 12) == 0) {
> -             class_type = AVSV_SA_AMF_COMP_BASE_TYPE;
> -     } else if (strncmp((char *)&obj_name->value, "safSupportedCsType=", 19) 
> == 0) {
> -             if (strstr((char *)&obj_name->value, "safCompType=") != 0) {
> -                     class_type = AVSV_SA_AMF_CT_CS_TYPE;
> -             } else if (strstr((char *)&obj_name->value, "safComp=") != 0) {
> -                     class_type = AVSV_SA_AMF_COMP_CS_TYPE;
> -             }
> -     } else if (strncmp((char *)&obj_name->value, "safComp=", 8) == 0) {
> -             class_type = AVSV_SA_AMF_COMP;
> -     }
> -
> -     /* Global Component Attributes and Health Check Related */
> -     else if (strncmp((char *)&obj_name->value, "safRdn=", 7) == 0) {
> -             class_type = AVSV_SA_AMF_COMP_GLOBAL_ATTR;
> -     } else if (strncmp((char *)&obj_name->value, "safHealthcheckKey=", 18) 
> == 0) {
> -             if (strstr((char *)&obj_name->value, "safVersion=") != 0) {
> -                     class_type = AVSV_SA_AMF_HEALTH_CHECK_TYPE;
> -             } else if (strstr((char *)&obj_name->value, "safComp=") != 0) {
> -                     class_type = AVSV_SA_AMF_HEALTH_CHECK;
> +     if (class_type == AVSV_SA_AMF_CLASS_INVALID) {
> +             // we weren't able to do a simple lookup
> +             if (prefix.compare("safSupportedCsType") == 0) {
> +                     if (obj_name.find("safCompType=") != std::string::npos) 
> {
> +                             class_type = AVSV_SA_AMF_CT_CS_TYPE;
> +                     } else if (obj_name.find("safComp=") != 
> std::string::npos) {
> +                              class_type = AVSV_SA_AMF_COMP_CS_TYPE;
> +                     }
> +             } else if (prefix.compare("safHealthcheckKey") == 0) {
> +                     if (obj_name.find("safVersion=") != std::string::npos) {
> +                             class_type = AVSV_SA_AMF_HEALTH_CHECK_TYPE;
> +                     } else if (obj_name.find("safComp=") != 
> std::string::npos) {
> +                             class_type = AVSV_SA_AMF_HEALTH_CHECK;
> +                     }
> +             } else if (prefix.compare("safVersion") == 0) {
> +                     // eg safVersion=4.0.0,safAppType=OpenSafApplicationType
> +                     const std::string::size_type first_comma = 
> obj_name.find(',');
> +                     const std::string::size_type second_equal = 
> obj_name.find('=', first_comma + 1);
> +                     const std::string type(obj_name.substr(first_comma + 1,
> +                             second_equal - first_comma - 1));
> +                     
> +                     TRACE("versioned type %s", type.c_str());
> +                     
> +                     class_type = versioned_types[type];
>               }
>       }
> -
> -     /* Common Version Related */
> -     else if (strncmp((char *)&obj_name->value, "safVersion=", 11) == 0) {
> -             if (strstr((char *)&obj_name->value, "safAppType=") != 0) {
> -                     class_type = AVSV_SA_AMF_APP_TYPE;
> -             } else if (strstr((char *)&obj_name->value, "safSgType=") != 0) 
> {
> -                     class_type = AVSV_SA_AMF_SG_TYPE;
> -             } else if (strstr((char *)&obj_name->value, "safSuType=") != 0) 
> {
> -                     class_type = AVSV_SA_AMF_SU_TYPE;
> -             } else if (strstr((char *)&obj_name->value, "safSvcType=") != 
> 0) {
> -                     class_type = AVSV_SA_AMF_SVC_TYPE;
> -             } else if (strstr((char *)&obj_name->value, "safCSType=") != 0) 
> {
> -                     class_type = AVSV_SA_AMF_CS_TYPE;
> -             } else if (strstr((char *)&obj_name->value, "safCompType=") != 
> 0) {
> -                     class_type = AVSV_SA_AMF_COMP_TYPE;
> -             }
> -     }
> -
> +     TRACE_LEAVE2("%u", class_type);
>       return class_type;
>   }
>   
> @@ -684,7 +678,7 @@
>       SaInvocationT invocation, const SaNameT *object_name,
>       SaImmAdminOperationIdT op_id, const SaImmAdminOperationParamsT_2 
> **params)
>   {
> -     AVSV_AMF_CLASS_ID type = object_name_to_class_type(object_name);
> +     AVSV_AMF_CLASS_ID type = 
> object_name_to_class_type(Amf::to_string(object_name));
>   
>       TRACE_ENTER2("'%s', invocation: %llu, op: %llu", object_name->value, 
> invocation, op_id);
>   
> @@ -756,7 +750,7 @@
>       const SaNameT *object_name, const SaImmAttrNameT *attribute_names)
>   {
>       SaAisErrorT error;
> -     AVSV_AMF_CLASS_ID type = object_name_to_class_type(object_name);
> +     AVSV_AMF_CLASS_ID type = 
> object_name_to_class_type(Amf::to_string(object_name));
>   
>       TRACE_ENTER2("%s", object_name->value);
>       osafassert(rtattr_update_callback[type] != nullptr);
> @@ -845,7 +839,7 @@
>   
>       /* Verify that DN is valid for class */
>       id_from_class_name = class_name_to_class_type(class_name);
> -     id_from_dn = object_name_to_class_type(&operation->objectName);
> +     id_from_dn = 
> object_name_to_class_type(Amf::to_string(&operation->objectName));
>       if (id_from_class_name != id_from_dn) {
>               LOG_ER("Illegal DN '%s' for class '%s'", 
> operation->objectName.value, class_name);
>               rc = SA_AIS_ERR_INVALID_PARAM;
> @@ -974,7 +968,7 @@
>          are applied." */
>   
>       while ((opdata = ccbutil_getNextCcbOp(ccb_id, opdata)) != nullptr) {
> -             type = object_name_to_class_type(&opdata->objectName);
> +             type = 
> object_name_to_class_type(Amf::to_string(&opdata->objectName));
>   
>               /* Standby AMFD should process CCB completed callback only for 
> CCB_DELETE. */
>               if ((avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) &&
> @@ -1164,7 +1158,7 @@
>       TRACE_ENTER2("CCB ID %llu", ccb_id);
>   
>       while ((opdata = ccbutil_getNextCcbOp(ccb_id, opdata)) != nullptr) {
> -             type = object_name_to_class_type(&opdata->objectName);
> +             type = 
> object_name_to_class_type(Amf::to_string(&opdata->objectName));
>               /* Base types will not have an apply callback, skip empty ones 
> */
>               if (ccb_apply_callback[type] != nullptr) {
>                       /* insert the apply callback into the sorted list
> @@ -1208,7 +1202,7 @@
>       next = ccb_apply_list;
>       while (next != nullptr) {
>               // TODO: would be more elegant with yet another function pointer
> -             type = object_name_to_class_type(&next->opdata->objectName);
> +             type = 
> object_name_to_class_type(Amf::to_string(&next->opdata->objectName));
>               if ((type == AVSV_SA_AMF_SG) && (next->opdata->operationType == 
> CCBUTIL_CREATE)) {
>                       AVD_SG *sg = 
> sg_db->find(Amf::to_string(&next->opdata->objectName));
>                       avd_sg_adjust_config(sg);
> @@ -1417,7 +1411,7 @@
>       }
>   }
>   
> -void avd_class_impl_set(const char *className,
> +void avd_class_impl_set(const std::string& className,
>       SaImmOiRtAttrUpdateCallbackT rtattr_cb, 
> SaImmOiAdminOperationCallbackT_2 adminop_cb,
>       AvdImmOiCcbCompletedCallbackT ccb_compl_cb, AvdImmOiCcbApplyCallbackT 
> ccb_apply_cb)
>   {
> @@ -1529,7 +1523,7 @@
>    * @param attrValueType
>    * @param value
>    */
> -SaAisErrorT avd_saImmOiRtObjectUpdate_sync(const SaNameT *dn, SaImmAttrNameT 
> attributeName,
> +SaAisErrorT avd_saImmOiRtObjectUpdate_sync(const std::string& dn, 
> SaImmAttrNameT attributeName,
>       SaImmValueTypeT attrValueType, void *value)
>   {
>       SaAisErrorT rc;
> @@ -1537,7 +1531,7 @@
>       const SaImmAttrModificationT_2 *attrMods[] = {&attrMod, nullptr};
>       SaImmAttrValueT attrValues[] = {value};
>   
> -     TRACE_ENTER2("'%s' %s", dn->value, attributeName);
> +     TRACE_ENTER2("'%s' %s", dn.c_str(), attributeName);
>   
>       attrMod.modType = SA_IMM_ATTR_VALUES_REPLACE;
>       attrMod.modAttr.attrName = attributeName;
> @@ -1545,10 +1539,10 @@
>       attrMod.modAttr.attrValueType = attrValueType;
>       attrMod.modAttr.attrValues = attrValues;
>   
> -     rc = saImmOiRtObjectUpdate_2(avd_cb->immOiHandle, dn, attrMods);
> +     rc = saImmOiRtObjectUpdate_o3(avd_cb->immOiHandle, dn.c_str(), 
> attrMods);
>       if (rc != SA_AIS_OK) {
>               LOG_WA("saImmOiRtObjectUpdate of '%s' %s failed with %u",
> -                     dn->value, attributeName, rc);
> +                     dn.c_str(), attributeName, rc);
>       }
>       return rc;
>   }
> @@ -1560,7 +1554,7 @@
>    * @param  dn (ptr to SaNameT)
>    * @return true/false
>    */
> -bool check_to_create_immjob_at_standby_amfd(const SaNameT *dn)
> +bool check_to_create_immjob_at_standby_amfd(const std::string& dn)
>   {
>   
>       AVSV_AMF_CLASS_ID class_type = AVSV_SA_AMF_CLASS_INVALID;
> @@ -1590,10 +1584,10 @@
>    * @param attrValueType
>    * @param value
>    */
> -void avd_saImmOiRtObjectUpdate(const SaNameT *dn, const char *attributeName,
> +void avd_saImmOiRtObjectUpdate(const std::string& dn, const std::string& 
> attributeName,
>       SaImmValueTypeT attrValueType, void *value)
>   {
> -     TRACE_ENTER2("'%s' %s", dn->value, attributeName);
> +     TRACE_ENTER2("'%s' %s", dn.c_str(), attributeName.c_str());
>       
>       size_t sz;
>   
> @@ -1605,8 +1599,8 @@
>   
>       sz = value_size(attrValueType);
>   
> -     ajob->dn_= *dn;
> -     ajob->attributeName_= StrDup(attributeName);
> +     ajob->dn = dn;
> +     ajob->attributeName_= StrDup(attributeName.c_str());
>       ajob->attrValueType_ = attrValueType;
>       ajob->value_ = new char[sz];
>   
> @@ -1622,10 +1616,10 @@
>    * @param parentName
>    * @param attrValues
>    */
> -void avd_saImmOiRtObjectCreate(const char *className,
> -     const SaNameT *parentName, const SaImmAttrValuesT_2 **attrValues)
> +void avd_saImmOiRtObjectCreate(const std::string& className,
> +     const std::string& parentName, const SaImmAttrValuesT_2 **attrValues)
>   {
> -     TRACE_ENTER2("%s %s", className, parentName->value);
> +     TRACE_ENTER2("%s %s", className.c_str(), parentName.c_str());
>   
>       if ((avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) &&
>                       (check_to_create_immjob_at_standby_amfd(parentName) == 
> false))
> @@ -1633,9 +1627,9 @@
>   
>       ImmObjCreate* ajob = new ImmObjCreate;
>   
> -     ajob->className_ = StrDup(className);
> +     ajob->className_ = StrDup(className.c_str());
>       osafassert(ajob->className_ != nullptr);
> -     ajob->parentName_ = *parentName;
> +     ajob->parentName_ = parentName;
>       ajob->attrValues_ = dupSaImmAttrValuesT_array(attrValues);
>       Fifo::queue(ajob);
>       
> @@ -1646,9 +1640,9 @@
>    * Queue an IM object delete to be executed later, non blocking
>    * @param dn
>    */
> -void avd_saImmOiRtObjectDelete(const SaNameT* dn)
> +void avd_saImmOiRtObjectDelete(const std::string& dn)
>   {
> -     TRACE_ENTER2("%s", dn->value);
> +     TRACE_ENTER2("%s", dn.c_str());
>       
>       if ((avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) &&
>                       (check_to_create_immjob_at_standby_amfd(dn) == false))
> @@ -1656,7 +1650,7 @@
>   
>       ImmObjDelete *ajob = new ImmObjDelete;
>   
> -     ajob->dn_ = *dn;
> +     ajob->dn = dn;
>       Fifo::queue(ajob);
>       
>       TRACE_LEAVE();
> @@ -1671,19 +1665,20 @@
>       for (std::map<std::string, AVD_SU*>::const_iterator it = su_db->begin();
>                       it != su_db->end(); it++) {
>               AVD_SU *su = it->second;
> -             avd_saImmOiRtObjectUpdate(&su->name, "saAmfSUPreInstantiable",
> +             avd_saImmOiRtObjectUpdate(su->name, "saAmfSUPreInstantiable",
>                       SA_IMM_ATTR_SAUINT32T,  &su->saAmfSUPreInstantiable);
>   
> -             avd_saImmOiRtObjectUpdate(&su->name, "saAmfSUHostedByNode",
> -                     SA_IMM_ATTR_SANAMET, &su->saAmfSUHostedByNode);
> +             const SaNameTWrapper hosted_by_node(su->saAmfSUHostedByNode);
> +             avd_saImmOiRtObjectUpdate(su->name, "saAmfSUHostedByNode",
> +                     SA_IMM_ATTR_SANAMET, (void*)static_cast<const 
> SaNameT*>(hosted_by_node));
>   
> -             avd_saImmOiRtObjectUpdate(&su->name, "saAmfSUPresenceState",
> +             avd_saImmOiRtObjectUpdate(su->name, "saAmfSUPresenceState",
>                       SA_IMM_ATTR_SAUINT32T, &su->saAmfSUPresenceState);
>   
> -             avd_saImmOiRtObjectUpdate(&su->name, "saAmfSUOperState",
> +             avd_saImmOiRtObjectUpdate(su->name, "saAmfSUOperState",
>                       SA_IMM_ATTR_SAUINT32T, &su->saAmfSUOperState);
>   
> -             avd_saImmOiRtObjectUpdate(&su->name, "saAmfSUReadinessState",
> +             avd_saImmOiRtObjectUpdate(su->name, "saAmfSUReadinessState",
>                       SA_IMM_ATTR_SAUINT32T, &su->saAmfSuReadinessState);
>   
>       }
> @@ -1692,15 +1687,15 @@
>       for (std::map<std::string, AVD_COMP*>::const_iterator it = 
> comp_db->begin();
>                       it != comp_db->end(); it++) {
>               AVD_COMP *comp  = it->second;
> -             avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
> +             avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name),
>                       "saAmfCompReadinessState", SA_IMM_ATTR_SAUINT32T,
>                       &comp->saAmfCompReadinessState);
>   
> -             avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
> +             avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name),
>                       "saAmfCompOperState", SA_IMM_ATTR_SAUINT32T,
>                       &comp->saAmfCompOperState);
>   
> -             avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
> +             avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name),
>                       "saAmfCompPresenceState", SA_IMM_ATTR_SAUINT32T,
>                       &comp->saAmfCompPresenceState);
>   
> @@ -1710,7 +1705,7 @@
>       for (std::map<std::string, AVD_AVND *>::const_iterator it = 
> node_name_db->begin();
>                       it != node_name_db->end(); it++) {
>               AVD_AVND *node = it->second;
> -             avd_saImmOiRtObjectUpdate(&node->name, "saAmfNodeOperState",
> +             avd_saImmOiRtObjectUpdate(node->name, "saAmfNodeOperState",
>                               SA_IMM_ATTR_SAUINT32T, 
> &node->saAmfNodeOperState);
>       }
>   
> @@ -1718,7 +1713,7 @@
>       for (std::map<std::string, AVD_SI*>::const_iterator it = si_db->begin();
>                       it != si_db->end(); it++) {
>               AVD_SI *si = it->second;
> -             avd_saImmOiRtObjectUpdate(&si->name, "saAmfSIAssignmentState",
> +             avd_saImmOiRtObjectUpdate(si->name, "saAmfSIAssignmentState",
>                       SA_IMM_ATTR_SAUINT32T, &si->saAmfSIAssignmentState);
>       }
>   }


------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to