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