osaf/services/saf/amf/amfd/app.cc | 68 ++++----
osaf/services/saf/amf/amfd/apptype.cc | 61 ++++---
osaf/services/saf/amf/amfd/clm.cc | 14 +-
osaf/services/saf/amf/amfd/cluster.cc | 2 +-
osaf/services/saf/amf/amfd/comp.cc | 169 ++++++++++----------
osaf/services/saf/amf/amfd/compcstype.cc | 174 ++++++++++-----------
osaf/services/saf/amf/amfd/comptype.cc | 43 ++--
osaf/services/saf/amf/amfd/csi.cc | 248 +++++++++++++++++-------------
osaf/services/saf/amf/amfd/csiattr.cc | 4 +-
osaf/services/saf/amf/amfd/cstype.cc | 55 ++----
osaf/services/saf/amf/amfd/ctcstype.cc | 67 ++++----
11 files changed, 465 insertions(+), 440 deletions(-)
diff --git a/osaf/services/saf/amf/amfd/app.cc
b/osaf/services/saf/amf/amfd/app.cc
--- a/osaf/services/saf/amf/amfd/app.cc
+++ b/osaf/services/saf/amf/amfd/app.cc
@@ -26,6 +26,8 @@
AmfDb<std::string, AVD_APP> *app_db = 0;
AVD_APP::AVD_APP() :
+ name{},
+ saAmfAppType{},
saAmfApplicationAdminState(SA_AMF_ADMIN_UNLOCKED),
saAmfApplicationCurrNumSGs(0),
list_of_sg(nullptr),
@@ -33,11 +35,11 @@
app_type_list_app_next(nullptr),
app_type(nullptr)
{
- memset(&name, 0, sizeof(SaNameT));
- memset(&saAmfAppType, 0, sizeof(SaNameT));
}
-AVD_APP::AVD_APP(const SaNameT* dn) :
+AVD_APP::AVD_APP(const std::string& dn) :
+ name{dn},
+ saAmfAppType{},
saAmfApplicationAdminState(SA_AMF_ADMIN_UNLOCKED),
saAmfApplicationCurrNumSGs(0),
list_of_sg(nullptr),
@@ -45,10 +47,6 @@
app_type_list_app_next(nullptr),
app_type(nullptr)
{
- memset(&name, 0, sizeof(SaNameT));
- memcpy(name.value, dn->value, dn->length);
- name.length = dn->length;
- memset(&saAmfAppType, 0, sizeof(SaNameT));
}
AVD_APP::~AVD_APP()
@@ -58,7 +56,7 @@
// TODO(hafe) change this to a destructor
static void avd_app_delete(AVD_APP *app)
{
- app_db->erase(Amf::to_string(&app->name));
+ app_db->erase(app->name);
m_AVSV_SEND_CKPT_UPDT_ASYNC_RMV(avd_cb, app, AVSV_CKPT_AVD_APP_CONFIG);
avd_apptype_remove_app(app);
delete app;
@@ -66,7 +64,7 @@
static void app_add_to_model(AVD_APP *app)
{
- TRACE_ENTER2("%s", app->name.value);
+ TRACE_ENTER2("%s", app->name.c_str());
/* Check type link to see if it has been added already */
if (app->app_type != nullptr) {
@@ -74,10 +72,10 @@
goto done;
}
- app_db->insert(Amf::to_string(&app->name), app);
+ app_db->insert(app->name, app);
/* Find application type and make a link with app type */
- app->app_type = avd_apptype_get(&app->saAmfAppType);
+ app->app_type = avd_apptype_get(app->saAmfAppType);
osafassert(app->app_type);
avd_apptype_add_app(app);
@@ -160,7 +158,7 @@
sg->app = nullptr;
}
-static int is_config_valid(const SaNameT *dn, const SaImmAttrValuesT_2
**attributes,
+static int is_config_valid(const std::string& dn, const SaImmAttrValuesT_2
**attributes,
const CcbUtilOperationData_t *opdata)
{
SaAisErrorT rc;
@@ -168,15 +166,15 @@
SaAmfAdminStateT admstate;
/* Applications should be root objects */
- if (strchr((char *)dn->value, ',') != nullptr) {
- report_ccb_validation_error(opdata, "Parent to '%s' is not
root", dn->value);
+ if (dn.find(',') != std::string::npos) {
+ report_ccb_validation_error(opdata, "Parent to '%s' is not
root", dn.c_str());
return 0;
}
rc = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfAppType"),
attributes, 0, &aname);
osafassert(rc == SA_AIS_OK);
- if (avd_apptype_get(&aname) == nullptr) {
+ if (avd_apptype_get(Amf::to_string(&aname)) == nullptr) {
/* App type does not exist in current model, check CCB */
if (opdata == nullptr) {
report_ccb_validation_error(opdata, "'%s' does not
exist in model", aname.value);
@@ -191,32 +189,35 @@
if
((immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfApplicationAdminState"),
attributes, 0, &admstate) == SA_AIS_OK) &&
!avd_admin_state_is_valid(admstate, opdata)) {
- report_ccb_validation_error(opdata, "Invalid
saAmfApplicationAdminState %u for '%s'", admstate, dn->value);
+ report_ccb_validation_error(opdata, "Invalid
saAmfApplicationAdminState %u for '%s'", admstate, dn.c_str());
return 0;
}
return 1;
}
-AVD_APP *avd_app_create(const SaNameT *dn, const SaImmAttrValuesT_2
**attributes)
+AVD_APP *avd_app_create(const std::string& dn, const SaImmAttrValuesT_2
**attributes)
{
AVD_APP *app;
SaAisErrorT error;
+ SaNameT app_type;
- TRACE_ENTER2("'%s'", dn->value);
+ TRACE_ENTER2("'%s'", dn.c_str());
/*
** If called at new active at failover, the object is found in the DB
** but needs to get configuration attributes initialized.
*/
- app = app_db->find(Amf::to_string(dn));
+ app = app_db->find(dn);
if (app == nullptr) {
app = new AVD_APP(dn);
- } else
+ } else {
TRACE("already created, refreshing config...");
+ }
- error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfAppType"),
attributes, 0, &app->saAmfAppType);
+ error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfAppType"),
attributes, 0, &app_type);
osafassert(error == SA_AIS_OK);
+ app->saAmfAppType = Amf::to_string(&app_type);
if
(immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfApplicationAdminState"),
attributes, 0, &app->saAmfApplicationAdminState) != SA_AIS_OK) {
/* Empty, assign default value */
@@ -237,7 +238,7 @@
switch (opdata->operationType) {
case CCBUTIL_CREATE:
- if (is_config_valid(&opdata->objectName,
opdata->param.create.attrValues, opdata))
+ if (is_config_valid(Amf::to_string(&opdata->objectName),
opdata->param.create.attrValues, opdata))
rc = SA_AIS_OK;
break;
case CCBUTIL_MODIFY:
@@ -246,7 +247,7 @@
if (!strcmp(attribute->attrName, "saAmfAppType")) {
SaNameT dn =
*((SaNameT*)attribute->attrValues[0]);
- if (nullptr == avd_apptype_get(&dn)) {
+ if (nullptr ==
avd_apptype_get(Amf::to_string(&dn))) {
report_ccb_validation_error(opdata,
"saAmfAppType '%s' not found", dn.value);
rc = SA_AIS_ERR_BAD_OPERATION;
goto done;
@@ -287,7 +288,7 @@
switch (opdata->operationType) {
case CCBUTIL_CREATE:
- app = avd_app_create(&opdata->objectName,
opdata->param.create.attrValues);
+ app = avd_app_create(Amf::to_string(&opdata->objectName),
opdata->param.create.attrValues);
osafassert(app);
app_add_to_model(app);
break;
@@ -299,11 +300,11 @@
const SaImmAttrValuesT_2 *attribute =
&attr_mod->modAttr;
if (!strcmp(attribute->attrName, "saAmfAppType")) {
- LOG_NO("Modified saAmfAppType from '%s' to '%s'
for '%s'", app->saAmfAppType.value,
-
(*((SaNameT*)attribute->attrValues[0])).value, app->name.value);
+ LOG_NO("Modified saAmfAppType from '%s' to '%s'
for '%s'", app->saAmfAppType.c_str(),
+
(*((SaNameT*)attribute->attrValues[0])).value, app->name.c_str());
avd_apptype_remove_app(app);
- app->saAmfAppType =
*((SaNameT*)attribute->attrValues[0]);
- app->app_type =
avd_apptype_get(&app->saAmfAppType);
+ app->saAmfAppType =
Amf::to_string((SaNameT*)attribute->attrValues[0]);
+ app->app_type =
avd_apptype_get(app->saAmfAppType);
avd_apptype_add_app(app);
}
else {
@@ -398,14 +399,15 @@
AVD_APP *app = app_db->find(Amf::to_string(objectName));
SaImmAttrNameT attributeName;
int i = 0;
+ const std::string obj(Amf::to_string(objectName));
- TRACE_ENTER2("%s", objectName->value);
+ TRACE_ENTER2("%s", obj.c_str());
osafassert(app != nullptr);
while ((attributeName = attributeNames[i++]) != nullptr) {
TRACE("Attribute %s", attributeName);
if (!strcmp(attributeName, "saAmfApplicationCurrNumSGs")) {
- avd_saImmOiRtObjectUpdate_sync(objectName,
attributeName,
+ avd_saImmOiRtObjectUpdate_sync(obj, attributeName,
SA_IMM_ATTR_SAUINT32T,
&app->saAmfApplicationCurrNumSGs);
} else {
LOG_ER("Ignoring unknown attribute '%s'",
attributeName);
@@ -447,15 +449,15 @@
while ((rc = immutil_saImmOmSearchNext_2(searchHandle, &dn,
(SaImmAttrValuesT_2 ***)&attributes)) == SA_AIS_OK) {
- if (!is_config_valid(&dn, attributes, nullptr))
+ if (!is_config_valid(Amf::to_string(&dn), attributes, nullptr))
goto done2;
- if ((app = avd_app_create(&dn, (const SaImmAttrValuesT_2
**)attributes)) == nullptr)
+ if ((app = avd_app_create(Amf::to_string(&dn), (const
SaImmAttrValuesT_2 **)attributes)) == nullptr)
goto done2;
app_add_to_model(app);
- if (avd_sg_config_get(&dn, app) != SA_AIS_OK)
+ if (avd_sg_config_get(Amf::to_string(&dn), app) != SA_AIS_OK)
goto done2;
if (avd_si_config_get(app) != SA_AIS_OK)
diff --git a/osaf/services/saf/amf/amfd/apptype.cc
b/osaf/services/saf/amf/amfd/apptype.cc
--- a/osaf/services/saf/amf/amfd/apptype.cc
+++ b/osaf/services/saf/amf/amfd/apptype.cc
@@ -27,23 +27,23 @@
AmfDb<std::string, AVD_APP_TYPE> *app_type_db = 0;
//
-AVD_APP_TYPE::AVD_APP_TYPE(const SaNameT* dn) {
- memcpy(name.value, dn->value, dn->length);
- name.length = dn->length;
+AVD_APP_TYPE::AVD_APP_TYPE(const std::string& dn) :
+ name(dn)
+{
}
//
AVD_APP_TYPE::~AVD_APP_TYPE() {
}
-AVD_APP_TYPE *avd_apptype_get(const SaNameT *dn)
+AVD_APP_TYPE *avd_apptype_get(const std::string& dn)
{
- return app_type_db->find(Amf::to_string(dn));
+ return app_type_db->find(dn);
}
static void apptype_delete(AVD_APP_TYPE **apptype)
{
- app_type_db->erase(Amf::to_string(&(*apptype)->name));
+ app_type_db->erase((*apptype)->name);
(*apptype)->sgAmfApptSGTypes.clear();
delete *apptype;
@@ -54,29 +54,30 @@
{
unsigned int rc;
osafassert(app_type != nullptr);
- TRACE("'%s'", app_type->name.value);
+ TRACE("'%s'", app_type->name.c_str());
- rc = app_type_db->insert(Amf::to_string(&app_type->name), app_type);
+ rc = app_type_db->insert(app_type->name, app_type);
osafassert(rc == NCSCC_RC_SUCCESS);
}
-static int is_config_valid(const SaNameT *dn, const SaImmAttrValuesT_2
**attributes,
+static int is_config_valid(const std::string& dn, const SaImmAttrValuesT_2
**attributes,
const CcbUtilOperationData_t *opdata)
{
int i = 0;
unsigned j;
- char *parent;
+ std::string::size_type parent;
AVD_AMF_SG_TYPE *sg_type;
const SaImmAttrValuesT_2 *attr;
- if ((parent = strchr((char*)dn->value, ',')) == nullptr) {
- report_ccb_validation_error(opdata, "No parent to '%s' ",
dn->value);
+ parent = dn.find(',');
+ if (parent == std::string::npos) {
+ report_ccb_validation_error(opdata, "No parent to '%s' ",
dn.c_str());
return 0;
}
/* AppType should be children to AppBaseType */
- if (strncmp(++parent, "safAppType=", 11) != 0) {
- report_ccb_validation_error(opdata, "Wrong parent '%s' to '%s'
", parent, dn->value);
+ if (dn.compare(parent + 1, 11, "safAppType=") != 0) {
+ report_ccb_validation_error(opdata, "Wrong parent '%s' to '%s'
", dn.substr(0, parent).c_str(), dn.c_str());
return 0;
}
@@ -108,7 +109,7 @@
return 1;
}
-static AVD_APP_TYPE *apptype_create(SaNameT *dn, const SaImmAttrValuesT_2
**attributes)
+static AVD_APP_TYPE *apptype_create(const std::string& dn, const
SaImmAttrValuesT_2 **attributes)
{
int i = 0;
unsigned int j;
@@ -116,7 +117,7 @@
AVD_APP_TYPE *app_type;
const SaImmAttrValuesT_2 *attr;
- TRACE_ENTER2("'%s'", dn->value);
+ TRACE_ENTER2("'%s'", dn.c_str());
app_type = new AVD_APP_TYPE(dn);
@@ -128,7 +129,7 @@
osafassert(attr->attrValuesNumber > 0);
for (j = 0; j < attr->attrValuesNumber; j++) {
- app_type->sgAmfApptSGTypes.push_back(*((SaNameT
*)attr->attrValues[j]));
+ app_type->sgAmfApptSGTypes.push_back(Amf::to_string((SaNameT
*)attr->attrValues[j]));
}
rc = 0;
@@ -148,26 +149,28 @@
AVD_APP *app;
bool app_exist = false;
CcbUtilOperationData_t *t_opData;
+ const std::string object_name(Amf::to_string(&opdata->objectName));
- TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
opdata->objectName.value);
+ TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, object_name.c_str());
switch (opdata->operationType) {
case CCBUTIL_CREATE:
- if (is_config_valid(&opdata->objectName,
opdata->param.create.attrValues, opdata))
+ if (is_config_valid(object_name,
opdata->param.create.attrValues, opdata))
rc = SA_AIS_OK;
break;
case CCBUTIL_MODIFY:
report_ccb_validation_error(opdata, "Modification of
SaAmfAppType not supported");
break;
case CCBUTIL_DELETE:
- app_type = avd_apptype_get(&opdata->objectName);
+ app_type = avd_apptype_get(object_name);
if (nullptr != app_type->list_of_app) {
/* check whether there exists a delete operation for
* each of the App in the app_type list in the current
CCB
*/
app = app_type->list_of_app;
while (app != nullptr) {
- t_opData =
ccbutil_getCcbOpDataByDN(opdata->ccbId, &app->name);
+ const SaNameTWrapper app_name(app->name);
+ t_opData =
ccbutil_getCcbOpDataByDN(opdata->ccbId, app_name);
if ((t_opData == nullptr) ||
(t_opData->operationType != CCBUTIL_DELETE)) {
app_exist = true;
break;
@@ -175,7 +178,7 @@
app = app->app_type_list_app_next;
}
if (app_exist == true) {
- report_ccb_validation_error(opdata,
"SaAmfAppType '%s' is in use", app_type->name.value);
+ report_ccb_validation_error(opdata,
"SaAmfAppType '%s' is in use", app_type->name.c_str());
goto done;
}
}
@@ -198,7 +201,8 @@
switch (opdata->operationType) {
case CCBUTIL_CREATE:
- app_type = apptype_create(&opdata->objectName,
opdata->param.create.attrValues);
+ app_type = apptype_create(Amf::to_string(&opdata->objectName),
+ opdata->param.create.attrValues);
osafassert(app_type);
apptype_add_to_model(app_type);
break;
@@ -217,7 +221,7 @@
SaAisErrorT rc = SA_AIS_ERR_INVALID_PARAM, error;
SaImmSearchHandleT searchHandle;
SaImmSearchParametersT_2 searchParam;
- SaNameT dn;
+ SaNameT dn_name;
const SaImmAttrValuesT_2 **attributes;
const char *className = "SaAmfAppType";
AVD_APP_TYPE *app_type;
@@ -237,12 +241,13 @@
goto done1;
}
- while (immutil_saImmOmSearchNext_2(searchHandle, &dn,
(SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) {
- if (!is_config_valid(&dn, attributes, nullptr))
+ while (immutil_saImmOmSearchNext_2(searchHandle, &dn_name,
(SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) {
+ std::string dn(Amf::to_string(&dn_name));
+ if (!is_config_valid(dn, attributes, nullptr))
goto done2;
- if ((app_type = avd_apptype_get(&dn)) == nullptr ) {
- if ((app_type = apptype_create(&dn, attributes)) ==
nullptr)
+ if ((app_type = avd_apptype_get(dn)) == nullptr ) {
+ if ((app_type = apptype_create(dn, attributes)) ==
nullptr)
goto done2;
apptype_add_to_model(app_type);
diff --git a/osaf/services/saf/amf/amfd/clm.cc
b/osaf/services/saf/amf/amfd/clm.cc
--- a/osaf/services/saf/amf/amfd/clm.cc
+++ b/osaf/services/saf/amf/amfd/clm.cc
@@ -228,13 +228,14 @@
for (i = 0; i < notificationBuffer->numberOfItems; i++)
{
notifItem = ¬ificationBuffer->notification[i];
+ const std::string
node_name(Amf::to_string(¬ifItem->clusterNode.nodeName));
switch(step) {
case SA_CLM_CHANGE_VALIDATE:
if(notifItem->clusterChange == SA_CLM_NODE_LEFT) {
node =
avd_node_find_nodeid(notifItem->clusterNode.nodeId);
if (node == nullptr) {
LOG_IN("%s: CLM node '%s' is not an AMF
cluster member",
- __FUNCTION__,
notifItem->clusterNode.nodeName.value);
+ __FUNCTION__,
node_name.c_str());
goto done;
}
/* store the invocation for clm response */
@@ -251,7 +252,7 @@
node =
avd_node_find_nodeid(notifItem->clusterNode.nodeId);
if (node == nullptr) {
LOG_IN("%s: CLM node '%s' is not an AMF cluster
member",
- __FUNCTION__,
notifItem->clusterNode.nodeName.value);
+ __FUNCTION__, node_name.c_str());
goto done;
}
if ( notifItem->clusterChange == SA_CLM_NODE_LEFT ||
@@ -274,7 +275,7 @@
node =
avd_node_find_nodeid(notifItem->clusterNode.nodeId);
if (node == nullptr) {
LOG_IN("%s: CLM node '%s' is not an AMF
cluster member",
- __FUNCTION__,
notifItem->clusterNode.nodeName.value);
+ __FUNCTION__,
node_name.c_str());
goto done;
}
TRACE(" Node Left: rootCauseEntity %s for node
%u", rootCauseEntity->value,
@@ -336,10 +337,9 @@
for (std::map<std::string, AVD_AVND
*>::const_iterator it = node_name_db->begin();
it != node_name_db->end();
it++) {
node = it->second;
- if (0 ==
strncmp((char*)node->saAmfNodeClmNode.value,
-
(char*)notifItem->clusterNode.nodeName.value,
-
notifItem->clusterNode.nodeName.length))
- break;
+ if
(node->saAmfNodeClmNode.compare(node_name) == 0) {
+ break;
+ }
}
if ( node != nullptr ) {
memcpy(&(node->node_info),
&(notifItem->clusterNode),
diff --git a/osaf/services/saf/amf/amfd/cluster.cc
b/osaf/services/saf/amf/amfd/cluster.cc
--- a/osaf/services/saf/amf/amfd/cluster.cc
+++ b/osaf/services/saf/amf/amfd/cluster.cc
@@ -218,7 +218,7 @@
goto done;
}
- avd_cluster->saAmfCluster = dn;
+ avd_cluster->saAmfCluster = Amf::to_string(&dn);
/* Cluster should be root object */
if (strchr((char *)dn.value, ',') != nullptr) {
diff --git a/osaf/services/saf/amf/amfd/comp.cc
b/osaf/services/saf/amf/amfd/comp.cc
--- a/osaf/services/saf/amf/amfd/comp.cc
+++ b/osaf/services/saf/amf/amfd/comp.cc
@@ -45,9 +45,10 @@
void avd_comp_db_add(AVD_COMP *comp)
{
unsigned int rc;
+ const std::string comp_name(Amf::to_string(&comp->comp_info.name));
- if (comp_db->find(Amf::to_string(&comp->comp_info.name)) == nullptr) {
- rc = comp_db->insert(Amf::to_string(&comp->comp_info.name),
comp);
+ if (comp_db->find(comp_name) == nullptr) {
+ rc = comp_db->insert(comp_name, comp);
osafassert(rc == NCSCC_RC_SUCCESS);
}
}
@@ -89,15 +90,15 @@
}
//
-AVD_COMP::AVD_COMP(const SaNameT *dn) {
+AVD_COMP::AVD_COMP(const std::string& dn) {
initialize();
-
- memcpy(&comp_info.name.value, dn->value, dn->length);
- comp_info.name.length = dn->length;
+ memset(&comp_info.name, 0, sizeof(comp_info.name));
+ memcpy(&comp_info.name.value, dn.c_str(), dn.length());
+ comp_info.name.length = dn.length();
}
//
-AVD_COMP *avd_comp_new(const SaNameT *dn)
+AVD_COMP *avd_comp_new(const std::string& dn)
{
AVD_COMP *comp;
@@ -125,26 +126,26 @@
if ((comp->saAmfCompPresenceState ==
SA_AMF_PRESENCE_TERMINATION_FAILED) &&
(pres_state == SA_AMF_PRESENCE_UNINSTANTIATED)){
- avd_alarm_clear(&comp->comp_info.name,
+ avd_alarm_clear(Amf::to_string(&comp->comp_info.name),
SA_AMF_NTFID_COMP_CLEANUP_FAILED,
SA_NTF_SOFTWARE_ERROR);
}
if ((comp->saAmfCompPresenceState ==
SA_AMF_PRESENCE_INSTANTIATION_FAILED) &&
(pres_state == SA_AMF_PRESENCE_UNINSTANTIATED)){
- avd_alarm_clear(&comp->comp_info.name,
+ avd_alarm_clear(Amf::to_string(&comp->comp_info.name),
SA_AMF_NTFID_COMP_INSTANTIATION_FAILED,
SA_NTF_SOFTWARE_ERROR);
}
comp->saAmfCompPresenceState = pres_state;
- avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
"saAmfCompPresenceState",
+ avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name),
"saAmfCompPresenceState",
SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompPresenceState);
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, comp,
AVSV_CKPT_COMP_PRES_STATE);
if (comp->saAmfCompPresenceState ==
SA_AMF_PRESENCE_INSTANTIATION_FAILED)
- avd_send_comp_inst_failed_alarm(&comp->comp_info.name,
&node->name);
+
avd_send_comp_inst_failed_alarm(Amf::to_string(&comp->comp_info.name),
node->name);
else if (comp->saAmfCompPresenceState ==
SA_AMF_PRESENCE_TERMINATION_FAILED)
- avd_send_comp_clean_failed_alarm(&comp->comp_info.name,
&node->name);
+
avd_send_comp_clean_failed_alarm(Amf::to_string(&comp->comp_info.name),
node->name);
if ((comp->su->sg_of_su->saAmfSGAutoRepair == true) &&
(node->saAmfNodeAutoRepair == true) &&
@@ -158,9 +159,9 @@
avd_pres_state_name[pres_state]);
saflog(LOG_NOTICE, amfSvcUsrName,
"Ordering reboot of '%s' as repair action",
- node->name.value);
+ node->name.c_str());
LOG_NO("Node Failfast for '%s' as '%s' enters Term/Inst Failed
state",
- node->name.value,comp->comp_info.name.value);
+ node->name.c_str(),comp->comp_info.name.value);
avd_d2n_reboot_snd(node);
}
TRACE_LEAVE();
@@ -173,7 +174,7 @@
comp->comp_info.name.value,
avd_oper_state_name[comp->saAmfCompOperState], avd_oper_state_name[oper_state]);
comp->saAmfCompOperState = oper_state;
- avd_saImmOiRtObjectUpdate(&comp->comp_info.name, "saAmfCompOperState",
+ avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name),
"saAmfCompOperState",
SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompOperState);
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, comp,
AVSV_CKPT_COMP_OPER_STATE);
TRACE_LEAVE();
@@ -190,7 +191,7 @@
avd_readiness_state_name[comp->saAmfCompReadinessState],
avd_readiness_state_name[readiness_state]);
comp->saAmfCompReadinessState = readiness_state;
if (comp->su->get_surestart() == false)
- avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
"saAmfCompReadinessState",
+
avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name),
"saAmfCompReadinessState",
SA_IMM_ATTR_SAUINT32T,
&comp->saAmfCompReadinessState);
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, comp,
AVSV_CKPT_COMP_READINESS_STATE);
TRACE_LEAVE();
@@ -205,9 +206,9 @@
/* alarm & notifications */
if(proxy_status == SA_AMF_PROXY_STATUS_UNPROXIED)
-
avd_send_comp_proxy_status_unproxied_alarm(&comp->comp_info.name);
+
avd_send_comp_proxy_status_unproxied_alarm(Amf::to_string(&comp->comp_info.name));
else if(proxy_status == SA_AMF_PROXY_STATUS_PROXIED)
- avd_send_comp_proxy_status_proxied_ntf(&comp->comp_info.name,
+
avd_send_comp_proxy_status_proxied_ntf(Amf::to_string(&comp->comp_info.name),
SA_AMF_PROXY_STATUS_UNPROXIED,
SA_AMF_PROXY_STATUS_PROXIED);
@@ -229,7 +230,7 @@
*/
static void comp_add_to_model(AVD_COMP *comp)
{
- SaNameT dn;
+ std::string dn;
AVD_SU *su = comp->su;
TRACE_ENTER2("%s", comp->comp_info.name.value);
@@ -240,11 +241,11 @@
goto done;
}
- avsv_sanamet_init(&comp->comp_info.name, &dn, "safSu");
- su = comp->su = su_db->find(Amf::to_string(&dn));
+ avsv_sanamet_init(Amf::to_string(&comp->comp_info.name), dn, "safSu");
+ su = comp->su = su_db->find(dn);
avd_comp_db_add(comp);
- comp->comp_type =
comptype_db->find(Amf::to_string(&comp->saAmfCompType));
+ comp->comp_type = comptype_db->find(comp->saAmfCompType);
osafassert(comp->comp_type);
avd_comptype_add_comp(comp);
su->add_comp(comp);
@@ -290,7 +291,7 @@
(node->node_state == AVD_AVND_STATE_NCS_INIT)) {
if (avd_snd_su_msg(avd_cb, su) != NCSCC_RC_SUCCESS) {
LOG_ER("SU '%s', Comp '%s': avd_snd_su_msg
failed %s", __FUNCTION__,
- su->name.value,
comp->comp_info.name.value);
+ su->name.c_str(),
comp->comp_info.name.value);
goto done;
}
}
@@ -302,13 +303,13 @@
avd_comp_oper_state_set(comp, SA_AMF_OPERATIONAL_ENABLED);
/* Set runtime cached attributes. */
- avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
"saAmfCompReadinessState",
+ avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name),
"saAmfCompReadinessState",
SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompReadinessState);
- avd_saImmOiRtObjectUpdate(&comp->comp_info.name, "saAmfCompOperState",
+ avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name),
"saAmfCompOperState",
SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompOperState);
- avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
"saAmfCompPresenceState",
+ avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name),
"saAmfCompPresenceState",
SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompPresenceState);
m_AVSV_SEND_CKPT_UPDT_ASYNC_ADD(avd_cb, comp,
AVSV_CKPT_AVD_COMP_CONFIG);
@@ -323,20 +324,20 @@
*
* @return int
*/
-static int is_config_valid(const SaNameT *dn, const SaImmAttrValuesT_2
**attributes, CcbUtilOperationData_t *opdata)
+static int is_config_valid(const std::string& dn, const SaImmAttrValuesT_2
**attributes, CcbUtilOperationData_t *opdata)
{
SaAisErrorT rc;
SaNameT aname;
- char *parent;
+ std::string::size_type pos;
SaUint32T value;
- if ((parent = strchr((char*)dn->value, ',')) == nullptr) {
- report_ccb_validation_error(opdata, "No parent to '%s' ",
dn->value);
+ if ((pos = dn.find(',')) == std::string::npos) {
+ report_ccb_validation_error(opdata, "No parent to '%s' ",
dn.c_str());
return 0;
}
- if (strncmp(++parent, "safSu=", 6) != 0) {
- report_ccb_validation_error(opdata, "Wrong parent '%s' to '%s'
", parent, dn->value);
+ if (dn.compare(pos + 1, 6, "safSu=") != 0) {
+ report_ccb_validation_error(opdata, "Wrong parent '%s' to '%s'
", dn.substr(pos +1).c_str(), dn.c_str());
return 0;
}
@@ -360,19 +361,19 @@
if (rc == SA_AIS_OK) {
if ((value < SA_AMF_NO_RECOMMENDATION) || (value >
SA_AMF_NODE_FAILFAST)) {
report_ccb_validation_error(opdata,
"Illegal/unsupported saAmfCompRecoveryOnError value %u for '%s'",
- value, dn->value);
+ value, dn.c_str());
return 0;
}
if (value == SA_AMF_NO_RECOMMENDATION)
LOG_NO("Invalid configuration,
saAmfCompRecoveryOnError=NO_RECOMMENDATION(%u) for '%s'",
- value, dn->value);
+ value, dn.c_str());
}
rc =
immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompDisableRestart"),
attributes, 0, &value);
if ((rc == SA_AIS_OK) && (value > SA_TRUE)) {
report_ccb_validation_error(opdata, "Illegal
saAmfCompDisableRestart value %u for '%s'",
- value, dn->value);
+ value, dn.c_str());
return 0;
}
@@ -486,40 +487,42 @@
return 1;
}
-static AVD_COMP *comp_create(const SaNameT *dn, const SaImmAttrValuesT_2
**attributes)
+static AVD_COMP *comp_create(const std::string& dn, const SaImmAttrValuesT_2
**attributes)
{
int rc = -1;
AVD_COMP *comp;
char *cmd_argv;
const char *str;
const AVD_COMP_TYPE *comptype;
+ SaNameT comp_type;
SaAisErrorT error;
- TRACE_ENTER2("'%s'", dn->value);
+ TRACE_ENTER2("'%s'", dn.c_str());
/*
** If called at new active at failover, the object is found in the DB
** but needs to get configuration attributes initialized.
*/
- if (nullptr == (comp = comp_db->find(Amf::to_string(dn)))) {
+ if (nullptr == (comp = comp_db->find(dn))) {
if ((comp = avd_comp_new(dn)) == nullptr)
goto done;
}
else
TRACE("already created, refreshing config...");
- error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompType"),
attributes, 0, &comp->saAmfCompType);
+ error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompType"),
attributes, 0, &comp_type);
osafassert(error == SA_AIS_OK);
+ comp->saAmfCompType = Amf::to_string(&comp_type);
- if ((comptype =
comptype_db->find(Amf::to_string(&comp->saAmfCompType))) == nullptr) {
- LOG_ER("saAmfCompType '%s' does not exist",
comp->saAmfCompType.value);
+ if ((comptype = comptype_db->find(comp->saAmfCompType)) == nullptr) {
+ LOG_ER("saAmfCompType '%s' does not exist",
comp->saAmfCompType.c_str());
goto done;
}
/* TODO clean this up! */
comp->comp_info.category =
avsv_amfcompcategory_to_avsvcomptype(comptype->saAmfCtCompCategory);
if (comp->comp_info.category == AVSV_COMP_TYPE_INVALID) {
- LOG_ER("Comp category %x invalid for '%s'",
comp->comp_info.category, comp->saAmfCompType.value);
+ LOG_ER("Comp category %x invalid for '%s'",
comp->comp_info.category, comp->saAmfCompType.c_str());
goto done;
}
@@ -679,7 +682,7 @@
*
* @return int
*/
-SaAisErrorT avd_comp_config_get(const SaNameT *su_name, AVD_SU *su)
+SaAisErrorT avd_comp_config_get(const std::string& su_name, AVD_SU *su)
{
SaAisErrorT rc, error = SA_AIS_ERR_FAILED_OPERATION;
SaImmSearchHandleT searchHandle;
@@ -722,7 +725,7 @@
searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT;
searchParam.searchOneAttr.attrValue = &className;
- if ((rc = immutil_saImmOmSearchInitialize_2(avd_cb->immOmHandle,
su_name,
+ if ((rc = immutil_saImmOmSearchInitialize_o2(avd_cb->immOmHandle,
su_name.c_str(),
SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR |
SA_IMM_SEARCH_GET_SOME_ATTR,
&searchParam, configAttributes, &searchHandle)) != SA_AIS_OK) {
@@ -733,22 +736,22 @@
while ((rc = immutil_saImmOmSearchNext_2(searchHandle, &comp_name,
(SaImmAttrValuesT_2 ***)&attributes)) == SA_AIS_OK) {
- if (!is_config_valid(&comp_name, attributes, nullptr))
+ if (!is_config_valid(Amf::to_string(&comp_name), attributes,
nullptr))
goto done2;
- if ((comp = comp_create(&comp_name, attributes)) == nullptr)
+ if ((comp = comp_create(Amf::to_string(&comp_name),
attributes)) == nullptr)
goto done2;
num_of_comp_in_su ++;
comp_add_to_model(comp);
- if (avd_compcstype_config_get(&comp_name, comp) != SA_AIS_OK)
+ if (avd_compcstype_config_get(Amf::to_string(&comp_name), comp)
!= SA_AIS_OK)
goto done2;
}
/* If there are no component in the SU, we treat it as invalid
configuration. */
if (0 == num_of_comp_in_su) {
- LOG_ER("There is no component configured for SU '%s'",
su_name->value);
+ LOG_ER("There is no component configured for SU '%s'",
su_name.c_str());
goto done2;
}
@@ -775,9 +778,10 @@
const SaNameT *objectName, SaImmAdminOperationIdT opId,
const SaImmAdminOperationParamsT_2 **params)
{
- TRACE_ENTER2("%llu, '%s', %llu", invocation, objectName->value, opId);
+ const std::string object_name(Amf::to_string(objectName));
+ TRACE_ENTER2("%llu, '%s', %llu", invocation, object_name.c_str(),
opId);
- AVD_COMP *comp = comp_db->find(Amf::to_string(objectName));
+ AVD_COMP *comp = comp_db->find(object_name);
osafassert(comp != nullptr);
switch (opId) {
@@ -785,28 +789,28 @@
case SA_AMF_ADMIN_RESTART:
if (comp->admin_pend_cbk.invocation != 0) {
report_admin_op_error(immOiHandle, invocation,
SA_AIS_ERR_TRY_AGAIN, nullptr,
- "Component undergoing admin operation
'%s'", objectName->value);
+ "Component undergoing admin operation
'%s'", object_name.c_str());
} else if ((comp->su->sg_of_su->sg_ncs_spec == true) &&
(comp->su->sg_of_su->sg_redundancy_model ==
SA_AMF_2N_REDUNDANCY_MODEL)) {
report_admin_op_error(immOiHandle, invocation,
SA_AIS_ERR_BAD_OPERATION, nullptr,
"Not allowed on comp of middleware 2N
SU : %s, op_id: %llu",
- objectName->value, opId);
+ object_name.c_str(), opId);
}
else if (comp->su->pend_cbk.invocation != 0) {
report_admin_op_error(immOiHandle, invocation,
SA_AIS_ERR_TRY_AGAIN, nullptr,
- "SU undergoing admin operation '%s'",
objectName->value);
+ "SU undergoing admin operation '%s'",
object_name.c_str());
}
else if (comp->su->su_on_node->admin_node_pend_cbk.invocation
!= 0) {
report_admin_op_error(immOiHandle, invocation,
SA_AIS_ERR_TRY_AGAIN, nullptr,
- "Node undergoing admin operation '%s'",
objectName->value);
+ "Node undergoing admin operation '%s'",
object_name.c_str());
}
else if (comp->saAmfCompPresenceState !=
SA_AMF_PRESENCE_INSTANTIATED) {
report_admin_op_error(immOiHandle, invocation,
SA_AIS_ERR_BAD_OPERATION, nullptr,
- "Component not instantiated '%s'",
objectName->value);
+ "Component not instantiated '%s'",
object_name.c_str());
}
else if (comp->saAmfCompOperState ==
SA_AMF_OPERATIONAL_DISABLED) {
report_admin_op_error(immOiHandle, invocation,
SA_AIS_ERR_BAD_OPERATION, nullptr,
- "Component disabled, first repair su or
check node status'%s'", objectName->value);
+ "Component disabled, first repair su or
check node status'%s'", object_name.c_str());
} else {
comp->admin_pend_cbk.admin_oper =
static_cast<SaAmfAdminOperationIdT>(opId);
comp->admin_pend_cbk.invocation = invocation;
@@ -830,11 +834,11 @@
AMFND will take care of reassignment.*/
/* prepare the admin op req message and queue
it */
- if (avd_admin_op_msg_snd(&comp->comp_info.name,
AVSV_SA_AMF_COMP,
+ if
(avd_admin_op_msg_snd(Amf::to_string(&comp->comp_info.name), AVSV_SA_AMF_COMP,
static_cast<SaAmfAdminOperationIdT>(opId),
comp->su->su_on_node)
!= NCSCC_RC_SUCCESS) {
report_admin_op_error(immOiHandle,
invocation, SA_AIS_ERR_TIMEOUT, nullptr,
- "Admin op request send
failed '%s'", objectName->value);
+ "Admin op request send
failed '%s'", object_name.c_str());
comp->admin_pend_cbk.admin_oper =
static_cast<SaAmfAdminOperationIdT>(0);
comp->admin_pend_cbk.invocation = 0;
}
@@ -856,19 +860,20 @@
static SaAisErrorT comp_rt_attr_cb(SaImmOiHandleT immOiHandle,
const SaNameT *objectName, const SaImmAttrNameT *attributeNames)
{
- AVD_COMP *comp = comp_db->find(Amf::to_string(objectName));
+ const std::string object_name(Amf::to_string(objectName));
+ AVD_COMP *comp = comp_db->find(object_name);
SaImmAttrNameT attributeName;
int i = 0;
- TRACE_ENTER2("'%s'", objectName->value);
+ TRACE_ENTER2("'%s'", object_name.c_str());
osafassert(comp != nullptr);
while ((attributeName = attributeNames[i++]) != nullptr) {
if (!strcmp("saAmfCompRestartCount", attributeName)) {
- avd_saImmOiRtObjectUpdate_sync(objectName,
attributeName,
+ avd_saImmOiRtObjectUpdate_sync(object_name,
attributeName,
SA_IMM_ATTR_SAUINT32T,
&comp->saAmfCompRestartCount);
} else if (!strcmp("saAmfCompCurrProxyName", attributeName)) {
- avd_saImmOiRtObjectUpdate_sync(objectName,
attributeName,
+ avd_saImmOiRtObjectUpdate_sync(object_name,
attributeName,
SA_IMM_ATTR_SANAMET,
&comp->saAmfCompCurrProxyName);
/* TODO */
} else if (!strcmp("saAmfCompCurrProxiedNames", attributeName))
{
@@ -928,18 +933,18 @@
it != compcstype_db->end(); it++) {
AVD_COMPCS_TYPE *compcstype = it->second;
if (compcstype->comp == comp) {
- SaNameT cstype_name;
+ std::string cstype_name;
AVD_CTCS_TYPE *ctcstype = nullptr;
AVD_CS_TYPE *cst = nullptr;
-
get_child_dn_from_ass_dn(&compcstype->name, &cstype_name);
+
get_child_dn_from_ass_dn(compcstype->name, cstype_name);
//First check if this cstype exists in
the sustem.
- if ((cst =
cstype_db->find(Amf::to_string(&cstype_name))) == nullptr) {
+ if ((cst =
cstype_db->find(cstype_name)) == nullptr) {
LOG_WA("cstype of '%s' is not
preseint in AMF database",
-
compcstype->name.value);
+
compcstype->name.c_str());
continue;
}
//ctcstype relationship should exists
with all the cstypes.
- if ((ctcstype = get_ctcstype(&dn,
&cstype_name)) == nullptr) {
+ if ((ctcstype =
get_ctcstype(Amf::to_string(&dn), cstype_name)) == nullptr) {
report_ccb_validation_error(opdata, "ctcstype relationship "
"between new
comptype and cstype from"
"component's
compcstype(s) does not exist");
@@ -1215,7 +1220,7 @@
switch (opdata->operationType) {
case CCBUTIL_CREATE:
- if (is_config_valid(&opdata->objectName,
opdata->param.create.attrValues, opdata))
+ if (is_config_valid(Amf::to_string(&opdata->objectName),
opdata->param.create.attrValues, opdata))
rc = SA_AIS_OK;
break;
case CCBUTIL_MODIFY:
@@ -1252,7 +1257,7 @@
comp = comp_db->find(Amf::to_string(&opdata->objectName));
param.name = comp->comp_info.name;
- comp_type = comptype_db->find(Amf::to_string(&comp->saAmfCompType));
+ comp_type = comptype_db->find(comp->saAmfCompType);
su_node_ptr = comp->su->get_node_ptr();
@@ -1280,18 +1285,18 @@
if (!strcmp(attribute->attrName, "saAmfCompType")) {
SaNameT *dn = (SaNameT*) value;
- const std::string
oldType(Amf::to_string(&comp->saAmfCompType));
+ const std::string oldType(comp->saAmfCompType);
if (oldType.compare(Amf::to_string(dn)) == 0) {
// ignore 'change' if it's being set to the
same value
- TRACE("saAmfCompType '%s' unchanged for '%s'",
comp->saAmfCompType.value,
+ TRACE("saAmfCompType '%s' unchanged for '%s'",
comp->saAmfCompType.c_str(),
opdata->objectName.value);
continue;
}
- TRACE("saAmfCompType modified from '%s' to '%s' for
'%s'", comp->saAmfCompType.value, dn->value,
+ TRACE("saAmfCompType modified from '%s' to '%s' for
'%s'", comp->saAmfCompType.c_str(), dn->value,
opdata->objectName.value);
avd_comptype_remove_comp(comp);
- comp->saAmfCompType = *dn;
+ comp->saAmfCompType = Amf::to_string(dn);
comp->comp_type = comptype_db->find(Amf::to_string(dn));
avd_comptype_add_comp(comp);
param.attr_id = saAmfCompType_ID;
@@ -1616,14 +1621,14 @@
} else if (!strcmp(attribute->attrName, "saAmfCompProxyCsi")) {
if (value_is_deleted)
- memset(&comp->comp_proxy_csi, 0,
sizeof(comp->comp_proxy_csi));
+ comp->comp_proxy_csi = "";
else
- comp->comp_proxy_csi = *((SaNameT *)value);
+ comp->comp_proxy_csi = Amf::to_string((SaNameT
*)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompContainerCsi")) {
if (value_is_deleted)
- memset(&comp->comp_proxy_csi, 0,
sizeof(comp->comp_container_csi));
+ comp->comp_proxy_csi = "";
else
- comp->comp_container_csi = *((SaNameT *)value);
+ comp->comp_container_csi =
Amf::to_string((SaNameT *)value);
} else {
osafassert(0);
}
@@ -1674,7 +1679,7 @@
switch (opdata->operationType) {
case CCBUTIL_CREATE:
- comp = comp_create(&opdata->objectName,
opdata->param.create.attrValues);
+ comp = comp_create(Amf::to_string(&opdata->objectName),
opdata->param.create.attrValues);
osafassert(comp);
comp_add_to_model(comp);
break;
@@ -1699,12 +1704,12 @@
*
* @return AVD_COMP*
*/
-AVD_COMP *avd_comp_get_or_create(const SaNameT *dn)
+AVD_COMP *avd_comp_get_or_create(const std::string& dn)
{
- AVD_COMP *comp = comp_db->find(Amf::to_string(dn));
+ AVD_COMP *comp = comp_db->find(dn);
if (!comp) {
- TRACE("'%s' does not exist, creating it", dn->value);
+ TRACE("'%s' does not exist, creating it", dn.c_str());
comp = avd_comp_new(dn);
osafassert(comp != nullptr);
avd_comp_db_add(comp);
@@ -1775,7 +1780,7 @@
*/
bool AVD_COMP::saaware() const
{
- AVD_COMP_TYPE *comptype =
comptype_db->find(Amf::to_string(&saAmfCompType));
+ AVD_COMP_TYPE *comptype = comptype_db->find(saAmfCompType);
return (IS_COMP_SAAWARE(comptype->saAmfCtCompCategory));
}
diff --git a/osaf/services/saf/amf/amfd/compcstype.cc
b/osaf/services/saf/amf/amfd/compcstype.cc
--- a/osaf/services/saf/amf/amfd/compcstype.cc
+++ b/osaf/services/saf/amf/amfd/compcstype.cc
@@ -32,37 +32,26 @@
AmfDb<std::string, AVD_COMPCS_TYPE> *compcstype_db = nullptr;;
//
-// TODO(HANO) Temporary use this function instead of strdup which uses malloc.
-// Later on remove this function and use std::string instead
-#include <cstring>
-static char *StrDup(const char *s)
-{
- char *c = new char[strlen(s) + 1];
- std::strcpy(c,s);
- return c;
-}
-
-//
AVD_COMPCS_TYPE::AVD_COMPCS_TYPE() {
}
//
-AVD_COMPCS_TYPE::AVD_COMPCS_TYPE(const SaNameT *dn) {
- memcpy(name.value, dn->value, dn->length);
- name.length = dn->length;
+AVD_COMPCS_TYPE::AVD_COMPCS_TYPE(const std::string& dn) :
+ name(dn)
+{
}
void avd_compcstype_db_add(AVD_COMPCS_TYPE *cst)
{
unsigned int rc;
- if (compcstype_db->find(Amf::to_string(&cst->name)) == nullptr) {
- rc = compcstype_db->insert(Amf::to_string(&cst->name),cst);
+ if (compcstype_db->find(cst->name) == nullptr) {
+ rc = compcstype_db->insert(cst->name, cst);
osafassert(rc == NCSCC_RC_SUCCESS);
}
}
-AVD_COMPCS_TYPE *avd_compcstype_new(const SaNameT *dn)
+AVD_COMPCS_TYPE *avd_compcstype_new(const std::string& dn)
{
AVD_COMPCS_TYPE *compcstype;
@@ -75,10 +64,10 @@
{
/* Check comp link to see if it has been added already */
if (cst->comp == nullptr) {
- SaNameT dn;
+ std::string dn;
avd_compcstype_db_add(cst);
- avsv_sanamet_init(&cst->name, &dn, "safComp=");
- cst->comp = comp_db->find(Amf::to_string(&dn));
+ avsv_sanamet_init(cst->name, dn, "safComp=");
+ cst->comp = comp_db->find(dn);
}
}
@@ -98,13 +87,14 @@
* row status is active.
**************************************************************************/
-AVD_COMPCS_TYPE * avd_compcstype_find_match(const SaNameT *cstype_name, const
AVD_COMP *comp)
+AVD_COMPCS_TYPE * avd_compcstype_find_match(const std::string& cstype_name,
const AVD_COMP *comp)
{
AVD_COMPCS_TYPE *cst = nullptr;
SaNameT dn;
+ const SaNameTWrapper cstype(cstype_name);
TRACE_ENTER();
- avsv_create_association_class_dn(cstype_name, &comp->comp_info.name,
"safSupportedCsType", &dn);
+ avsv_create_association_class_dn(cstype, &comp->comp_info.name,
"safSupportedCsType", &dn);
TRACE("'%s'", dn.value);
cst = compcstype_db->find(Amf::to_string(&dn));
TRACE_LEAVE();
@@ -117,35 +107,33 @@
*
* @return int
*/
-static int is_config_valid(const SaNameT *dn, CcbUtilOperationData_t *opdata)
+static int is_config_valid(const std::string& dn, CcbUtilOperationData_t
*opdata)
{
- SaNameT comp_name;
- const SaNameT *comptype_name;
- SaNameT ctcstype_name = {0};
- char *parent;
+ std::string comp_name;
+ std::string comptype_name;
+ std::string ctcstype_name;
+ std::string::size_type parent;
AVD_COMP *comp;
- char *cstype_name = StrDup((char*)dn->value);
- char *p;
+ std::string cstype_name;
+ std::string::size_type comma;
+ TRACE_ENTER2("%s", dn.c_str());
+
/* This is an association class, the parent (SaAmfComp) should come
after the second comma */
- if ((parent = strchr((char*)dn->value, ',')) == nullptr) {
- report_ccb_validation_error(opdata, "No parent to '%s' ",
dn->value);
+ if ((parent = dn.find(',')) == std::string::npos) {
+ report_ccb_validation_error(opdata, "No parent to '%s' ",
dn.c_str());
goto free_cstype_name;
}
- parent++;
-
/* Second comma should be the parent */
- if ((parent = strchr(parent, ',')) == nullptr) {
- report_ccb_validation_error(opdata, "No parent to '%s' ",
dn->value);
+ if ((parent = dn.find(',', parent + 1)) == std::string::npos) {
+ report_ccb_validation_error(opdata, "No parent to '%s' ",
dn.c_str());
goto free_cstype_name;
}
- parent++;
-
/* Should be children to SaAmfComp */
- if (strncmp(parent, "safComp=", 8) != 0) {
- report_ccb_validation_error(opdata, "Wrong parent '%s'",
parent);
+ if (dn.compare(parent + 1, 8, "safComp=") != 0) {
+ report_ccb_validation_error(opdata, "Wrong parent '%s'",
dn.c_str());
goto free_cstype_name;
}
@@ -154,88 +142,100 @@
** to create the SaAmfCompCsType instance later.
*/
- avsv_sanamet_init(dn, &comp_name, "safComp=");
- comp = comp_db->find(Amf::to_string(&comp_name));
+ avsv_sanamet_init(dn, comp_name, "safComp=");
+ comp = comp_db->find(comp_name);
+
+ TRACE("find %s", comp_name.c_str());
if (comp != nullptr)
- comptype_name = &comp->saAmfCompType;
+ comptype_name = comp->saAmfCompType;
else {
CcbUtilOperationData_t *tmp;
if (opdata == nullptr) {
- report_ccb_validation_error(opdata, "'%s' does not
exist in model", comp_name.value);
+ report_ccb_validation_error(opdata, "'%s' does not
exist in model", comp_name.c_str());
goto free_cstype_name;
}
- if ((tmp = ccbutil_getCcbOpDataByDN(opdata->ccbId, &comp_name))
== nullptr) {
- LOG_ER("'%s'does not exist in existing model or in
CCB", comp_name.value);
+ const SaNameTWrapper name(comp_name);
+ if ((tmp = ccbutil_getCcbOpDataByDN(opdata->ccbId, name)) ==
nullptr) {
+ LOG_ER("'%s'does not exist in existing model or in
CCB", comp_name.c_str());
osafassert(0);
goto free_cstype_name;
}
- comptype_name =
immutil_getNameAttr(tmp->param.create.attrValues, "saAmfCompType", 0);
+ const SaNameT* comptype =
immutil_getNameAttr(tmp->param.create.attrValues, "saAmfCompType", 0);
+ comptype_name = Amf::to_string(comptype);
}
- osafassert(comptype_name);
+ osafassert(comptype_name.empty() == false);
+
+ comma = dn.find(',');
+ osafassert(comma != std::string::npos);
+ comma = dn.find(',', comma + 1);
+ osafassert(comma != std::string::npos);
+
+ cstype_name = dn.substr(0, comma);
- p = strchr(cstype_name, ',') + 1;
- p = strchr(p, ',');
- *p = '\0';
+ ctcstype_name = cstype_name + "," + comptype_name;
- ctcstype_name.length = sprintf((char*)ctcstype_name.value, "%s,%s",
cstype_name, comptype_name->value);
-
- if (ctcstype_db->find(Amf::to_string(&ctcstype_name)) == nullptr) {
+ // ctcstype_name looks like:
+ //
safSupportedCsType=safVersion=4.0.0\,safCSType=AMFWDOG-OpenSAF,safVersion=4.0.0,safCompType=OpenSafCompTypeAMFWDOG
+ if (ctcstype_db->find(ctcstype_name) == nullptr) {
if (opdata == nullptr) {
- report_ccb_validation_error(opdata, "'%s' does not
exist in model", ctcstype_name.value);
+ report_ccb_validation_error(opdata, "'%s' does not
exist in model", ctcstype_name.c_str());
goto free_cstype_name;
}
- if (ccbutil_getCcbOpDataByDN(opdata->ccbId, &ctcstype_name) ==
nullptr) {
+ const SaNameTWrapper ctcstype(ctcstype_name);
+ if (ccbutil_getCcbOpDataByDN(opdata->ccbId, ctcstype) ==
nullptr) {
report_ccb_validation_error(opdata, "'%s' does not
exist in existing model or in CCB",
- ctcstype_name.value);
+ ctcstype_name.c_str());
goto free_cstype_name;
}
}
- delete [] cstype_name;
+ TRACE_LEAVE();
return 1;
free_cstype_name:
- delete [] cstype_name;
+ TRACE_LEAVE();
return 0;
}
-static AVD_COMPCS_TYPE *compcstype_create(const SaNameT *dn, const
SaImmAttrValuesT_2 **attributes)
+static AVD_COMPCS_TYPE *compcstype_create(const std::string& dn, const
SaImmAttrValuesT_2 **attributes)
{
int rc = -1;
AVD_COMPCS_TYPE *compcstype;
AVD_CTCS_TYPE *ctcstype;
- SaNameT ctcstype_name = {0};
- char *cstype_name = StrDup((char*)dn->value);
- char *p;
- SaNameT comp_name;
+ std::string ctcstype_name;
+ std::string cstype_name(dn);
+ std::string::size_type pos;
+ std::string comp_name;
AVD_COMP *comp;
SaUint32T num_max_act_csi, num_max_std_csi;
- TRACE_ENTER2("'%s'", dn->value);
+ TRACE_ENTER2("'%s'", dn.c_str());
/*
** If called at new active at failover, the object is found in the DB
** but needs to get configuration attributes initialized.
*/
- if ((nullptr == (compcstype = compcstype_db->find(Amf::to_string(dn))))
&&
+ if ((nullptr == (compcstype = compcstype_db->find(dn))) &&
((compcstype = avd_compcstype_new(dn)) == nullptr))
goto done;
- avsv_sanamet_init(dn, &comp_name, "safComp=");
- comp = comp_db->find(Amf::to_string(&comp_name));
+ avsv_sanamet_init(dn, comp_name, "safComp=");
+ comp = comp_db->find(comp_name);
- p = strchr(cstype_name, ',') + 1;
- p = strchr(p, ',');
- *p = '\0';
- ctcstype_name.length = sprintf((char*)ctcstype_name.value,
- "%s,%s", cstype_name, comp->comp_type->name.value);
+ pos = cstype_name.find(',');
+ osafassert(pos != std::string::npos);
+ pos = dn.find(',', pos + 1);
+ osafassert(pos != std::string::npos);
+ cstype_name = cstype_name.substr(0, pos);
- ctcstype = ctcstype_db->find(Amf::to_string(&ctcstype_name));
+ ctcstype_name = cstype_name + "," + comp->comp_type->name;
+
+ ctcstype = ctcstype_db->find(ctcstype_name);
if
(immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompNumMaxActiveCSIs"),
attributes, 0,
&num_max_act_csi) != SA_AIS_OK) {
@@ -261,8 +261,7 @@
done:
if (rc != 0)
- compcstype_db->erase(Amf::to_string(&compcstype->name));
- delete [] cstype_name;
+ compcstype_db->erase(compcstype->name);
TRACE_LEAVE();
return compcstype;
@@ -277,7 +276,7 @@
*
* @return int
*/
-SaAisErrorT avd_compcstype_config_get(SaNameT *comp_name, AVD_COMP *comp)
+SaAisErrorT avd_compcstype_config_get(const std::string& name, AVD_COMP *comp)
{
SaAisErrorT error;
SaImmSearchHandleT searchHandle;
@@ -288,14 +287,13 @@
AVD_COMPCS_TYPE *compcstype;
SaImmAttrNameT attributeNames[] =
{const_cast<SaImmAttrNameT>("saAmfCompNumMaxActiveCSIs"),
const_cast<SaImmAttrNameT>("saAmfCompNumMaxStandbyCSIs"), nullptr};
-
TRACE_ENTER();
searchParam.searchOneAttr.attrName =
const_cast<SaImmAttrNameT>("SaImmAttrClassName");
searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT;
searchParam.searchOneAttr.attrValue = &className;
- error = immutil_saImmOmSearchInitialize_2(avd_cb->immOmHandle,
comp_name, SA_IMM_SUBTREE,
+ error = immutil_saImmOmSearchInitialize_o2(avd_cb->immOmHandle,
name.c_str(), SA_IMM_SUBTREE,
SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_SOME_ATTR,
&searchParam,
attributeNames, &searchHandle);
@@ -307,12 +305,12 @@
while ((error = immutil_saImmOmSearchNext_2(searchHandle, &dn,
(SaImmAttrValuesT_2 ***)&attributes)) == SA_AIS_OK) {
- if (!is_config_valid(&dn, nullptr)) {
+ if (!is_config_valid(Amf::to_string(&dn), nullptr)) {
error = SA_AIS_ERR_FAILED_OPERATION;
goto done2;
}
- if ((compcstype = compcstype_create(&dn, attributes)) ==
nullptr) {
+ if ((compcstype = compcstype_create(Amf::to_string(&dn),
attributes)) == nullptr) {
error = SA_AIS_ERR_FAILED_OPERATION;
goto done2;
}
@@ -332,12 +330,13 @@
{
SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION;
AVD_COMPCS_TYPE *cst;
+ std::string comp_name;
TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
opdata->objectName.value);
switch (opdata->operationType) {
case CCBUTIL_CREATE: {
- if (is_config_valid(&opdata->objectName, opdata))
+ if (is_config_valid(Amf::to_string(&opdata->objectName),
opdata))
rc = SA_AIS_OK;
break;
}
@@ -346,14 +345,13 @@
break;
case CCBUTIL_DELETE:
AVD_COMP *comp;
- SaNameT comp_name;
AVD_SU_SI_REL *curr_susi;
AVD_COMP_CSI_REL *compcsi;
cst = compcstype_db->find(Amf::to_string(&opdata->objectName));
osafassert(cst);
- avsv_sanamet_init(&opdata->objectName, &comp_name, "safComp=");
- comp = comp_db->find(Amf::to_string(&comp_name));
+ avsv_sanamet_init(Amf::to_string(&opdata->objectName),
comp_name, "safComp=");
+ comp = comp_db->find(comp_name);
for (curr_susi = comp->su->list_of_susi; curr_susi != nullptr;
curr_susi = curr_susi->su_next)
for (compcsi = curr_susi->list_of_csicomp; compcsi;
compcsi = compcsi->susi_csicomp_next) {
if (compcsi->comp == comp) {
@@ -380,14 +378,14 @@
switch (opdata->operationType) {
case CCBUTIL_CREATE:
- cst = compcstype_create(&opdata->objectName,
opdata->param.create.attrValues);
+ cst = compcstype_create(Amf::to_string(&opdata->objectName),
opdata->param.create.attrValues);
osafassert(cst);
compcstype_add_to_model(cst);
break;
case CCBUTIL_DELETE:
cst = compcstype_db->find(Amf::to_string(&opdata->objectName));
if (cst != nullptr) {
- compcstype_db->erase(Amf::to_string(&cst->name));
+ compcstype_db->erase(cst->name);
delete cst;
}
break;
@@ -410,10 +408,10 @@
while ((attributeName = attributeNames[i++]) != nullptr) {
if (!strcmp("saAmfCompNumCurrActiveCSIs", attributeName)) {
- rc = avd_saImmOiRtObjectUpdate_sync(objectName,
attributeName,
+ rc =
avd_saImmOiRtObjectUpdate_sync(Amf::to_string(objectName), attributeName,
SA_IMM_ATTR_SAUINT32T,
&cst->saAmfCompNumCurrActiveCSIs);
} else if (!strcmp("saAmfCompNumCurrStandbyCSIs",
attributeName)) {
- avd_saImmOiRtObjectUpdate(objectName, attributeName,
+ avd_saImmOiRtObjectUpdate(Amf::to_string(objectName),
attributeName,
SA_IMM_ATTR_SAUINT32T,
&cst->saAmfCompNumCurrStandbyCSIs);
} else if (!strcmp("saAmfCompAssignedCsi", attributeName)) {
/* TODO */
diff --git a/osaf/services/saf/amf/amfd/comptype.cc
b/osaf/services/saf/amf/amfd/comptype.cc
--- a/osaf/services/saf/amf/amfd/comptype.cc
+++ b/osaf/services/saf/amf/amfd/comptype.cc
@@ -34,14 +34,14 @@
static void comptype_db_add(AVD_COMP_TYPE *compt)
{
- unsigned int rc =
comptype_db->insert(Amf::to_string(&compt->name),compt);
+ unsigned int rc = comptype_db->insert(compt->name,compt);
osafassert (rc == NCSCC_RC_SUCCESS);
}
static void comptype_delete(AVD_COMP_TYPE *avd_comp_type)
{
osafassert(nullptr == avd_comp_type->list_of_comp);
- comptype_db->erase(Amf::to_string(&avd_comp_type->name));
+ comptype_db->erase(avd_comp_type->name);
delete avd_comp_type;
}
@@ -78,26 +78,27 @@
}
//
-AVD_COMP_TYPE::AVD_COMP_TYPE(const SaNameT *dn) {
- memcpy(&name.value, dn->value, dn->length);
- name.length = dn->length;
+AVD_COMP_TYPE::AVD_COMP_TYPE(const std::string& dn) :
+ name(dn)
+{
}
-static AVD_COMP_TYPE *comptype_create(const SaNameT *dn, const
SaImmAttrValuesT_2 **attributes)
+static AVD_COMP_TYPE *comptype_create(const std::string& dn, const
SaImmAttrValuesT_2 **attributes)
{
AVD_COMP_TYPE *compt;
const char *str;
SaAisErrorT error;
+ SaNameT ct_sw_bundle;
- TRACE_ENTER2("'%s'", dn->value);
+ TRACE_ENTER2("'%s'", dn.c_str());
compt = new AVD_COMP_TYPE(dn);
error =
immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtCompCategory"), attributes,
0, &compt->saAmfCtCompCategory);
osafassert(error == SA_AIS_OK);
- (void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtSwBundle"),
attributes, 0, &compt->saAmfCtSwBundle);
-
+ (void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtSwBundle"),
attributes, 0, &ct_sw_bundle);
+ compt->saAmfCtSwBundle = Amf::to_string(&ct_sw_bundle);
if ((str = immutil_getStringAttr(attributes, "saAmfCtDefCmdEnv", 0)) !=
nullptr)
strcpy(compt->saAmfCtDefCmdEnv, str);
(void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtDefClcCliTimeout"),
attributes, 0, &compt->saAmfCtDefClcCliTimeout);
@@ -139,7 +140,7 @@
if (compt->saAmfCtDefRecoveryOnError == SA_AMF_NO_RECOMMENDATION) {
compt->saAmfCtDefRecoveryOnError = SA_AMF_COMPONENT_FAILOVER;
LOG_NO("COMPONENT_FAILOVER(%u) used instead of
NO_RECOMMENDATION(%u) for '%s'",
- SA_AMF_COMPONENT_FAILOVER, SA_AMF_NO_RECOMMENDATION,
dn->value);
+ SA_AMF_COMPONENT_FAILOVER, SA_AMF_NO_RECOMMENDATION,
dn.c_str());
}
(void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtDefDisableRestart"),
attributes, 0, &compt->saAmfCtDefDisableRestart);
@@ -390,13 +391,13 @@
if (config_is_valid(&dn, attributes, nullptr) == false)
goto done2;
if ((comp_type = comptype_db->find(Amf::to_string(&dn))) ==
nullptr) {
- if ((comp_type = comptype_create(&dn, attributes)) ==
nullptr)
+ if ((comp_type = comptype_create(Amf::to_string(&dn),
attributes)) == nullptr)
goto done2;
comptype_db_add(comp_type);
}
- if (avd_ctcstype_config_get(&dn, comp_type) != SA_AIS_OK)
+ if (avd_ctcstype_config_get(Amf::to_string(&dn), comp_type) !=
SA_AIS_OK)
goto done2;
}
@@ -434,7 +435,7 @@
AVD_COMP *comp = comp_type->list_of_comp;
while (comp != nullptr) {
node_set.insert(comp->su->su_on_node);
- TRACE("comp name %s on node %s", comp->comp_info.name.value,
comp->su->su_on_node->name.value);
+ TRACE("comp name %s on node %s", comp->comp_info.name.value,
comp->su->su_on_node->name.c_str());
comp = comp->comp_type_list_comp_next;
}
@@ -452,7 +453,7 @@
if (!strcmp(attribute->attrName,
"saAmfCtDefCallbackTimeout")) {
SaTimeT *param_val = (SaTimeT
*)attribute->attrValues[0];
TRACE("saAmfCtDefCallbackTimeout to '%llu' for
compType '%s' on node '%s'", *param_val,
- opdata->objectName.value,
(*it)->name.value);
+ opdata->objectName.value,
(*it)->name.c_str());
param.value_len = sizeof(*param_val);
memcpy(param.value, param_val, param.value_len);
param.attr_id = saAmfCtDefCallbackTimeout_ID;
@@ -460,7 +461,7 @@
} else if (!strcmp(attribute->attrName,
"saAmfCtDefClcCliTimeout")) {
SaTimeT *param_val = (SaTimeT
*)attribute->attrValues[0];
TRACE("saAmfCtDefClcCliTimeout to '%llu' for
compType '%s' on node '%s'", *param_val,
- opdata->objectName.value,
(*it)->name.value);
+ opdata->objectName.value,
(*it)->name.c_str());
param.value_len = sizeof(*param_val);
memcpy(param.value, param_val, param.value_len);
param.attr_id = saAmfCtDefClcCliTimeout_ID;
@@ -468,7 +469,7 @@
} else if (!strcmp(attribute->attrName,
"saAmfCtDefQuiescingCompleteTimeout")) {
SaTimeT *param_val = (SaTimeT
*)attribute->attrValues[0];
TRACE("saAmfCtDefQuiescingCompleteTimeout to
'%llu' for compType '%s' on node '%s'", *param_val,
- opdata->objectName.value,
(*it)->name.value);
+ opdata->objectName.value,
(*it)->name.c_str());
param.value_len = sizeof(*param_val);
memcpy(param.value, param_val, param.value_len);
param.attr_id =
saAmfCtDefQuiescingCompleteTimeout_ID;
@@ -483,7 +484,7 @@
param_val = *(SaUint32T
*)attribute->attrValues[0];
}
TRACE("saAmfCtDefInstantiationLevel to '%u' for
compType '%s' on node '%s'", param_val,
- opdata->objectName.value,
(*it)->name.value);
+ opdata->objectName.value,
(*it)->name.c_str());
param.value_len = sizeof(param_val);
memcpy(param.value, ¶m_val,
param.value_len);
param.attr_id = saAmfCtDefInstantiationLevel_ID;
@@ -493,7 +494,7 @@
} else if (!strcmp(attribute->attrName,
"saAmfCtDefRecoveryOnError")) {
SaAmfRecommendedRecoveryT *param_val =
(SaAmfRecommendedRecoveryT *)attribute->attrValues[0];
TRACE("saAmfCtDefRecoveryOnError to '%u' for
compType '%s' on node '%s'", *param_val,
- opdata->objectName.value,
(*it)->name.value);
+ opdata->objectName.value,
(*it)->name.c_str());
param.value_len = sizeof(*param_val);
memcpy(param.value, param_val, param.value_len);
param.attr_id = saAmfCtDefRecoveryOnError_ID;
@@ -508,7 +509,7 @@
param_val = *(SaBoolT
*)attribute->attrValues[0];
}
TRACE("saAmfCtDefDisableRestart to '%u' for
compType '%s' on node '%s'", param_val,
- opdata->objectName.value,
(*it)->name.value);
+ opdata->objectName.value,
(*it)->name.c_str());
param.value_len = sizeof(param_val);
memcpy(param.value, ¶m_val,
param.value_len);
param.attr_id = saAmfCtDefDisableRestart_ID;
@@ -529,7 +530,7 @@
switch (opdata->operationType) {
case CCBUTIL_CREATE:
- comp_type = comptype_create(&opdata->objectName,
+ comp_type = comptype_create(Amf::to_string(&opdata->objectName),
opdata->param.create.attrValues);
osafassert(comp_type);
comptype_db_add(comp_type);
@@ -710,7 +711,7 @@
comp = comp->comp_type_list_comp_next;
}
if (comp_exist == true) {
- report_ccb_validation_error(opdata,
"SaAmfCompType '%s' is in use",comp_type->name.value);
+ report_ccb_validation_error(opdata,
"SaAmfCompType '%s' is in use",comp_type->name.c_str());
goto done;
}
}
diff --git a/osaf/services/saf/amf/amfd/csi.cc
b/osaf/services/saf/amf/amfd/csi.cc
--- a/osaf/services/saf/amf/amfd/csi.cc
+++ b/osaf/services/saf/amf/amfd/csi.cc
@@ -27,7 +27,7 @@
AmfDb<std::string, AVD_CSI> *csi_db = nullptr;
//
-AVD_COMP* AVD_CSI::find_assigned_comp(const SaNameT *cstype,
+AVD_COMP* AVD_CSI::find_assigned_comp(const std::string& cstype,
const AVD_SU_SI_REL *sisu,
const std::vector<AVD_COMP*>
&list_of_comp) {
auto iter = list_of_comp.begin();
@@ -61,7 +61,7 @@
void avd_csi_delete(AVD_CSI *csi)
{
AVD_CSI_ATTR *temp;
- TRACE_ENTER2("%s", csi->name.value);
+ TRACE_ENTER2("%s", csi->name.c_str());
/* Delete CSI attributes */
temp = csi->list_attributes;
@@ -73,8 +73,8 @@
avd_cstype_remove_csi(csi);
csi->si->remove_csi(csi);
- csi_db->erase(Amf::to_string(&csi->name));
-
+ csi_db->erase(csi->name);
+
if (csi->saAmfCSIDependencies != nullptr) {
AVD_CSI_DEPS *csi_dep;
AVD_CSI_DEPS *next_csi_dep;
@@ -94,12 +94,12 @@
void csi_cmplt_delete(AVD_CSI *csi, bool ckpt)
{
AVD_PG_CSI_NODE *curr;
- TRACE_ENTER2("%s", csi->name.value);
+ TRACE_ENTER2("%s", csi->name.c_str());
if (!ckpt) {
/* inform the avnds that track this csi */
for (curr = (AVD_PG_CSI_NODE
*)m_NCS_DBLIST_FIND_FIRST(&csi->pg_node_list);
curr != nullptr; curr = (AVD_PG_CSI_NODE
*)m_NCS_DBLIST_FIND_NEXT(&curr->csi_dll_node)) {
- avd_snd_pg_upd_msg(avd_cb, curr->node, 0,
static_cast<SaAmfProtectionGroupChangesT>(0), &csi->name);
+ avd_snd_pg_upd_msg(avd_cb, curr->node, 0,
static_cast<SaAmfProtectionGroupChangesT>(0), csi->name);
}
}
@@ -117,20 +117,25 @@
*
* @return int
*/
-static int is_config_valid(const SaNameT *dn, const SaImmAttrValuesT_2
**attributes, CcbUtilOperationData_t *opdata)
+static int is_config_valid(const std::string& dn, const SaImmAttrValuesT_2
**attributes, CcbUtilOperationData_t *opdata)
{
SaAisErrorT rc;
SaNameT aname;
- const char *parent;
+ std::string parent;
unsigned int values_number;
- if ((parent = avd_getparent((const char*)dn->value)) == nullptr) {
- report_ccb_validation_error(opdata, "No parent to '%s' ",
dn->value);
+ TRACE_ENTER2("%s", dn.c_str());
+
+ parent = avd_getparent(dn);
+ if (parent.empty() == true ) {
+ report_ccb_validation_error(opdata, "No parent to '%s' ",
dn.c_str());
+ TRACE_LEAVE();
return 0;
}
- if (strncmp(parent, "safSi=", 6) != 0) {
- LOG_ER("Wrong parent '%s' to '%s' ", parent, dn->value);
+ if (parent.compare(0, 6, "safSi=") != 0) {
+ LOG_ER("Wrong parent '%s' to '%s' ", parent.c_str(),
dn.c_str());
+ TRACE_LEAVE();
return 0;
}
@@ -141,11 +146,13 @@
/* CS type does not exist in current model, check CCB if passed
as param */
if (opdata == nullptr) {
report_ccb_validation_error(opdata, "'%s' does not
exist in model", aname.value);
+ TRACE_LEAVE();
return 0;
}
if (ccbutil_getCcbOpDataByDN(opdata->ccbId, &aname) == nullptr)
{
report_ccb_validation_error(opdata, "'%s' does not
exist in existing model or in CCB", aname.value);
+ TRACE_LEAVE();
return 0;
}
}
@@ -155,46 +162,54 @@
(values_number > 0)) {
unsigned int i;
- SaNameT saAmfCSIDependency;
- const char *dep_parent;
+ std::string csi_dependency;
+ std::string dep_parent;
for (i = 0; i < values_number; i++) {
- rc =
immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCSIDependencies"), attributes,
i, &saAmfCSIDependency);
+ SaNameT tmp_dependency;
+ rc =
immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCSIDependencies"), attributes,
i, &tmp_dependency);
osafassert(rc == SA_AIS_OK);
+ csi_dependency = Amf::to_string(&tmp_dependency);
- if (strncmp((char*)dn->value,
(char*)saAmfCSIDependency.value, sizeof(dn->value)) == 0) {
+ if (dn.compare(csi_dependency) == 0) {
report_ccb_validation_error(opdata, "'%s'
validation failed - dependency configured to"
- " itself!", dn->value);
+ " itself!", dn.c_str());
+ TRACE_LEAVE();
return 0;
}
- if (csi_db->find(Amf::to_string(&saAmfCSIDependency))
== nullptr) {
+ if (csi_db->find(csi_dependency) == nullptr) {
/* CSI does not exist in current model, check
CCB if passed as param */
if (opdata == nullptr) {
/* initial loading, check IMM */
- if
(!object_exist_in_imm(&saAmfCSIDependency)) {
+ if (object_exist_in_imm(csi_dependency)
== false) {
report_ccb_validation_error(opdata, "'%s' validation failed - '%s' does not"
" exist",
- dn->value,
saAmfCSIDependency.value);
+ dn.c_str(),
csi_dependency.c_str());
+ TRACE_LEAVE();
return 0;
}
- } else if
(ccbutil_getCcbOpDataByDN(opdata->ccbId, &saAmfCSIDependency) == nullptr) {
+ } else if
(ccbutil_getCcbOpDataByDN(opdata->ccbId, &tmp_dependency) == nullptr) {
report_ccb_validation_error(opdata,
"'%s' validation failed - '%s' does not exist"
" in existing model or
in CCB",
- dn->value,
saAmfCSIDependency.value);
+ dn.c_str(),
csi_dependency.c_str());
+ TRACE_LEAVE();
return 0;
}
}
- if ((dep_parent = avd_getparent((const
char*)saAmfCSIDependency.value)) == nullptr) {
+ dep_parent = avd_getparent(csi_dependency);
+ if (dep_parent.empty() == true) {
report_ccb_validation_error(opdata, "'%s'
validation failed - invalid "
- "saAmfCSIDependency '%s'",
dn->value, saAmfCSIDependency.value);
+ "saAmfCSIDependency '%s'",
dn.c_str(), csi_dependency.c_str());
+ TRACE_LEAVE();
return 0;
}
- if (strncmp(parent, dep_parent, sizeof(dn->value)) !=
0) {
+ if (parent.compare(dep_parent) != 0) {
report_ccb_validation_error(opdata, "'%s'
validation failed - dependency to CSI in other"
- " SI is not allowed",
dn->value);
+ " SI is not allowed",
dn.c_str());
+ TRACE_LEAVE();
return 0;
}
}
@@ -203,27 +218,31 @@
/* Verify that the SI can contain this CSI */
{
AVD_SI *avd_si;
- SaNameT si_name;
+ std::string si_name;
- avsv_sanamet_init(dn, &si_name, "safSi");
+ avsv_sanamet_init(dn, si_name, "safSi");
- if (nullptr != (avd_si = avd_si_get(&si_name))) {
+ if (nullptr != (avd_si = avd_si_get(si_name))) {
/* Check for any admin operations undergoing. This is
valid during dyn add*/
if((opdata != nullptr) && (AVD_SG_FSM_STABLE !=
avd_si->sg_of_si->sg_fsm_state)) {
report_ccb_validation_error(opdata, "SG('%s')
fsm state('%u') is not in "
"AVD_SG_FSM_STABLE(0)",
- avd_si->sg_of_si->name.value,
avd_si->sg_of_si->sg_fsm_state);
+ avd_si->sg_of_si->name.c_str(),
avd_si->sg_of_si->sg_fsm_state);
+ TRACE_LEAVE();
return 0;
}
} else {
if (opdata == nullptr) {
- report_ccb_validation_error(opdata, "'%s' does
not exist in model", si_name.value);
+ report_ccb_validation_error(opdata, "'%s' does
not exist in model", si_name.c_str());
+ TRACE_LEAVE();
return 0;
}
- if (ccbutil_getCcbOpDataByDN(opdata->ccbId, &si_name)
== nullptr) {
+ const SaNameTWrapper si(si_name);
+ if (ccbutil_getCcbOpDataByDN(opdata->ccbId, si) ==
nullptr) {
report_ccb_validation_error(opdata, "'%s' does
not exist in existing model or in CCB",
- si_name.value);
+ si_name.c_str());
+ TRACE_LEAVE();
return 0;
}
}
@@ -241,6 +260,7 @@
}
#endif
}
+ TRACE_LEAVE();
return 1;
}
/**
@@ -262,8 +282,7 @@
*/
for (temp_csi_dep = csi->saAmfCSIDependencies; temp_csi_dep != nullptr;
temp_csi_dep = temp_csi_dep->csi_dep_next) {
- if (0 == memcmp(&new_csi_dep->csi_dep_name_value,
- &temp_csi_dep->csi_dep_name_value,
sizeof(SaNameT))) {
+ if
(new_csi_dep->csi_dep_name_value.compare(temp_csi_dep->csi_dep_name_value) ==
0) {
csi_added = true;
}
}
@@ -279,13 +298,13 @@
/**
* Removes a CSI dep from the saAmfCSIDependencies list and free the memory
*/
-static void csi_remove_csidep(AVD_CSI *csi, const SaNameT *required_dn)
+static void csi_remove_csidep(AVD_CSI *csi, const std::string& required_dn)
{
AVD_CSI_DEPS *prev = nullptr;
AVD_CSI_DEPS *curr;
for (curr = csi->saAmfCSIDependencies; curr != nullptr; curr =
curr->csi_dep_next) {
- if (memcmp(required_dn, &curr->csi_dep_name_value,
sizeof(SaNameT)) == 0) {
+ if (required_dn.compare(curr->csi_dep_name_value) == 0) {
break;
}
prev = curr;
@@ -303,9 +322,8 @@
}
//
-AVD_CSI::AVD_CSI(const SaNameT* csi_name) {
- memcpy(&name.value, csi_name->value, csi_name->length);
- name.length = csi_name->length;
+AVD_CSI::AVD_CSI(const std::string& csi_name) :
+ name(csi_name) {
}
/**
* @brief creates new csi and adds csi node to the csi_db
@@ -314,15 +332,15 @@
*
* @return pointer to AVD_CSI
*/
-AVD_CSI *csi_create(const SaNameT *csi_name)
+AVD_CSI *csi_create(const std::string& csi_name)
{
AVD_CSI *csi;
- TRACE_ENTER2("'%s'", csi_name->value);
+ TRACE_ENTER2("'%s'", csi_name.c_str());
csi = new AVD_CSI(csi_name);
- if (csi_db->insert(Amf::to_string(&csi->name), csi) != NCSCC_RC_SUCCESS)
+ if (csi_db->insert(csi->name, csi) != NCSCC_RC_SUCCESS)
osafassert(0);
TRACE_LEAVE();
@@ -335,21 +353,24 @@
*
* @return pointer to AVD_CSI
*/
-static void csi_get_attr_and_add_to_model(AVD_CSI *csi, const
SaImmAttrValuesT_2 **attributes, const SaNameT *si_name)
+static void csi_get_attr_and_add_to_model(AVD_CSI *csi, const
SaImmAttrValuesT_2 **attributes, const std::string& si_name)
{
int rc = -1;
unsigned int values_number = 0;
SaAisErrorT error;
+ SaNameT cs_type;
- TRACE_ENTER2("'%s'", csi->name.value);
+ TRACE_ENTER2("'%s'", csi->name.c_str());
/* initialize the pg node-list */
csi->pg_node_list.order = NCS_DBLIST_ANY_ORDER;
csi->pg_node_list.cmp_cookie = avsv_dblist_uns32_cmp;
csi->pg_node_list.free_cookie = 0;
- error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCSType"),
attributes, 0, &csi->saAmfCSType);
+ error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCSType"),
attributes, 0, &cs_type);
osafassert(error == SA_AIS_OK);
+ csi->saAmfCSType = Amf::to_string(&cs_type);
+
if
((immutil_getAttrValuesNumber(const_cast<SaImmAttrNameT>("saAmfCSIDependencies"),
attributes, &values_number) == SA_AIS_OK)) {
if (values_number == 0) {
@@ -360,17 +381,22 @@
unsigned int i;
bool found;
AVD_CSI_DEPS *new_csi_dep = nullptr;
+
+ TRACE("checking dependencies");
for (i = 0; i < values_number; i++) {
+ TRACE("i %u", i);
new_csi_dep = new AVD_CSI_DEPS();
+ SaNameT temp_name;
if
(immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCSIDependencies"),
attributes, i,
- &new_csi_dep->csi_dep_name_value) !=
SA_AIS_OK) {
- LOG_ER("Get saAmfCSIDependencies FAILED
for '%s'", csi->name.value);
+ &temp_name) != SA_AIS_OK) {
+ LOG_ER("Get saAmfCSIDependencies FAILED
for '%s'", csi->name.c_str());
// make sure we don't leak any memory if
// saAmfCSIDependencies can't be read
delete new_csi_dep;
goto done;
}
+ new_csi_dep->csi_dep_name_value =
Amf::to_string(&temp_name);
found = csi_add_csidep(csi,new_csi_dep);
if (found == true)
delete new_csi_dep;
@@ -378,10 +404,11 @@
}
} else {
csi->rank = 1;
- TRACE_ENTER2("DEP not configured, marking rank 1. Csi'%s',
Rank'%u'",csi->name.value,csi->rank);
+ TRACE_ENTER2("DEP not configured, marking rank 1. Csi'%s',
Rank'%u'",csi->name.c_str(),csi->rank);
}
- csi->cstype = cstype_db->find(Amf::to_string(&csi->saAmfCSType));
+ TRACE("find %s", csi->saAmfCSType.c_str());
+ csi->cstype = cstype_db->find(csi->saAmfCSType);
csi->si = avd_si_get(si_name);
avd_cstype_add_csi(csi);
@@ -406,12 +433,12 @@
*
* @return int
*/
-SaAisErrorT avd_csi_config_get(const SaNameT *si_name, AVD_SI *si)
+SaAisErrorT avd_csi_config_get(const std::string& si_name, AVD_SI *si)
{
SaAisErrorT error = SA_AIS_ERR_FAILED_OPERATION;
SaImmSearchHandleT searchHandle;
SaImmSearchParametersT_2 searchParam;
- SaNameT csi_name;
+ char* temp_csi_name;
const SaImmAttrValuesT_2 **attributes;
const char *className = "SaAmfCSI";
AVD_CSI *csi;
@@ -420,7 +447,7 @@
searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT;
searchParam.searchOneAttr.attrValue = &className;
- if (immutil_saImmOmSearchInitialize_2(avd_cb->immOmHandle, si_name,
SA_IMM_SUBTREE,
+ if (immutil_saImmOmSearchInitialize_o2(avd_cb->immOmHandle,
si_name.c_str(), SA_IMM_SUBTREE,
SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_ALL_ATTR,
&searchParam,
nullptr, &searchHandle) != SA_AIS_OK) {
@@ -428,18 +455,19 @@
goto done1;
}
- while (immutil_saImmOmSearchNext_2(searchHandle, &csi_name,
(SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) {
- if (!is_config_valid(&csi_name, attributes, nullptr))
+ while (immutil_saImmOmSearchNext_o2(searchHandle, &temp_csi_name,
(SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) {
+ const std::string csi_name(temp_csi_name);
+ if (!is_config_valid(csi_name, attributes, nullptr))
goto done2;
- if ((csi = csi_db->find(Amf::to_string(&csi_name))) == nullptr)
+ if ((csi = csi_db->find(csi_name)) == nullptr)
{
- csi = csi_create(&csi_name);
+ csi = csi_create(csi_name);
csi_get_attr_and_add_to_model(csi, attributes, si_name);
}
- if (avd_csiattr_config_get(&csi_name, csi) != SA_AIS_OK) {
+ if (avd_csiattr_config_get(csi_name, csi) != SA_AIS_OK) {
error = SA_AIS_ERR_FAILED_OPERATION;
goto done2;
}
@@ -471,7 +499,7 @@
static SaAisErrorT csi_ccb_completed_create_hdlr(CcbUtilOperationData_t
*opdata)
{
SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION;
- SaNameT si_name;
+ std::string si_name;
AVD_SI *avd_si;
AVD_COMP *t_comp;
AVD_SU_SI_REL *t_sisu;
@@ -480,14 +508,14 @@
TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
opdata->objectName.value);
- if (!is_config_valid(&opdata->objectName,
opdata->param.create.attrValues, opdata))
+ if (!is_config_valid(Amf::to_string(&opdata->objectName),
opdata->param.create.attrValues, opdata))
goto done;
rc = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCSType"),
opdata->param.create.attrValues, 0, &cstype_name);
osafassert(rc == SA_AIS_OK);
- avsv_sanamet_init(&opdata->objectName, &si_name, "safSi");
- avd_si = avd_si_get(&si_name);
+ avsv_sanamet_init(Amf::to_string(&opdata->objectName), si_name,
"safSi");
+ avd_si = avd_si_get(si_name);
if (nullptr != avd_si) {
/* Check whether si has been assigned to any SU. */
@@ -497,7 +525,7 @@
if (t_sisu->csi_add_rem == true) {
LOG_NO("CSI create of '%s' in queue:
pending assignment"
" for '%s'",
-
opdata->objectName.value, t_sisu->su->name.value);
+
opdata->objectName.value, t_sisu->su->name.c_str());
}
t_sisu = t_sisu->si_next;
}/* while(t_sisu) */
@@ -515,13 +543,13 @@
compcsi = compcsi->susi_csicomp_next;
}
- t_comp =
su->find_unassigned_comp_that_provides_cstype(&cstype_name);
+ t_comp =
su->find_unassigned_comp_that_provides_cstype(Amf::to_string(&cstype_name));
/* Component not found.*/
if (nullptr == t_comp) {
/* This means that all the components
are assigned, let us assigned it to assigned
component.*/
- t_comp =
AVD_CSI::find_assigned_comp(&cstype_name, t_sisu, su->list_of_comp);
+ t_comp =
AVD_CSI::find_assigned_comp(Amf::to_string(&cstype_name), t_sisu,
su->list_of_comp);
}
if (nullptr == t_comp) {
report_ccb_validation_error(opdata,
"Compcsi doesn't exist or "
@@ -587,22 +615,23 @@
goto done;
}
- const SaNameT *required_dn = (SaNameT*)
attr_mod->modAttr.attrValues[0];
- const AVD_CSI *required_csi =
csi_db->find(Amf::to_string(required_dn));
+ const SaNameT *tmp_required_dn = (SaNameT*)
attr_mod->modAttr.attrValues[0];
+ const std::string
required_dn(Amf::to_string(tmp_required_dn));
+ const AVD_CSI *required_csi = csi_db->find(required_dn);
// Required CSI must exist in current model
if (required_csi == nullptr) {
report_ccb_validation_error(opdata,
- "CSI '%s' does not exist",
required_dn->value);
+ "CSI '%s' does not exist",
required_dn.c_str());
goto done;
}
// Required CSI must be contained in the same SI
- const char *si_dn = strchr((char*)required_dn->value,
',') + 1;
+ const char *si_dn = strchr((char*)required_dn.c_str(),
',') + 1;
if (strstr((char*)opdata->objectName.value, si_dn) ==
nullptr) {
report_ccb_validation_error(opdata,
"'%s' is not in the same SI as
'%s'",
- opdata->objectName.value,
required_dn->value);
+ opdata->objectName.value,
required_dn.c_str());
goto done;
}
@@ -616,32 +645,30 @@
// check cyclic dependencies by scanning the
deps of the required CSI
for (csi_dep =
required_csi->saAmfCSIDependencies; csi_dep; csi_dep = csi_dep->csi_dep_next) {
- if
(strcmp((char*)csi_dep->csi_dep_name_value.value,
-
(char*)opdata->objectName.value) == 0) {
+ if
(csi_dep->csi_dep_name_value.compare((char*)opdata->objectName.value) == 0) {
// the required CSI requires
this CSI
report_ccb_validation_error(opdata,
"cyclic
dependency between '%s' and '%s'",
-
opdata->objectName.value, required_dn->value);
+
opdata->objectName.value, required_dn.c_str());
goto done;
}
}
// don't allow adding the same dep again
for (csi_dep = csi->saAmfCSIDependencies;
csi_dep; csi_dep = csi_dep->csi_dep_next) {
- if
(strcmp((char*)csi_dep->csi_dep_name_value.value,
-
(char*)required_dn->value) == 0) {
+ if
(csi_dep->csi_dep_name_value.compare((char*)required_dn.c_str()) == 0) {
// dep already exist, should we
return OK instead?
report_ccb_validation_error(opdata,
"dependency
between '%s' and '%s' already exist",
-
opdata->objectName.value, required_dn->value);
+
opdata->objectName.value, required_dn.c_str());
goto done;
}
}
// disallow dep between same CSIs
- if (strcmp((char*)csi->name.value,
(char*)required_dn->value) == 0) {
+ if
(csi->name.compare((char*)required_dn.c_str()) == 0) {
report_ccb_validation_error(opdata,
- "dependency for '%s' to
itself", csi->name.value);
+ "dependency for '%s' to
itself", csi->name.c_str());
goto done;
}
} else if (attr_mod->modType ==
SA_IMM_ATTR_VALUES_DELETE) {
@@ -700,7 +727,7 @@
if(AVD_SG_FSM_STABLE != csi->si->sg_of_si->sg_fsm_state) {
report_ccb_validation_error(opdata, "SG('%s') fsm state('%u')
is not in AVD_SG_FSM_STABLE(0)",
- csi->si->sg_of_si->name.value,
csi->si->sg_of_si->sg_fsm_state);
+ csi->si->sg_of_si->name.c_str(),
csi->si->sg_of_si->sg_fsm_state);
rc = SA_AIS_ERR_BAD_OPERATION;
goto done;
}
@@ -712,7 +739,7 @@
/* SI is unlocked and this is the last csi to be
deleted, then donot allow it. */
if (csi->si->list_of_csi->si_list_of_csi_next ==
nullptr) {
report_ccb_validation_error(opdata, " csi('%s')
is the last csi in si('%s'). Lock SI and"
- " then delete csi.",
csi->name.value, csi->si->name.value);
+ " then delete csi.",
csi->name.c_str(), csi->si->name.c_str());
rc = SA_AIS_ERR_BAD_OPERATION;
goto done;
}
@@ -721,7 +748,7 @@
if (t_sisu->csi_add_rem == true) {
LOG_NO("CSI remove of '%s' rejected:
pending "
"assignment for '%s'",
- csi->name.value,
t_sisu->su->name.value);
+ csi->name.c_str(),
t_sisu->su->name.c_str());
if (avd_cb->avail_state_avd ==
SA_AMF_HA_ACTIVE) {
rc = SA_AIS_ERR_BAD_OPERATION;
goto done;
@@ -732,7 +759,7 @@
}
} else {
if (csi->list_compcsi != nullptr) {
- report_ccb_validation_error(opdata, "SaAmfCSI '%s' is
in use", csi->name.value);
+ report_ccb_validation_error(opdata, "SaAmfCSI '%s' is
in use", csi->name.c_str());
rc = SA_AIS_ERR_BAD_OPERATION;
goto done;
}
@@ -799,7 +826,7 @@
goto done;
}
- TRACE_ENTER2("'%s'", csi ? csi->name.value : nullptr);
+ TRACE_ENTER2("'%s'", csi ? csi->name.c_str() : nullptr);
/* Check whether si has been assigned to any SU. */
if ((nullptr != csi->si->list_of_sisu) &&
@@ -825,13 +852,13 @@
if ((SA_AMF_HA_ACTIVE == t_sisu->state) && (true ==
first_sisu)) {
first_sisu = false;
if (avd_snd_susi_msg(avd_cb, t_sisu->su,
t_sisu, AVSV_SUSI_ACT_DEL, true, t_csicomp) != NCSCC_RC_SUCCESS) {
- LOG_ER("susi send failure for su'%s'
and si'%s'", t_sisu->su->name.value, t_sisu->si->name.value);
+ LOG_ER("susi send failure for su'%s'
and si'%s'", t_sisu->su->name.c_str(), t_sisu->si->name.c_str());
goto done;
}
}
t_sisu->csi_add_rem = static_cast<SaBoolT>(true);
- t_sisu->comp_name = t_csicomp->comp->comp_info.name;
+ t_sisu->comp_name =
Amf::to_string(&t_csicomp->comp->comp_info.name);
t_sisu->csi_name = t_csicomp->csi->name;
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, t_sisu,
AVSV_CKPT_AVD_SI_ASS);
t_sisu = t_sisu->si_next;
@@ -878,11 +905,11 @@
if (!strcmp(attr_mod->modAttr.attrName, "saAmfCSType")) {
AVD_CS_TYPE *csi_type;
SaNameT cstype_name = *(SaNameT*)
attr_mod->modAttr.attrValues[0];
- TRACE("saAmfCSType modified from '%s' to '%s' for
Csi'%s'", csi->saAmfCSType.value,
- cstype_name.value, csi->name.value);
+ TRACE("saAmfCSType modified from '%s' to '%s' for
Csi'%s'", csi->saAmfCSType.c_str(),
+ cstype_name.value, csi->name.c_str());
csi_type =
cstype_db->find(Amf::to_string(&cstype_name));
avd_cstype_remove_csi(csi);
- csi->saAmfCSType = cstype_name;
+ csi->saAmfCSType = Amf::to_string(&cstype_name);
csi->cstype = csi_type;
avd_cstype_add_csi(csi);
} else if (!strcmp(attr_mod->modAttr.attrName,
"saAmfCSIDependencies")) {
@@ -890,7 +917,7 @@
assert(attr_mod->modAttr.attrValuesNumber == 1);
si->remove_csi(csi);
AVD_CSI_DEPS *new_csi_dep = new AVD_CSI_DEPS();
- new_csi_dep->csi_dep_name_value = *((SaNameT*)
attr_mod->modAttr.attrValues[0]);
+ new_csi_dep->csi_dep_name_value =
Amf::to_string((SaNameT*) attr_mod->modAttr.attrValues[0]);
bool already_exist = csi_add_csidep(csi,
new_csi_dep);
if (already_exist)
delete new_csi_dep;
@@ -899,7 +926,7 @@
} else if (attr_mod->modType ==
SA_IMM_ATTR_VALUES_DELETE) {
assert(attr_mod->modAttr.attrValuesNumber == 1);
const SaNameT *required_dn = (SaNameT*)
attr_mod->modAttr.attrValues[0];
- csi_remove_csidep(csi, required_dn);
+ csi_remove_csidep(csi,
Amf::to_string(required_dn));
//Mark rank of all the CSIs to 0.
for (AVD_CSI *tmp_csi = csi->si->list_of_csi;
tmp_csi;
@@ -942,10 +969,10 @@
possibility that before getting ccb apply callback
we might get compcsi create checkpoint and csi will
be created as part of checkpoint processing */
- csi = csi_create(&opdata->objectName);
+ csi = csi_create(Amf::to_string(&opdata->objectName));
}
csi_get_attr_and_add_to_model(csi, opdata->param.create.attrValues,
- opdata->param.create.parentName);
+ Amf::to_string(opdata->param.create.parentName));
if (avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE)
goto done;
@@ -977,7 +1004,7 @@
for(t_sisu = csi->si->list_of_sisu; t_sisu != nullptr; t_sisu =
t_sisu->si_next) {
if (t_sisu->csi_add_rem == true) {
LOG_NO("CSI create '%s' delayed: pending
assignment for '%s'",
- csi->name.value,
t_sisu->su->name.value);
+ csi->name.c_str(),
t_sisu->su->name.c_str());
goto done;
}
}
@@ -997,17 +1024,17 @@
compcsi = compcsi->susi_csicomp_next;
}
- t_comp =
t_sisu->su->find_unassigned_comp_that_provides_cstype(&csi->saAmfCSType);
+ t_comp =
t_sisu->su->find_unassigned_comp_that_provides_cstype(csi->saAmfCSType);
/* Component not found.*/
if (nullptr == t_comp) {
/* This means that all the components are
assigned, let us assigned it to assigned
component.*/
- t_comp =
AVD_CSI::find_assigned_comp(&csi->saAmfCSType, t_sisu,
t_sisu->su->list_of_comp);
+ t_comp =
AVD_CSI::find_assigned_comp(csi->saAmfCSType, t_sisu, t_sisu->su->list_of_comp);
}
if (nullptr == t_comp) {
LOG_ER("Compcsi doesn't exist or
MaxActiveCSI/MaxStandbyCSI have reached for csi '%s'",
- csi->name.value);
+ csi->name.c_str());
goto done;
}
@@ -1032,7 +1059,7 @@
}
t_sisu->csi_add_rem = static_cast<SaBoolT>(true);
- t_sisu->comp_name = compcsi->comp->comp_info.name;
+ t_sisu->comp_name =
Amf::to_string(&compcsi->comp->comp_info.name);
t_sisu->csi_name = compcsi->csi->name;
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, t_sisu,
AVSV_CKPT_AVD_SI_ASS);
t_sisu = t_sisu->si_next;
@@ -1078,7 +1105,7 @@
* @param comp_dn
*/
static void avd_create_csiassignment_in_imm(SaAmfHAStateT ha_state,
- const SaNameT *csi_dn, const SaNameT *comp_dn)
+ const std::string& csi_dn, const std::string& _comp_dn)
{
SaNameT dn;
SaAmfHAReadinessStateT saAmfCSICompHAReadinessState =
SA_AMF_HARS_READY_FOR_ASSIGNMENT;
@@ -1104,6 +1131,7 @@
nullptr
};
+ const SaNameTWrapper comp_dn(_comp_dn);
avsv_create_association_class_dn(comp_dn, nullptr, "safCSIComp", &dn);
TRACE("Adding %s", dn.value);
@@ -1120,7 +1148,7 @@
return nullptr;
}
- TRACE_ENTER2("Comp'%s' and Csi'%s'", comp->comp_info.name.value,
csi->name.value);
+ TRACE_ENTER2("Comp'%s' and Csi'%s'", comp->comp_info.name.value,
csi->name.c_str());
/* do not add if already in there */
for (compcsi = susi->list_of_csicomp; compcsi; compcsi =
compcsi->susi_csicomp_next) {
@@ -1151,7 +1179,7 @@
susi->list_of_csicomp = compcsi;
}
if (create_in_imm)
- avd_create_csiassignment_in_imm(susi->state, &csi->name,
&comp->comp_info.name);
+ avd_create_csiassignment_in_imm(susi->state, csi->name,
Amf::to_string(&comp->comp_info.name));
done:
TRACE_LEAVE();
return compcsi;
@@ -1162,14 +1190,16 @@
* @param comp_dn
* @param csi_dn
*/
-static void avd_delete_csiassignment_from_imm(const SaNameT *comp_dn, const
SaNameT *csi_dn)
+static void avd_delete_csiassignment_from_imm(const std::string& comp_dn,
const std::string& csi_dn)
{
- SaNameT dn;
+ SaNameT dn;
+ const SaNameTWrapper comp(comp_dn);
+ const SaNameTWrapper csi(csi_dn);
- avsv_create_association_class_dn(comp_dn, csi_dn, "safCSIComp", &dn);
+ avsv_create_association_class_dn(comp, csi, "safCSIComp", &dn);
TRACE("Deleting %s", dn.value);
- avd_saImmOiRtObjectDelete(&dn);
+ avd_saImmOiRtObjectDelete(Amf::to_string(&dn));
}
/*****************************************************************************
@@ -1224,7 +1254,7 @@
susi->list_of_csicomp = lcomp_csi->susi_csicomp_next;
lcomp_csi->susi_csicomp_next = nullptr;
prev_compcsi = nullptr;
-
avd_delete_csiassignment_from_imm(&lcomp_csi->comp->comp_info.name,
&lcomp_csi->csi->name);
+
avd_delete_csiassignment_from_imm(Amf::to_string(&lcomp_csi->comp->comp_info.name),
lcomp_csi->csi->name);
delete lcomp_csi;
}
@@ -1252,7 +1282,7 @@
{
AVD_COMP_CSI_REL *t_compcsi, *t_compcsi_susi, *prev_compcsi = nullptr;
- TRACE_ENTER2("Csi'%s', compcsi_cnt'%u'", comp_csi->csi->name.value,
comp_csi->csi->compcsi_cnt);
+ TRACE_ENTER2("Csi'%s', compcsi_cnt'%u'", comp_csi->csi->name.c_str(),
comp_csi->csi->compcsi_cnt);
/* Find the comp-csi in susi. */
t_compcsi_susi = susi->list_of_csicomp;
@@ -1293,8 +1323,8 @@
comp_csi->csi->compcsi_cnt--;
if (!ckpt)
- avd_snd_pg_upd_msg(avd_cb, comp_csi->comp->su->su_on_node,
comp_csi, SA_AMF_PROTECTION_GROUP_REMOVED, 0);
- avd_delete_csiassignment_from_imm(&comp_csi->comp->comp_info.name,
&comp_csi->csi->name);
+ avd_snd_pg_upd_msg(avd_cb, comp_csi->comp->su->su_on_node,
comp_csi, SA_AMF_PROTECTION_GROUP_REMOVED, std::string(""));
+
avd_delete_csiassignment_from_imm(Amf::to_string(&comp_csi->comp->comp_info.name),
comp_csi->csi->name);
delete comp_csi;
TRACE_LEAVE();
@@ -1394,7 +1424,7 @@
spons_csi = spons_csi->csi_dep_next) {
bool is_sponsor_assigned = false;
- AVD_CSI *tmp_csi =
csi_db->find(Amf::to_string(&spons_csi->csi_dep_name_value));
+ AVD_CSI *tmp_csi =
csi_db->find(spons_csi->csi_dep_name_value);
//Check if this sponsor csi is assigned to any comp in this su.
for (AVD_COMP_CSI_REL *compcsi = tmp_csi->list_compcsi; compcsi;
diff --git a/osaf/services/saf/amf/amfd/csiattr.cc
b/osaf/services/saf/amf/amfd/csiattr.cc
--- a/osaf/services/saf/amf/amfd/csiattr.cc
+++ b/osaf/services/saf/amf/amfd/csiattr.cc
@@ -227,7 +227,7 @@
*
* @return int
*/
-SaAisErrorT avd_csiattr_config_get(const SaNameT *csi_name, AVD_CSI *csi)
+SaAisErrorT avd_csiattr_config_get(const std::string& csi_name, AVD_CSI *csi)
{
SaAisErrorT error;
SaImmSearchHandleT searchHandle;
@@ -242,7 +242,7 @@
searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT;
searchParam.searchOneAttr.attrValue = &className;
- if ((error = immutil_saImmOmSearchInitialize_2(avd_cb->immOmHandle,
csi_name,
+ if ((error = immutil_saImmOmSearchInitialize_o2(avd_cb->immOmHandle,
csi_name.c_str(),
SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR |
SA_IMM_SEARCH_GET_ALL_ATTR,
&searchParam, nullptr, &searchHandle)) != SA_AIS_OK) {
diff --git a/osaf/services/saf/amf/amfd/cstype.cc
b/osaf/services/saf/amf/amfd/cstype.cc
--- a/osaf/services/saf/amf/amfd/cstype.cc
+++ b/osaf/services/saf/amf/amfd/cstype.cc
@@ -24,35 +24,24 @@
AmfDb<std::string, AVD_CS_TYPE> *cstype_db = nullptr;
-//
-// TODO(HANO) Temporary use this function instead of strdup which uses malloc.
-// Later on remove this function and use std::string instead
-#include <cstring>
-static char *StrDup(const char *s)
-{
- char *c = new char[strlen(s) + 1];
- std::strcpy(c,s);
- return c;
-}
-
static void cstype_add_to_model(AVD_CS_TYPE *cst)
{
- uint32_t rc = cstype_db->insert(Amf::to_string(&cst->name),cst);
+ uint32_t rc = cstype_db->insert(cst->name,cst);
osafassert(rc == NCSCC_RC_SUCCESS);
}
//
-AVD_CS_TYPE::AVD_CS_TYPE(const SaNameT *dn) {
- memcpy(&name.value, dn->value, dn->length);
- name.length = dn->length;
+AVD_CS_TYPE::AVD_CS_TYPE(const std::string& dn) :
+ name(dn)
+{
}
-static AVD_CS_TYPE *cstype_create(const SaNameT *dn, const SaImmAttrValuesT_2
**attributes)
+static AVD_CS_TYPE *cstype_create(const std::string& dn, const
SaImmAttrValuesT_2 **attributes)
{
AVD_CS_TYPE *cst;
SaUint32T values_number;
- TRACE_ENTER2("'%s'", dn->value);
+ TRACE_ENTER2("'%s'", dn.c_str());
cst = new AVD_CS_TYPE(dn);
@@ -60,9 +49,9 @@
(values_number > 0)) {
unsigned int i;
- cst->saAmfCSAttrName = new SaStringT[values_number + 1]();
- for (i = 0; i < values_number; i++)
- cst->saAmfCSAttrName[i] =
StrDup(immutil_getStringAttr(attributes, "saAmfCSAttrName", i));
+ for (i = 0; i < values_number; i++) {
+
cst->saAmfCSAttrName.push_back(immutil_getStringAttr(attributes,
"saAmfCSAttrName", i));
+ }
}
TRACE_LEAVE();
@@ -75,24 +64,17 @@
*/
static void cstype_delete(AVD_CS_TYPE *cst)
{
- char *p;
- int i = 0;
-
- cstype_db->erase(Amf::to_string(&cst->name));
-
- if (cst->saAmfCSAttrName != nullptr) {
- while ((p = cst->saAmfCSAttrName[i++]) != nullptr) {
- delete [] p;
- }
- }
- delete [] cst->saAmfCSAttrName;
+ cstype_db->erase(cst->name);
+ cst->saAmfCSAttrName.clear();
delete cst;
}
void avd_cstype_add_csi(AVD_CSI *csi)
{
+ TRACE_ENTER();
csi->csi_list_cs_type_next = csi->cstype->list_of_csi;
csi->cstype->list_of_csi = csi;
+ TRACE_LEAVE();
}
void avd_cstype_remove_csi(AVD_CSI *csi)
@@ -175,7 +157,7 @@
goto done2;
if ((cst = cstype_db->find(Amf::to_string(&dn))) == nullptr){
- if ((cst = cstype_create(&dn, attributes)) == nullptr)
+ if ((cst = cstype_create(Amf::to_string(&dn),
attributes)) == nullptr)
goto done2;
cstype_add_to_model(cst);
@@ -222,8 +204,9 @@
* each of the CSI in the cs_type list in the current
CCB
*/
csi = cst->list_of_csi;
- while (csi != nullptr) {
- t_opData =
ccbutil_getCcbOpDataByDN(opdata->ccbId, &csi->name);
+ while (csi != nullptr) {
+ const SaNameTWrapper csi_name(csi->name);
+ t_opData =
ccbutil_getCcbOpDataByDN(opdata->ccbId, csi_name);
if ((t_opData == nullptr) ||
(t_opData->operationType != CCBUTIL_DELETE)) {
csi_exist = true;
break;
@@ -231,7 +214,7 @@
csi = csi->csi_list_cs_type_next;
}
if (csi_exist == true) {
- report_ccb_validation_error(opdata,
"SaAmfCSType '%s' is in use", cst->name.value);
+ report_ccb_validation_error(opdata,
"SaAmfCSType '%s' is in use", cst->name.c_str());
goto done;
}
}
@@ -255,7 +238,7 @@
switch (opdata->operationType) {
case CCBUTIL_CREATE:
- cst = cstype_create(&opdata->objectName,
opdata->param.create.attrValues);
+ cst = cstype_create(Amf::to_string(&opdata->objectName),
opdata->param.create.attrValues);
osafassert(cst);
cstype_add_to_model(cst);
break;
diff --git a/osaf/services/saf/amf/amfd/ctcstype.cc
b/osaf/services/saf/amf/amfd/ctcstype.cc
--- a/osaf/services/saf/amf/amfd/ctcstype.cc
+++ b/osaf/services/saf/amf/amfd/ctcstype.cc
@@ -29,57 +29,58 @@
static void ctcstype_db_add(AVD_CTCS_TYPE *ctcstype)
{
- unsigned int rc =
ctcstype_db->insert(Amf::to_string(&ctcstype->name),ctcstype);
+ unsigned int rc = ctcstype_db->insert(ctcstype->name,ctcstype);
osafassert(rc == NCSCC_RC_SUCCESS);
}
-static int is_config_valid(const SaNameT *dn, const SaImmAttrValuesT_2
**attributes, CcbUtilOperationData_t *opdata)
+static int is_config_valid(const std::string& dn, const SaImmAttrValuesT_2
**attributes, CcbUtilOperationData_t *opdata)
{
SaUint32T uint32;
- char *parent;
- SaNameT cstype_dn;
+ std::string::size_type parent;
+ std::string cstype_dn;
- if (get_child_dn_from_ass_dn(dn, &cstype_dn) != 0) {
- report_ccb_validation_error(opdata, "malformed DN '%s'",
dn->value);
+ if (get_child_dn_from_ass_dn(dn, cstype_dn) != 0) {
+ report_ccb_validation_error(opdata, "malformed DN '%s'",
dn.c_str());
return 0;
}
- if (cstype_db->find(Amf::to_string(&cstype_dn)) == nullptr) {
+ if (cstype_db->find(cstype_dn) == nullptr) {
if (opdata == nullptr) {
report_ccb_validation_error(opdata,
"SaAmfCSType object '%s' does not exist in
model",
- cstype_dn.value);
+ cstype_dn.c_str());
return 0;
}
- if (ccbutil_getCcbOpDataByDN(opdata->ccbId, &cstype_dn) ==
nullptr) {
+ const SaNameTWrapper cstype(cstype_dn);
+ if (ccbutil_getCcbOpDataByDN(opdata->ccbId, cstype) == nullptr)
{
report_ccb_validation_error(opdata,
"SaAmfCSType object '%s' does not exist in
model or CCB",
- cstype_dn.value);
+ cstype_dn.c_str());
return 0;
}
}
/* Second comma should be parent */
- if ((parent = strchr((char*)dn->value, ',')) == nullptr) {
- report_ccb_validation_error(opdata, "No parent to '%s' ",
dn->value);
+ if ((parent = dn.find(',')) == std::string::npos) {
+ report_ccb_validation_error(opdata, "No parent to '%s' ",
dn.c_str());
return 0;
}
- if ((parent = strchr(++parent, ',')) == nullptr) {
- report_ccb_validation_error(opdata, "No parent to '%s' ",
dn->value);
+ if ((parent = dn.find(',', parent + 1)) == std::string::npos) {
+ report_ccb_validation_error(opdata, "No parent to '%s' ",
dn.c_str());
return 0;
}
/* Should be children to SaAmfCompType */
- if (strncmp(++parent, "safVersion=", 11) != 0) {
- report_ccb_validation_error(opdata, "Wrong parent '%s'",
parent);
+ if (dn.compare(parent + 1, 11, "safVersion=") != 0) {
+ report_ccb_validation_error(opdata, "Wrong parent '%s'",
dn.c_str());
return 0;
}
if
((immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtCompCapability"),
attributes, 0, &uint32) == SA_AIS_OK) &&
(uint32 > SA_AMF_COMP_NON_PRE_INSTANTIABLE)) {
- report_ccb_validation_error(opdata, "Invalid
saAmfCtCompCapability %u for '%s'", uint32, dn->value);
+ report_ccb_validation_error(opdata, "Invalid
saAmfCtCompCapability %u for '%s'", uint32, dn.c_str());
return 0;
}
@@ -87,24 +88,22 @@
}
//
-AVD_CTCS_TYPE::AVD_CTCS_TYPE(const SaNameT *dn) {
- memcpy(&name.value, dn->value, dn->length);
- name.length = dn->length;
+AVD_CTCS_TYPE::AVD_CTCS_TYPE(const std::string& dn) :
+ name(dn)
+{
}
//
-static AVD_CTCS_TYPE *ctcstype_create(const SaNameT *dn, const
SaImmAttrValuesT_2 **attributes)
+static AVD_CTCS_TYPE *ctcstype_create(const std::string& dn, const
SaImmAttrValuesT_2 **attributes)
{
AVD_CTCS_TYPE *ctcstype;
int rc = -1;
SaAisErrorT error;
- TRACE_ENTER2("'%s'", dn->value);
+ TRACE_ENTER2("'%s'", dn.c_str());
ctcstype = new AVD_CTCS_TYPE(dn);
-
-
error =
immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtCompCapability"),
attributes, 0, &ctcstype->saAmfCtCompCapability);
osafassert(error == SA_AIS_OK);
@@ -126,7 +125,7 @@
return ctcstype;
}
-SaAisErrorT avd_ctcstype_config_get(const SaNameT *comp_type_dn, AVD_COMP_TYPE
*comp_type)
+SaAisErrorT avd_ctcstype_config_get(const std::string& comp_type_dn,
AVD_COMP_TYPE *comp_type)
{
SaAisErrorT error = SA_AIS_ERR_FAILED_OPERATION;
SaImmSearchHandleT searchHandle;
@@ -142,7 +141,7 @@
searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT;
searchParam.searchOneAttr.attrValue = &className;
- if (immutil_saImmOmSearchInitialize_2(avd_cb->immOmHandle, comp_type_dn,
+ if (immutil_saImmOmSearchInitialize_o2(avd_cb->immOmHandle,
comp_type_dn.c_str(),
SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR |
SA_IMM_SEARCH_GET_ALL_ATTR,
&searchParam, nullptr, &searchHandle) != SA_AIS_OK) {
@@ -151,11 +150,11 @@
}
while (immutil_saImmOmSearchNext_2(searchHandle, &dn,
(SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) {
- if (!is_config_valid(&dn, attributes, nullptr))
+ if (!is_config_valid(Amf::to_string(&dn), attributes, nullptr))
goto done2;
if ((ctcstype = ctcstype_db->find(Amf::to_string(&dn))) ==
nullptr ) {
- if ((ctcstype = ctcstype_create(&dn, attributes)) ==
nullptr)
+ if ((ctcstype = ctcstype_create(Amf::to_string(&dn),
attributes)) == nullptr)
goto done2;
ctcstype_db_add(ctcstype);
@@ -179,7 +178,7 @@
switch (opdata->operationType) {
case CCBUTIL_CREATE:
- if (is_config_valid(&opdata->objectName,
opdata->param.create.attrValues, opdata))
+ if (is_config_valid(Amf::to_string(&opdata->objectName),
opdata->param.create.attrValues, opdata))
rc = SA_AIS_OK;
break;
case CCBUTIL_MODIFY:
@@ -205,14 +204,14 @@
switch (opdata->operationType) {
case CCBUTIL_CREATE:
- ctcstype = ctcstype_create(&opdata->objectName,
opdata->param.create.attrValues);
+ ctcstype = ctcstype_create(Amf::to_string(&opdata->objectName),
opdata->param.create.attrValues);
osafassert(ctcstype);
ctcstype_db_add(ctcstype);
break;
case CCBUTIL_DELETE:
ctcstype =
ctcstype_db->find(Amf::to_string(&opdata->objectName));
if (ctcstype != nullptr) {
- ctcstype_db->erase(Amf::to_string(&ctcstype->name));
+ ctcstype_db->erase(ctcstype->name);
delete ctcstype;
}
break;
@@ -224,11 +223,13 @@
TRACE_LEAVE();
}
-AVD_CTCS_TYPE *get_ctcstype(const SaNameT *comptype_name, const SaNameT
*cstype_name)
+AVD_CTCS_TYPE *get_ctcstype(const std::string& comptype_name, const
std::string& cstype_name)
{
SaNameT dn;
+ const SaNameTWrapper comptype(comptype_name);
+ const SaNameTWrapper cstype(cstype_name);
AVD_CTCS_TYPE *ctcs_type = nullptr;
- avsv_create_association_class_dn(cstype_name, comptype_name,
+ avsv_create_association_class_dn(cstype, comptype,
"safSupportedCsType", &dn);
ctcs_type = ctcstype_db->find(Amf::to_string(&dn));
return ctcs_type;
------------------------------------------------------------------------------
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