osaf/services/saf/amf/amfd/si.cc | 233 ++++++++++++++-------------
osaf/services/saf/amf/amfd/si_dep.cc | 297 +++++++++++++++-------------------
osaf/services/saf/amf/amfd/siass.cc | 107 ++++++------
3 files changed, 303 insertions(+), 334 deletions(-)
diff --git a/osaf/services/saf/amf/amfd/si.cc b/osaf/services/saf/amf/amfd/si.cc
--- a/osaf/services/saf/amf/amfd/si.cc
+++ b/osaf/services/saf/amf/amfd/si.cc
@@ -35,20 +35,20 @@
* @param name
* @param csi
*/
-static void osafassert_if_loops_in_csideps(SaNameT *csi_name, AVD_CSI* csi)
+static void osafassert_if_loops_in_csideps(const std::string& csi_name,
AVD_CSI* csi)
{
AVD_CSI *temp_csi = nullptr;
AVD_CSI_DEPS *csi_dep_ptr;
- TRACE_ENTER2("%s", csi->name.value);
+ TRACE_ENTER2("%s", csi->name.c_str());
/* Check if the CSI has any dependency on the csi_name
* if yes then loop is there and osafassert
*/
for(csi_dep_ptr = csi->saAmfCSIDependencies; csi_dep_ptr; csi_dep_ptr =
csi_dep_ptr->csi_dep_next) {
- if (0 == memcmp(csi_name, &csi_dep_ptr->csi_dep_name_value,
sizeof(SaNameT))) {
+ if (csi_name.compare(csi_dep_ptr->csi_dep_name_value) == 0) {
LOG_ER("%s: %u: Looping detected in the CSI
dependencies configured for csi:%s, osafasserting",
- __FILE__, __LINE__, csi->name.value);
+ __FILE__, __LINE__, csi->name.c_str());
osafassert(0);
}
}
@@ -56,7 +56,7 @@
/* Check if any of the dependents of CSI has dependency on csi_name */
for (csi_dep_ptr = csi->saAmfCSIDependencies; csi_dep_ptr; csi_dep_ptr
= csi_dep_ptr->csi_dep_next) {
for (temp_csi = csi->si->list_of_csi; temp_csi; temp_csi =
temp_csi->si_list_of_csi_next) {
- if(0 == memcmp(&temp_csi->name,
&csi_dep_ptr->csi_dep_name_value, sizeof(SaNameT))) {
+ if
(temp_csi->name.compare(csi_dep_ptr->csi_dep_name_value) == 0) {
/* Again call the loop detection function to
check whether this temp_csi
* has the dependency on the given csi_name
*/
@@ -71,7 +71,7 @@
{
AVD_CSI *temp_csi = nullptr;
- TRACE_ENTER2("%s", csi->name.value);
+ TRACE_ENTER2("%s", csi->name.c_str());
osafassert(csi->si == this);
@@ -81,11 +81,11 @@
/* Go through the all the dependencies of exising CSI */
for (csi_dep_ptr=temp_csi->saAmfCSIDependencies; csi_dep_ptr;
csi_dep_ptr = csi_dep_ptr->csi_dep_next) {
- if ((0 == memcmp(&csi_dep_ptr->csi_dep_name_value,
&csi->name, sizeof(SaNameT)))) {
+ if (csi_dep_ptr->csi_dep_name_value.compare(csi->name)
== 0) {
/* Try finding out any loops in the dependency
configuration with this temp_csi
* and osafassert if any loop found
*/
- osafassert_if_loops_in_csideps(&temp_csi->name,
csi);
+ osafassert_if_loops_in_csideps(temp_csi->name,
csi);
/* Existing CSI is dependant on the new CSI, so
its rank should be more
* than one of the new CSI. But increment the
rank only if its rank is
@@ -114,7 +114,7 @@
AVD_CSI *temp_csi = nullptr;
bool found = false;
- TRACE_ENTER2("%s", avd_csi->name.value);
+ TRACE_ENTER2("%s", avd_csi->name.c_str());
osafassert(avd_csi->si == this);
@@ -126,7 +126,7 @@
/* Go through all the dependencies of new CSI */
for (csi_dep_ptr = avd_csi->saAmfCSIDependencies;
csi_dep_ptr; csi_dep_ptr = csi_dep_ptr->csi_dep_next) {
- if (0 == memcmp(&temp_csi->name,
&csi_dep_ptr->csi_dep_name_value, sizeof(SaNameT))) {
+ if
(temp_csi->name.compare(csi_dep_ptr->csi_dep_name_value) == 0) {
/* The new CSI is dependent on existing
CSI, so its rank will be one more than
* the existing CSI. But increment the
rank only if the new CSI rank is
* less than or equal to the existing
CSIs, since it can depend on multiple CSIs
@@ -159,7 +159,7 @@
void AVD_SI::add_csi_db(AVD_CSI* csi)
{
- TRACE_ENTER2("%s", csi->name.value);
+ TRACE_ENTER2("%s", csi->name.c_str());
AVD_CSI *i_csi = nullptr;
AVD_CSI *prev_csi = nullptr;
@@ -171,8 +171,7 @@
i_csi = list_of_csi;
while ((i_csi != nullptr) && (csi->rank <= i_csi->rank)) {
while ((i_csi != nullptr) && (csi->rank == i_csi->rank)) {
-
- if (m_CMP_HORDER_SANAMET(csi->name, i_csi->name) < 0){
+ if (csi->name.compare(i_csi->name) < 0) {
found_pos = true;
break;
}
@@ -209,11 +208,11 @@
* @param suname
* @param saAmfRank
*/
-void AVD_SI::add_rankedsu(const SaNameT *suname, uint32_t saAmfRank) {
+void AVD_SI::add_rankedsu(const std::string& suname, uint32_t saAmfRank) {
AVD_SIRANKEDSU *ranked_su;
TRACE_ENTER();
- ranked_su = new AVD_SIRANKEDSU(Amf::to_string(suname), saAmfRank);
+ ranked_su = new AVD_SIRANKEDSU(suname, saAmfRank);
rankedsu_list.push_back(ranked_su);
@@ -230,7 +229,7 @@
* @param si
* @param suname
*/
-void AVD_SI::remove_rankedsu(const std::string &suname) {
+void AVD_SI::remove_rankedsu(const std::string& suname) {
TRACE_ENTER();
auto pos = std::find_if(rankedsu_list.begin(), rankedsu_list.end(),
[&suname] (AVD_SIRANKEDSU *sirankedsu) -> bool {
@@ -277,6 +276,9 @@
AVD_SI::AVD_SI() :
+ name{},
+ saAmfSvcType{},
+ saAmfSIProtectedbySG{},
saAmfSIRank(0),
saAmfSIPrefActiveAssignments(0),
saAmfSIPrefStandbyAssignments(0),
@@ -300,19 +302,14 @@
invocation(0),
alarm_sent(false)
{
- memset(&name, 0, sizeof(SaNameT));
- memset(&saAmfSvcType, 0, sizeof(SaNameT));
- memset(&saAmfSIProtectedbySG, 0, sizeof(SaNameT));
}
-AVD_SI *avd_si_new(const SaNameT *dn)
+AVD_SI *avd_si_new(const std::string& dn)
{
AVD_SI *si;
si = new AVD_SI();
-
- memcpy(si->name.value, dn->value, dn->length);
- si->name.length = dn->length;
+ si->name = dn;
return si;
}
@@ -338,7 +335,7 @@
void avd_si_delete(AVD_SI *si)
{
- TRACE_ENTER2("%s", si->name.value);
+ TRACE_ENTER2("%s", si->name.c_str());
/* All CSI under this should have been deleted by now on the active
director and on standby all the csi should be deleted because
@@ -352,11 +349,11 @@
// clear any pending alarms for this SI
if ((si->alarm_sent == true) &&
(avd_cb->avail_state_avd == SA_AMF_HA_ACTIVE)) {
- avd_alarm_clear(&si->name, SA_AMF_NTFID_SI_UNASSIGNED,
+ avd_alarm_clear(si->name, SA_AMF_NTFID_SI_UNASSIGNED,
SA_NTF_SOFTWARE_ERROR);
}
- si_db->erase(Amf::to_string(&si->name));
+ si_db->erase(si->name);
delete si;
}
@@ -371,7 +368,7 @@
void AVD_SI::delete_assignments(AVD_CL_CB *cb)
{
AVD_SU_SI_REL *sisu = list_of_sisu;
- TRACE_ENTER2(" '%s'", name.value);
+ TRACE_ENTER2(" '%s'", name.c_str());
for (; sisu != nullptr; sisu = sisu->si_next) {
if(sisu->fsm != AVD_SU_SI_STATE_UNASGN)
@@ -383,34 +380,30 @@
void avd_si_db_add(AVD_SI *si)
{
+ TRACE_ENTER2("%s", si->name.c_str());
unsigned int rc;
- if (si_db->find(Amf::to_string(&si->name)) == nullptr) {
- rc = si_db->insert(Amf::to_string(&si->name), si);
+ if (si_db->find(si->name) == nullptr) {
+ rc = si_db->insert(si->name, si);
osafassert(rc == NCSCC_RC_SUCCESS);
}
+ TRACE_LEAVE();
}
-AVD_SI *avd_si_get(const SaNameT *dn)
+AVD_SI *avd_si_get(const std::string& dn)
{
- SaNameT tmp = {0};
-
- if (dn->length > SA_MAX_NAME_LENGTH)
- return nullptr;
-
- tmp.length = dn->length;
- memcpy(tmp.value, dn->value, tmp.length);
-
- return si_db->find(Amf::to_string(dn));
+ TRACE_ENTER2("%s", dn.c_str());
+ return si_db->find(dn);
+ TRACE_LEAVE();
}
void AVD_SI::si_add_to_model()
{
- SaNameT dn;
+ std::string dn;
- TRACE_ENTER2("%s", name.value);
+ TRACE_ENTER2("%s", name.c_str());
/* Check parent link to see if it has been added already */
if (svc_type != nullptr) {
@@ -418,21 +411,21 @@
goto done;
}
- avsv_sanamet_init(&name, &dn, "safApp");
- app = app_db->find(Amf::to_string(&dn));
+ avsv_sanamet_init(name, dn, "safApp");
+ app = app_db->find(dn);
avd_si_db_add(this);
- svc_type = svctype_db->find(Amf::to_string(&saAmfSvcType));
+ svc_type = svctype_db->find(saAmfSvcType);
- if (saAmfSIProtectedbySG.length > 0)
- sg_of_si = sg_db->find(Amf::to_string(&saAmfSIProtectedbySG));
+ if (saAmfSIProtectedbySG.length() > 0)
+ sg_of_si = sg_db->find(saAmfSIProtectedbySG);
avd_svctype_add_si(this);
app->add_si(this);
sg_of_si->add_si(this);
m_AVSV_SEND_CKPT_UPDT_ASYNC_ADD(avd_cb, this, AVSV_CKPT_AVD_SI_CONFIG);
- avd_saImmOiRtObjectUpdate(&name, "saAmfSIAssignmentState",
+ avd_saImmOiRtObjectUpdate(name, "saAmfSIAssignmentState",
SA_IMM_ATTR_SAUINT32T, &saAmfSIAssignmentState);
done:
@@ -445,22 +438,26 @@
*
* @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;
SaAmfAdminStateT admstate;
- char *parent, *app;
+ std::string::size_type parent;
+ std::string::size_type app;
- 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 (strncmp(++parent, "safApp=", 7) != 0) {
- report_ccb_validation_error(opdata, "Wrong parent '%s' to '%s'
", parent, dn->value);
+ if (dn.compare(parent + 1, 7, "safApp=")) {
+ report_ccb_validation_error(opdata, "Wrong parent '%s' to '%s'
",
+ dn.substr(parent + 1).c_str(), dn.c_str());
return 0;
}
+
+ const std::string si_app(dn.substr(parent + 1));
rc = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSvcType"),
attributes, 0, &aname);
osafassert(rc == SA_AIS_OK);
@@ -479,7 +476,7 @@
}
if (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSIProtectedbySG"),
attributes, 0, &aname) != SA_AIS_OK) {
- report_ccb_validation_error(opdata, "saAmfSIProtectedbySG not
specified for '%s'", dn->value);
+ report_ccb_validation_error(opdata, "saAmfSIProtectedbySG not
specified for '%s'", dn.c_str());
return 0;
}
@@ -497,26 +494,29 @@
}
/* saAmfSIProtectedbySG and SI should belong to the same applicaion. */
- if ((app = strchr((char*)aname.value, ',')) == nullptr) {
+ const std::string protected_by_sg(Amf::to_string(&aname));
+ if ((app = protected_by_sg.find(',')) == std::string::npos) {
report_ccb_validation_error(opdata, "No parent to '%s' ",
aname.value);
return 0;
}
- if (strcmp(parent, ++app)) {
+
+ const std::string sg_app(protected_by_sg.substr(app + 1));
+ if (si_app.compare(sg_app) != 0) {
report_ccb_validation_error(opdata, "SI '%s' and SG '%s' belong
to different application",
- dn->value, aname.value);
+ dn.c_str(), aname.value);
return 0;
}
if ((immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSIAdminState"),
attributes, 0, &admstate) == SA_AIS_OK) &&
!avd_admin_state_is_valid(admstate, opdata)) {
- report_ccb_validation_error(opdata, "Invalid saAmfSIAdminState
%u for '%s'", admstate, dn->value);
+ report_ccb_validation_error(opdata, "Invalid saAmfSIAdminState
%u for '%s'", admstate, dn.c_str());
return 0;
}
return 1;
}
-static AVD_SI *si_create(SaNameT *si_name, const SaImmAttrValuesT_2
**attributes)
+static AVD_SI *si_create(const std::string& si_name, const SaImmAttrValuesT_2
**attributes)
{
unsigned int i;
int rc = -1;
@@ -525,14 +525,15 @@
AVD_COMP_CSI_REL *compcsi, *temp;
SaUint32T attrValuesNumber;
SaAisErrorT error;
+ SaNameT temp_name;
- TRACE_ENTER2("'%s'", si_name->value);
+ TRACE_ENTER2("'%s'", si_name.c_str());
/*
** If called at new active at failover, the object is found in the DB
** but needs to get configuration attributes initialized.
*/
- if ((si = si_db->find(Amf::to_string(si_name))) == nullptr) {
+ if ((si = si_db->find(si_name)) == nullptr) {
if ((si = avd_si_new(si_name)) == nullptr)
goto done;
} else {
@@ -556,11 +557,13 @@
}
}
- error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSvcType"),
attributes, 0, &si->saAmfSvcType);
+ error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSvcType"),
attributes, 0, &temp_name);
osafassert(error == SA_AIS_OK);
+ si->saAmfSvcType = Amf::to_string(&temp_name);
/* Optional, strange... */
-
(void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSIProtectedbySG"),
attributes, 0, &si->saAmfSIProtectedbySG);
+
(void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSIProtectedbySG"),
attributes, 0, &temp_name);
+ si->saAmfSIProtectedbySG = Amf::to_string(&temp_name);
if (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSIRank"),
attributes, 0, &si->saAmfSIRank) != SA_AIS_OK) {
/* Empty, assign default value (highest number => lowest rank)
*/
@@ -570,7 +573,7 @@
/* If 0 (zero), treat as lowest possible rank. Should be a positive
integer */
if (si->saAmfSIRank == 0) {
si->saAmfSIRank = ~0U;
- TRACE("'%s' saAmfSIRank auto-changed to lowest",
si->name.value);
+ TRACE("'%s' saAmfSIRank auto-changed to lowest",
si->name.c_str());
}
/* Optional, [0..*] */
@@ -640,7 +643,7 @@
SaAisErrorT error = SA_AIS_ERR_FAILED_OPERATION, rc;
SaImmSearchHandleT searchHandle;
SaImmSearchParametersT_2 searchParam;
- SaNameT si_name;
+ char* si_name;
const SaImmAttrValuesT_2 **attributes;
const char *className = "SaAmfSI";
AVD_SI *si;
@@ -662,7 +665,7 @@
searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT;
searchParam.searchOneAttr.attrValue = &className;
- if ((rc = immutil_saImmOmSearchInitialize_2(avd_cb->immOmHandle,
&app->name, SA_IMM_SUBTREE,
+ if ((rc = immutil_saImmOmSearchInitialize_o2(avd_cb->immOmHandle,
app->name.c_str(), SA_IMM_SUBTREE,
SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_SOME_ATTR,
&searchParam,
configAttributes, &searchHandle)) != SA_AIS_OK) {
@@ -670,20 +673,21 @@
goto done1;
}
- while ((rc = immutil_saImmOmSearchNext_2(searchHandle, &si_name,
+ while ((rc = immutil_saImmOmSearchNext_o2(searchHandle, &si_name,
(SaImmAttrValuesT_2 ***)&attributes))
== SA_AIS_OK) {
- if (!is_config_valid(&si_name, attributes, nullptr))
+ const std::string si_str(si_name);
+ if (!is_config_valid(si_str, attributes, nullptr))
goto done2;
- if ((si = si_create(&si_name, attributes)) == nullptr)
+ if ((si = si_create(si_str, attributes)) == nullptr)
goto done2;
si->si_add_to_model();
- if (avd_sirankedsu_config_get(&si_name, si) != SA_AIS_OK)
+ if (avd_sirankedsu_config_get(si_str, si) != SA_AIS_OK)
goto done2;
- if (avd_csi_config_get(&si_name, si) != SA_AIS_OK)
+ if (avd_csi_config_get(si_str, si) != SA_AIS_OK)
goto done2;
}
@@ -707,7 +711,7 @@
TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
opdata->objectName.value);
- si = avd_si_get(&opdata->objectName);
+ si = avd_si_get(Amf::to_string(&opdata->objectName));
osafassert(si != nullptr);
/* Modifications can only be done for these attributes. */
@@ -726,7 +730,7 @@
if (!strcmp(attribute->attrName,
"saAmfSIPrefActiveAssignments")) {
if (si->sg_of_si->sg_fsm_state != AVD_SG_FSM_STABLE) {
- report_ccb_validation_error(opdata, "SG'%s' is
not stable (%u)", si->sg_of_si->name.value,
+ report_ccb_validation_error(opdata, "SG'%s' is
not stable (%u)", si->sg_of_si->name.c_str(),
si->sg_of_si->sg_fsm_state);
rc = SA_AIS_ERR_BAD_OPERATION;
break;
@@ -740,7 +744,7 @@
} else if (!strcmp(attribute->attrName,
"saAmfSIPrefStandbyAssignments")) {
if (si->sg_of_si->sg_fsm_state != AVD_SG_FSM_STABLE) {
- report_ccb_validation_error(opdata, "SG'%s' is
not stable (%u)", si->sg_of_si->name.value,
+ report_ccb_validation_error(opdata, "SG'%s' is
not stable (%u)", si->sg_of_si->name.c_str(),
si->sg_of_si->sg_fsm_state);
rc = SA_AIS_ERR_BAD_OPERATION;
break;
@@ -764,7 +768,7 @@
}
if (si->sg_of_si->sg_fsm_state != AVD_SG_FSM_STABLE) {
- report_ccb_validation_error(opdata, "SG'%s' is
not stable (%u)", si->sg_of_si->name.value,
+ report_ccb_validation_error(opdata, "SG'%s' is
not stable (%u)", si->sg_of_si->name.c_str(),
si->sg_of_si->sg_fsm_state);
rc = SA_AIS_ERR_BAD_OPERATION;
break;
@@ -793,7 +797,7 @@
TRACE_ENTER2("%s op=%llu", objectName->value, operationId);
- si = avd_si_get(objectName);
+ si = avd_si_get(Amf::to_string(objectName));
if ((operationId != SA_AMF_ADMIN_SI_SWAP) && (si->sg_of_si->sg_ncs_spec
== true)) {
report_admin_op_error(immOiHandle, invocation,
SA_AIS_ERR_NOT_SUPPORTED, nullptr,
@@ -804,14 +808,14 @@
if (sg_is_tolerance_timer_running_for_any_si(si->sg_of_si)) {
report_admin_op_error(immOiHandle, invocation,
SA_AIS_ERR_TRY_AGAIN, nullptr,
"Tolerance timer is running for some of the
SI's in the SG '%s', "
- "so differing admin
opr",si->sg_of_si->name.value);
+ "so differing admin
opr",si->sg_of_si->name.c_str());
goto done;
}
/* Avoid if any single Csi assignment is undergoing on SG. */
if (csi_assignment_validate(si->sg_of_si) == true) {
report_admin_op_error(immOiHandle, invocation,
SA_AIS_ERR_TRY_AGAIN, nullptr,
- "Single Csi assignment undergoing on (sg'%s')",
si->sg_of_si->name.value);
+ "Single Csi assignment undergoing on (sg'%s')",
si->sg_of_si->name.c_str());
goto done;
}
@@ -840,7 +844,7 @@
err = si->sg_of_si->si_assign(avd_cb, si);
if (si->list_of_sisu == nullptr) {
- LOG_NO("'%s' could not be assigned to any SU",
si->name.value);
+ LOG_NO("'%s' could not be assigned to any SU",
si->name.c_str());
rc = SA_AIS_OK;
avd_saImmOiAdminOperationResult(immOiHandle,
invocation, rc);
goto done;
@@ -949,7 +953,8 @@
static SaAisErrorT si_rt_attr_cb(SaImmOiHandleT immOiHandle,
const SaNameT *objectName, const SaImmAttrNameT *attributeNames)
{
- AVD_SI *si = avd_si_get(objectName);
+ const std::string obj_name(Amf::to_string(objectName));
+ AVD_SI *si = avd_si_get(obj_name);
SaImmAttrNameT attributeName;
int i = 0;
@@ -958,10 +963,10 @@
while ((attributeName = attributeNames[i++]) != nullptr) {
if (!strcmp("saAmfSINumCurrActiveAssignments", attributeName)) {
- avd_saImmOiRtObjectUpdate_sync(objectName,
attributeName,
+ avd_saImmOiRtObjectUpdate_sync(obj_name, attributeName,
SA_IMM_ATTR_SAUINT32T,
&si->saAmfSINumCurrActiveAssignments);
} else if (!strcmp("saAmfSINumCurrStandbyAssignments",
attributeName)) {
- avd_saImmOiRtObjectUpdate_sync(objectName,
attributeName,
+ avd_saImmOiRtObjectUpdate_sync(obj_name, attributeName,
SA_IMM_ATTR_SAUINT32T,
&si->saAmfSINumCurrStandbyAssignments);
} else {
LOG_ER("Ignoring unknown attribute '%s'",
attributeName);
@@ -980,22 +985,22 @@
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:
rc = si_ccb_completed_modify_hdlr(opdata);
break;
case CCBUTIL_DELETE:
- si = avd_si_get(&opdata->objectName);
+ si = avd_si_get(Amf::to_string(&opdata->objectName));
if (nullptr != si->list_of_sisu) {
- report_ccb_validation_error(opdata, "SaAmfSI is in use
'%s'", si->name.value);
+ report_ccb_validation_error(opdata, "SaAmfSI is in use
'%s'", si->name.c_str());
goto done;
}
/* check for any SI-SI dependency configurations */
if (0 != si->num_dependents || si->spons_si_list != nullptr) {
report_ccb_validation_error(opdata, "Sponsors or
Dependents Exist; Cannot delete '%s'",
- si->name.value);
+ si->name.c_str());
goto done;
}
rc = SA_AIS_OK;
@@ -1021,7 +1026,7 @@
uint32_t no_of_sisus_to_delete;
uint32_t i = 0;
- TRACE_ENTER2("for SI:%s ", name.value);
+ TRACE_ENTER2("for SI:%s ", name.c_str());
if( sg_of_si->sg_redundancy_model ==
SA_AMF_N_WAY_ACTIVE_REDUNDANCY_MODEL ) {
if( mod_pref_assignments > saAmfSINumCurrActiveAssignments ) {
@@ -1035,7 +1040,7 @@
reason might be no more inservice SUs to
take new assignments or
SUs are already assigned to
saAmfSGMaxActiveSIsperSU capacity */
update_ass_state();
- TRACE("No New assignments are been done SI:%s",
name.value);
+ TRACE("No New assignments are been done SI:%s",
name.c_str());
}
} else {
no_of_sisus_to_delete = saAmfSINumCurrActiveAssignments
-
@@ -1068,7 +1073,7 @@
if( mod_pref_assignments > saAmfSINumCurrStandbyAssignments ) {
/* SI assignment is not yet complete, choose and assign
to appropriate SUs */
if( avd_sg_nway_si_assign(avd_cb, sg_of_si ) ==
NCSCC_RC_FAILURE ) {
- LOG_ER("SI new assignmemts failed SI:%s",
name.value);
+ LOG_ER("SI new assignmemts failed SI:%s",
name.c_str());
}
} else {
no_of_sisus_to_delete = 0;
@@ -1111,7 +1116,7 @@
TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
opdata->objectName.value);
- si = avd_si_get(&opdata->objectName);
+ si = avd_si_get(Amf::to_string(&opdata->objectName));
osafassert(si != nullptr);
/* Modifications can be done for any parameters. */
@@ -1200,7 +1205,7 @@
switch (opdata->operationType) {
case CCBUTIL_CREATE:
- si = si_create(&opdata->objectName,
opdata->param.create.attrValues);
+ si = si_create(Amf::to_string(&opdata->objectName),
opdata->param.create.attrValues);
osafassert(si);
si->si_add_to_model();
break;
@@ -1283,10 +1288,10 @@
}
if (newState != saAmfSIAssignmentState) {
- TRACE("'%s' %s => %s", name.value,
+ TRACE("'%s' %s => %s", name.c_str(),
avd_ass_state[saAmfSIAssignmentState],
avd_ass_state[newState]);
#if 0
- saflog(LOG_NOTICE, amfSvcUsrName, "%s AssignmentState %s =>
%s", si->name.value,
+ saflog(LOG_NOTICE, amfSvcUsrName, "%s AssignmentState %s =>
%s", si->name.c_str(),
avd_ass_state[si->saAmfSIAssignmentState],
avd_ass_state[newState]);
#endif
@@ -1294,16 +1299,16 @@
/* alarm & notifications */
if (saAmfSIAssignmentState == SA_AMF_ASSIGNMENT_UNASSIGNED) {
- avd_send_si_unassigned_alarm(&name);
+ avd_send_si_unassigned_alarm(name);
alarm_sent = true;
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this,
AVSV_CKPT_SI_ALARM_SENT);
}
else {
- avd_send_si_assigned_ntf(&name, oldState,
saAmfSIAssignmentState);
+ avd_send_si_assigned_ntf(name, oldState,
saAmfSIAssignmentState);
/* Clear of alarm */
if ((oldState == SA_AMF_ASSIGNMENT_UNASSIGNED) &&
alarm_sent) {
- avd_alarm_clear(&name,
SA_AMF_NTFID_SI_UNASSIGNED, SA_NTF_SOFTWARE_ERROR);
+ avd_alarm_clear(name,
SA_AMF_NTFID_SI_UNASSIGNED, SA_NTF_SOFTWARE_ERROR);
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this,
AVSV_CKPT_SI_ALARM_SENT);
}
@@ -1311,7 +1316,7 @@
alarm_sent = false;
}
- avd_saImmOiRtObjectUpdate(&name, "saAmfSIAssignmentState",
+ avd_saImmOiRtObjectUpdate(name, "saAmfSIAssignmentState",
SA_IMM_ATTR_SAUINT32T, &saAmfSIAssignmentState);
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this,
AVSV_CKPT_SI_ASSIGNMENT_STATE);
}
@@ -1321,7 +1326,7 @@
{
saAmfSINumCurrActiveAssignments++;
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this,
AVSV_CKPT_SI_SU_CURR_ACTIVE);
- TRACE("%s saAmfSINumCurrActiveAssignments=%u", name.value,
saAmfSINumCurrActiveAssignments);
+ TRACE("%s saAmfSINumCurrActiveAssignments=%u", name.c_str(),
saAmfSINumCurrActiveAssignments);
update_ass_state();
}
@@ -1329,7 +1334,7 @@
{
osafassert(saAmfSINumCurrActiveAssignments > 0);
saAmfSINumCurrActiveAssignments--;
- TRACE("%s saAmfSINumCurrActiveAssignments=%u", name.value,
saAmfSINumCurrActiveAssignments);
+ TRACE("%s saAmfSINumCurrActiveAssignments=%u", name.c_str(),
saAmfSINumCurrActiveAssignments);
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this,
AVSV_CKPT_SI_SU_CURR_ACTIVE);
update_ass_state();
}
@@ -1337,7 +1342,7 @@
void AVD_SI::inc_curr_stdby_ass()
{
saAmfSINumCurrStandbyAssignments++;
- TRACE("%s saAmfSINumCurrStandbyAssignments=%u", name.value,
saAmfSINumCurrStandbyAssignments);
+ TRACE("%s saAmfSINumCurrStandbyAssignments=%u", name.c_str(),
saAmfSINumCurrStandbyAssignments);
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this,
AVSV_CKPT_SI_SU_CURR_STBY);
update_ass_state();
}
@@ -1346,7 +1351,7 @@
{
osafassert(saAmfSINumCurrStandbyAssignments > 0);
saAmfSINumCurrStandbyAssignments--;
- TRACE("%s saAmfSINumCurrStandbyAssignments=%u", name.value,
saAmfSINumCurrStandbyAssignments);
+ TRACE("%s saAmfSINumCurrStandbyAssignments=%u", name.c_str(),
saAmfSINumCurrStandbyAssignments);
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this,
AVSV_CKPT_SI_SU_CURR_STBY);
update_ass_state();
}
@@ -1355,11 +1360,11 @@
{
saAmfSINumCurrActiveAssignments++;
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this,
AVSV_CKPT_SI_SU_CURR_ACTIVE);
- TRACE("%s saAmfSINumCurrActiveAssignments=%u", name.value,
saAmfSINumCurrActiveAssignments);
+ TRACE("%s saAmfSINumCurrActiveAssignments=%u", name.c_str(),
saAmfSINumCurrActiveAssignments);
osafassert(saAmfSINumCurrStandbyAssignments > 0);
saAmfSINumCurrStandbyAssignments--;
- TRACE("%s saAmfSINumCurrStandbyAssignments=%u", name.value,
saAmfSINumCurrStandbyAssignments);
+ TRACE("%s saAmfSINumCurrStandbyAssignments=%u", name.c_str(),
saAmfSINumCurrStandbyAssignments);
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this,
AVSV_CKPT_SI_SU_CURR_STBY);
update_ass_state();
@@ -1368,12 +1373,12 @@
void AVD_SI::inc_curr_stdby_dec_act_ass()
{
saAmfSINumCurrStandbyAssignments++;
- TRACE("%s saAmfSINumCurrStandbyAssignments=%u", name.value,
saAmfSINumCurrStandbyAssignments);
+ TRACE("%s saAmfSINumCurrStandbyAssignments=%u", name.c_str(),
saAmfSINumCurrStandbyAssignments);
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this,
AVSV_CKPT_SI_SU_CURR_STBY);
osafassert(saAmfSINumCurrActiveAssignments > 0);
saAmfSINumCurrActiveAssignments--;
- TRACE("%s saAmfSINumCurrActiveAssignments=%u", name.value,
saAmfSINumCurrActiveAssignments);
+ TRACE("%s saAmfSINumCurrActiveAssignments=%u", name.c_str(),
saAmfSINumCurrActiveAssignments);
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this,
AVSV_CKPT_SI_SU_CURR_ACTIVE);
update_ass_state();
@@ -1391,15 +1396,15 @@
const SaAmfAdminStateT old_state = saAmfSIAdminState;
osafassert(state <= SA_AMF_ADMIN_SHUTTING_DOWN);
- TRACE_ENTER2("%s AdmState %s => %s", name.value,
+ TRACE_ENTER2("%s AdmState %s => %s", name.c_str(),
avd_adm_state_name[saAmfSIAdminState],
avd_adm_state_name[state]);
- saflog(LOG_NOTICE, amfSvcUsrName, "%s AdmState %s => %s", name.value,
+ saflog(LOG_NOTICE, amfSvcUsrName, "%s AdmState %s => %s", name.c_str(),
avd_adm_state_name[saAmfSIAdminState],
avd_adm_state_name[state]);
saAmfSIAdminState = state;
- avd_saImmOiRtObjectUpdate(&name, "saAmfSIAdminState",
+ avd_saImmOiRtObjectUpdate(name, "saAmfSIAdminState",
SA_IMM_ATTR_SAUINT32T, &saAmfSIAdminState);
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this,
AVSV_CKPT_SI_ADMIN_STATE);
- avd_send_admin_state_chg_ntf(&name, SA_AMF_NTFID_SI_ADMIN_STATE,
old_state, saAmfSIAdminState);
+ avd_send_admin_state_chg_ntf(name, SA_AMF_NTFID_SI_ADMIN_STATE,
old_state, saAmfSIAdminState);
TRACE_LEAVE();
}
@@ -1446,8 +1451,8 @@
for (node = spons_si_list; node; node = node->next) {
if (newSiRank < node->si->saAmfSIRank) {
LOG_ER("Invalid saAmfSIRank, ('%s', rank: %u) is higher
rank than "
- "sponsor si ('%s', rank: %u)",
name.value, newSiRank,
- node->si->name.value,
node->si->saAmfSIRank);
+ "sponsor si ('%s', rank: %u)",
name.c_str(), newSiRank,
+ node->si->name.c_str(),
node->si->saAmfSIRank);
return false;
}
}
@@ -1459,8 +1464,8 @@
it != depsi_list.end(); it++) {
if (newSiRank > (*it)->saAmfSIRank) {
LOG_ER("Invalid saAmfSIRank, ('%s', rank: %u) is lower
rank than "
- "dependent si ('%s', rank: %u)",
name.value, newSiRank,
- (*it)->name.value, (*it)->saAmfSIRank);
+ "dependent si ('%s', rank: %u)",
name.c_str(), newSiRank,
+ (*it)->name.c_str(),
(*it)->saAmfSIRank);
return false;
}
}
@@ -1499,4 +1504,4 @@
}
return sirankedsu;
-}
\ No newline at end of file
+}
diff --git a/osaf/services/saf/amf/amfd/si_dep.cc
b/osaf/services/saf/amf/amfd/si_dep.cc
--- a/osaf/services/saf/amf/amfd/si_dep.cc
+++ b/osaf/services/saf/amf/amfd/si_dep.cc
@@ -148,6 +148,7 @@
* Module Inclusion Control...
*/
+#include "util.h"
#include <saImmOm.h>
#include <immutil.h>
#include <logtrace.h>
@@ -201,7 +202,7 @@
if (old_state == state)
return;
si->si_dep_state = state;
- TRACE("'%s' si_dep_state %s => %s", si->name.value,
depstatename[old_state], depstatename[state]);
+ TRACE("'%s' si_dep_state %s => %s", si->name.c_str(),
depstatename[old_state], depstatename[state]);
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, si, AVSV_CKPT_SI_DEP_STATE);
if (avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) {
@@ -236,7 +237,7 @@
avd_cb->sis_in_Tolerance_Timer_state.erase(it1);
TRACE_1("Deleted '%s' from tol timer
list,"
" size after
deletion:%zu",
- si->name.value,
+ si->name.c_str(),
avd_cb->sis_in_Tolerance_Timer_state.size());
break;
}
@@ -266,7 +267,7 @@
AVD_SU_SI_REL *susi = nullptr;
bool si_active = false;
- TRACE_ENTER2("'%s'", si->name.value);
+ TRACE_ENTER2("'%s'", si->name.c_str());
for (susi = si->list_of_sisu; susi != AVD_SU_SI_REL_NULL; susi =
susi->si_next) {
if (((susi->state == SA_AMF_HA_ACTIVE) || (susi->state ==
SA_AMF_HA_QUIESCING)) &&
@@ -304,7 +305,7 @@
TRACE_ENTER();
/* Dependent SI should be active, if not return error */
- dep_si = avd_si_get(&si_dep_rec->dep_name);
+ dep_si = avd_si_get(si_dep_rec->dep_name);
osafassert(dep_si != nullptr);
/* SI doesn't depend on any other SIs */
@@ -313,15 +314,14 @@
spons_si_node = dep_si->spons_si_list;
/* Check if the sponsor is the first node of the list */
- if (m_CMP_HORDER_SANAMET(dep_si->spons_si_list->si->name,
si_dep_rec->spons_si->name) == 0) {
+ if (dep_si->spons_si_list->si->name.compare(si_dep_rec->spons_si->name)
== 0) {
dep_si->spons_si_list = spons_si_node->next;
/* decrement the dependent SI count in sponsor SI */
spons_si_node->si->num_dependents --;
delete spons_si_node;
} else {
while (spons_si_node->next != nullptr) {
- if (m_CMP_HORDER_SANAMET(spons_si_node->next->si->name,
- si_dep_rec->spons_si->name) !=
0) {
+ if
(spons_si_node->next->si->name.compare(si_dep_rec->spons_si->name) != 0) {
spons_si_node = spons_si_node->next;
continue;
}
@@ -379,9 +379,9 @@
dep_si->spons_si_list = spons_si_node;
}
-static AVD_SI_DEP *sidep_db_find(SaNameT *sponsor, SaNameT *dependent)
+static AVD_SI_DEP *sidep_db_find(const std::string& sponsor, const
std::string& dependent)
{
- return sidep_db->find(make_pair(Amf::to_string(sponsor),
Amf::to_string(dependent)));
+ return sidep_db->find(make_pair(sponsor, dependent));
}
@@ -406,10 +406,10 @@
AVD_SPONS_SI_NODE *spons_si_node = dep_si->spons_si_list;
while (spons_si_node) {
- if ((rec = sidep_db_find(&spons_si_node->si->name,
&dep_si->name)) != nullptr) {
+ if ((rec = sidep_db_find(spons_si_node->si->name,
dep_si->name)) != nullptr) {
if (rec->si_dep_timer.is_active == true) {
avd_stop_tmr(cb, &rec->si_dep_timer);
- TRACE("Tolerance timer stopped for '%s'",
dep_si->name.value);
+ TRACE("Tolerance timer stopped for '%s'",
dep_si->name.c_str());
if (dep_si->tol_timer_count > 0) {
dep_si->tol_timer_count--;
@@ -442,7 +442,7 @@
AVD_SU_SI_REL *susi = nullptr;
uint32_t rc = NCSCC_RC_FAILURE;
- TRACE_ENTER2("'%s'", si->name.value);
+ TRACE_ENTER2("'%s'", si->name.c_str());
susi = si->list_of_sisu;
while (susi != AVD_SU_SI_REL_NULL && susi->fsm !=
AVD_SU_SI_STATE_UNASGN) {
@@ -485,16 +485,16 @@
{
uint32_t rc = NCSCC_RC_FAILURE;
- TRACE_ENTER2("'%s'", si->name.value);
+ TRACE_ENTER2("'%s'", si->name.c_str());
if (si->sg_of_si->sg_fsm_state != AVD_SG_FSM_STABLE) {
- TRACE("sg unstable, so defering sidep action on
si:'%s'",si->name.value);
+ TRACE("sg unstable, so defering sidep action on
si:'%s'",si->name.c_str());
goto done;
}
if ((si->saAmfSIAdminState == SA_AMF_ADMIN_UNLOCKED) &&
(cb->init_state == AVD_APP_STATE)) {
- LOG_NO("Assigning due to dep '%s'",si->name.value);
+ LOG_NO("Assigning due to dep '%s'",si->name.c_str());
if (si->sg_of_si->si_assign(cb, si) != NCSCC_RC_SUCCESS) {
goto done;
}
@@ -532,7 +532,7 @@
AVD_EVT *evt = nullptr;
uint32_t rc = NCSCC_RC_FAILURE;
- TRACE_ENTER2("si:'%s' evt_type:%u", si->name.value, evt_type);
+ TRACE_ENTER2("si:'%s' evt_type:%u", si->name.c_str(), evt_type);
evt = new AVD_EVT();
@@ -580,7 +580,7 @@
if (dep_si->si_dep_state == AVD_SI_TOL_TIMER_RUNNING) {
avd_cb->sis_in_Tolerance_Timer_state.push_back(dep_si);
TRACE_1("Added '%s' to tol_timer list, size after addition:%zu",
-
dep_si->name.value,avd_cb->sis_in_Tolerance_Timer_state.size());
+
dep_si->name.c_str(),avd_cb->sis_in_Tolerance_Timer_state.size());
}
TRACE_LEAVE();
}
@@ -602,8 +602,8 @@
osafassert(evt->info.tmr.type == AVD_TMR_SI_DEP_TOL);
- si = avd_si_get(&evt->info.tmr.dep_si_name);
- spons_si = avd_si_get(&evt->info.tmr.spons_si_name);
+ si = avd_si_get(evt->info.tmr.dep_si_name);
+ spons_si = avd_si_get(evt->info.tmr.spons_si_name);
if ((si == nullptr) || (spons_si == nullptr)) {
/* Nothing to do here as SI/spons-SI itself lost their
existence */
@@ -611,7 +611,7 @@
goto done;
}
- LOG_NO("expiry of tolerance timer '%s'", si->name.value);
+ LOG_NO("expiry of tolerance timer '%s'", si->name.c_str());
/* Since the tol-timer is been expired, can decrement tol_timer_count
of
* the SI.
@@ -647,7 +647,7 @@
si_dep_state action is taken.
*/
if (si->sg_of_si->sg_fsm_state != AVD_SG_FSM_STABLE) {
- TRACE("sg unstable, so defering sidep action on
si:'%s'",si->name.value);
+ TRACE("sg unstable, so defering sidep action on
si:'%s'",si->name.c_str());
goto done;
}
@@ -670,7 +670,7 @@
mark its dep state to SPONSOR_UNASSGINED otherwise unassign
it.
*/
if (sidep_is_si_active(si)) {
- LOG_NO("Unassigning due to dep'%s'",si->name.value);
+ LOG_NO("Unassigning due to dep'%s'",si->name.c_str());
sidep_unassign_dependent(cb, si);
}
else
@@ -700,7 +700,7 @@
bool spons_state = true;
AVD_SPONS_SI_NODE *spons_si_node = nullptr;
- TRACE_ENTER2("'%s'", si->name.value);
+ TRACE_ENTER2("'%s'", si->name.c_str());
for (spons_si_node = si->spons_si_list; spons_si_node != nullptr;
spons_si_node = spons_si_node->next) {
@@ -728,7 +728,7 @@
**************************************************************************/
void avd_sidep_update_si_dep_state_for_all_sis(AVD_SG *sg)
{
- TRACE_ENTER2("'%s'", sg->name.value);
+ TRACE_ENTER2("'%s'", sg->name.c_str());
for (const auto& si : sg->list_of_si) {
@@ -758,7 +758,7 @@
**************************************************************************/
void sidep_si_screen_si_dependencies(AVD_SI *si)
{
- TRACE_ENTER2("%s", si->name.value);
+ TRACE_ENTER2("%s", si->name.c_str());
/*update the si_dep_state of si based on assignement states of its
sponsors*/
sidep_update_si_self_dep_state(si);
@@ -794,7 +794,7 @@
osafassert(evt->rcv_evt == AVD_EVT_ASSIGN_SI_DEP_STATE);
- dep_si = avd_si_get(&evt->info.tmr.dep_si_name);
+ dep_si = avd_si_get(evt->info.tmr.dep_si_name);
if (dep_si == nullptr)
goto done;
@@ -802,7 +802,7 @@
stable, based on updated si_dep_state action is taken.
*/
if (dep_si->sg_of_si->sg_fsm_state != AVD_SG_FSM_STABLE) {
- TRACE("sg unstable, so defering sidep action on
si:'%s'",dep_si->name.value);
+ TRACE("sg unstable, so defering sidep action on
si:'%s'",dep_si->name.c_str());
goto done;
}
@@ -857,7 +857,7 @@
TRACE_ENTER();
- si = avd_si_get(&evt->info.tmr.dep_si_name);
+ si = avd_si_get(evt->info.tmr.dep_si_name);
if (!si) {
LOG_ER("Received si nullptr");
@@ -865,7 +865,7 @@
}
if (si->si_dep_state != AVD_SI_UNASSIGNING_DUE_TO_DEP) {
- LOG_ER("wrong si_dep_state:%u of si:'%s'", si->si_dep_state,
si->name.value);
+ LOG_ER("wrong si_dep_state:%u of si:'%s'", si->si_dep_state,
si->name.c_str());
goto done;
}
@@ -887,7 +887,7 @@
}
if (sidep_unassign_dependent(cb, si) != NCSCC_RC_SUCCESS) {
- LOG_ER("'%s' unassignment failed",si->name.value);
+ LOG_ER("'%s' unassignment failed",si->name.c_str());
}
done:
@@ -914,9 +914,9 @@
{
AVD_SI *spons_si = nullptr;
- TRACE_ENTER2("si:'%s',
si_dep_state:'%s'",dep_si->name.value,depstatename[dep_si->si_dep_state]);
+ TRACE_ENTER2("si:'%s',
si_dep_state:'%s'",dep_si->name.c_str(),depstatename[dep_si->si_dep_state]);
- spons_si = avd_si_get(&si_dep_rec->spons_name);
+ spons_si = avd_si_get(si_dep_rec->spons_name);
osafassert(spons_si != nullptr);
/* Take action only when both sponsor and dependent belongs to same sg
@@ -925,7 +925,7 @@
*/
if ((dep_si->sg_of_si->sg_fsm_state != AVD_SG_FSM_STABLE) &&
(dep_si->sg_of_si != spons_si->sg_of_si)) {
- TRACE("sg unstable, so defering sidep action on
si:'%s'",dep_si->name.value);
+ TRACE("sg unstable, so defering sidep action on
si:'%s'",dep_si->name.c_str());
goto done;
}
@@ -938,7 +938,7 @@
*/
dep_si->tol_timer_count++;
LOG_NO("Tolerance timer started, sponsor si:'%s',
dependent si:%s",
- spons_si->name.value,
dep_si->name.value);
+ spons_si->name.c_str(),
dep_si->name.c_str());
}
avd_sidep_si_dep_state_set(dep_si, AVD_SI_TOL_TIMER_RUNNING);
} else if (cb->avail_state_avd == SA_AMF_HA_ACTIVE) {
@@ -981,7 +981,7 @@
if (sidep->spons_si != si)
continue;
- AVD_SI *dep_si = avd_si_get(&sidep->dep_name);
+ AVD_SI *dep_si = avd_si_get(sidep->dep_name);
osafassert(dep_si != nullptr);
/* Take action only when both sponsor and dependent belongs to
same sg
@@ -1024,7 +1024,7 @@
AVD_SI_DEP *tmp_sidep = it->second;
if (sidep == tmp_sidep)
continue;
- if (m_CMP_HORDER_SANAMET(tmp_sidep->dep_name, sidep->dep_name)
== 0)
+ if (tmp_sidep->dep_name.compare(sidep->dep_name) == 0)
return tmp_sidep;
}
return nullptr;
@@ -1055,7 +1055,7 @@
TRACE_ENTER();
- if (m_CMP_HORDER_SANAMET(sidep->spons_name, sidep->dep_name) == 0) {
+ if (sidep->spons_name.compare(sidep->dep_name) == 0) {
/* dependent SI and Sponsor SI can not be same
Cyclic dependency found return sucess
*/
@@ -1067,19 +1067,19 @@
start->si_name = sidep->spons_name;
start->next = nullptr;
last = start;
- LOG_NO("got si :%s",start->si_name.value);
+ LOG_NO("got si :%s",start->si_name.c_str());
while (last) {
for (std::map<std::pair<std::string,std::string>,
AVD_SI_DEP*>::const_iterator it = sidep_db->begin();
it != sidep_db->end(); it++) {
tmp_sidep = it->second;
- if (m_CMP_HORDER_SANAMET(tmp_sidep->dep_name,
last->si_name) == 0)
+ if (tmp_sidep->dep_name.compare(last->si_name) == 0)
break;
}
- while ((tmp_sidep != nullptr) &&
(m_CMP_HORDER_SANAMET(tmp_sidep->dep_name, last->si_name) == 0)) {
- if (m_CMP_HORDER_SANAMET(sidep->dep_name,
tmp_sidep->spons_name) == 0) {
+ while ((tmp_sidep != nullptr) &&
(tmp_sidep->dep_name.compare(last->si_name) == 0)) {
+ if (sidep->dep_name.compare(tmp_sidep->spons_name) ==
0) {
/* Cyclic dependency found */
rc = NCSCC_RC_SUCCESS;
break;
@@ -1087,9 +1087,9 @@
/* Search if this SI name already exist in the list */
temp = start;
- if (m_CMP_HORDER_SANAMET(temp->si_name,
tmp_sidep->spons_name) != 0) {
+ if (temp->si_name.compare(tmp_sidep->spons_name) != 0) {
while ((temp->next != nullptr) &&
-
(m_CMP_HORDER_SANAMET(temp->next->si_name, tmp_sidep->spons_name) != 0)) {
+
(temp->next->si_name.compare(tmp_sidep->spons_name) != 0)) {
temp = temp->next;
}
@@ -1123,57 +1123,19 @@
return rc;
}
-static int avd_sidep_indx_init(const SaNameT *sidep_name, AVD_SI_DEP
*sidep_obj)
+static int avd_sidep_indx_init(const std::string& sidep_name, AVD_SI_DEP
*sidep_obj)
{
- char *p;
- SaNameT tmp;
- int i = 0;
+ get_child_dn_from_ass_dn(sidep_name, sidep_obj->spons_name);
+ get_parent_dn_from_ass_dn(sidep_name, sidep_obj->dep_name);
- memset(&tmp, 0, sizeof(SaNameT));
- tmp.length = sidep_name->length;
- memcpy(&tmp.value, &sidep_name->value, tmp.length);
-
- memset(sidep_obj, 0, sizeof(AVD_SI_DEP));
- memcpy(sidep_obj->name.value, &sidep_name->value, sidep_name->length);
-
- /* find first occurence and step past it */
- p = strstr((char *)tmp.value, "safSi=") + 1;
- if (p == nullptr) return false;
-
- /* find second occurence, an error if not found */
- p = strstr(p, "safSi=");
- if (p == nullptr) return false;
-
- *(p - 1) = '\0'; /* null terminate at comma before SI */
-
- sidep_obj->dep_name.length = snprintf((char
*)sidep_obj->dep_name.value, SA_MAX_NAME_LENGTH, "%s", p);
-
- /* Skip past the RDN tag */
- p = strchr((char *)tmp.value, '=') + 1;
- if (p == nullptr) return false;
-
- /*
- ** Example DN, need to copy to get rid of back slash escaped commas.
- **
'safDepend=safSi=SC2-NoRed\,safApp=OpenSAF,safSi=SC-2N,safApp=OpenSAF'
- */
-
- /* Copy the RDN value which is a DN with escaped commas */
- i = 0;
- while (*p) {
- if (*p != '\\')
- sidep_obj->spons_name.value[i++] = *p;
- p++;
- }
- sidep_obj->spons_name.length = strlen((char
*)sidep_obj->spons_name.value);
-
/* Set SI pointers */
- sidep_obj->spons_si =
si_db->find(Amf::to_string(&sidep_obj->spons_name));
- sidep_obj->dep_si = si_db->find(Amf::to_string(&sidep_obj->dep_name));
+ sidep_obj->spons_si = si_db->find(sidep_obj->spons_name);
+ sidep_obj->dep_si = si_db->find(sidep_obj->dep_name);
return true;
}
-static uint32_t is_config_valid(SaNameT *sidep_name, CcbUtilOperationData_t
*opdata)
+static uint32_t is_config_valid(const std::string& sidep_name,
CcbUtilOperationData_t *opdata)
{
AVD_SI_DEP sidep;
AVD_SI *spons_si, *dep_si;
@@ -1186,23 +1148,26 @@
if( !avd_sidep_indx_init(sidep_name, &sidep)) {
report_ccb_validation_error(opdata, "SI dep validation: Bad DN
for SI Dependency");
- goto done;
+ return false;
}
+
+ const SaNameTWrapper sponsor(sidep.spons_name);
+ const SaNameTWrapper dependent(sidep.dep_name);
/* Sponsor SI need to exist */
- if ((spons_si = avd_si_get(&sidep.spons_name)) == nullptr) {
+ if ((spons_si = avd_si_get(sidep.spons_name)) == nullptr) {
if (opdata == nullptr) {
report_ccb_validation_error(opdata, "SI dep validation:
'%s' does not exist in model and '%s'"
" depends on it",
- sidep.spons_name.value,
sidep.dep_name.value);
+ sidep.spons_name.c_str(),
sidep.dep_name.c_str());
goto done;
}
/* SI does not exist in current model, check CCB */
- if ((tmp = ccbutil_getCcbOpDataByDN(opdata->ccbId,
&sidep.spons_name)) == nullptr) {
+ if ((tmp = ccbutil_getCcbOpDataByDN(opdata->ccbId, sponsor)) ==
nullptr) {
report_ccb_validation_error(opdata, "SI dep validation:
'%s' does not exist in existing model or"
" in CCB and '%s' depends on it",
- sidep.spons_name.value,
sidep.dep_name.value);
+ sidep.spons_name.c_str(),
sidep.dep_name.c_str());
goto done;
}
@@ -1217,17 +1182,17 @@
if (spons_saAmfSIRank == 0)
spons_saAmfSIRank = ~0U; /* zero means lowest possible rank */
- if ((dep_si = avd_si_get(&sidep.dep_name)) == nullptr) {
+ if ((dep_si = avd_si_get(sidep.dep_name)) == nullptr) {
if (opdata == nullptr) {
report_ccb_validation_error(opdata, "SI dep validation:
'%s' does not exist in model",
- sidep.dep_name.value);
+ sidep.dep_name.c_str());
goto done;
}
/* SI does not exist in current model, check CCB */
- if ((tmp = ccbutil_getCcbOpDataByDN(opdata->ccbId,
&sidep.dep_name)) == nullptr) {
+ if ((tmp = ccbutil_getCcbOpDataByDN(opdata->ccbId, dependent))
== nullptr) {
report_ccb_validation_error(opdata, "SI dep validation:
'%s' does not exist in existing"
- " model or in CCB",
sidep.dep_name.value);
+ " model or in CCB",
sidep.dep_name.c_str());
goto done;
}
@@ -1245,7 +1210,7 @@
if ((opdata != nullptr) && dependent_si_is_assigned) {
report_ccb_validation_error(opdata, "SI dep validation: adding
dependency from existing SI '%s'"
" to SI '%s' is not allowed",
- sidep.spons_name.value, sidep.dep_name.value);
+ sidep.spons_name.c_str(),
sidep.dep_name.c_str());
goto done;
}
@@ -1255,13 +1220,13 @@
/* higher number => lower rank, see 3.8.1.1 */
if (spons_saAmfSIRank > dep_saAmfSIRank) {
report_ccb_validation_error(opdata, "SI dep validation: Sponsor
SI '%s' has lower rank than"
- " dependent SI '%s'", sidep.spons_name.value,
sidep.dep_name.value);
+ " dependent SI '%s'", sidep.spons_name.c_str(),
sidep.dep_name.c_str());
goto done;
}
if (sidep_cyclic_dep_find(&sidep) == NCSCC_RC_SUCCESS) {
/* Return value that record cannot be added due to cyclic
dependency */
- report_ccb_validation_error(opdata, "SI dep validation: cyclic
dependency for '%s'", sidep.dep_name.value);
+ report_ccb_validation_error(opdata, "SI dep validation: cyclic
dependency for '%s'", sidep.dep_name.c_str());
goto done;
}
@@ -1272,14 +1237,14 @@
return rc;
}
-static AVD_SI_DEP *sidep_new(SaNameT *sidep_name, const SaImmAttrValuesT_2
**attributes)
+static AVD_SI_DEP *sidep_new(const std::string& sidep_name, const
SaImmAttrValuesT_2 **attributes)
{
AVD_SI_DEP tmp_sidep, *sidep = nullptr;
- TRACE_ENTER2("%s", sidep_name->value);
+ TRACE_ENTER2("%s", sidep_name.c_str());
avd_sidep_indx_init(sidep_name, &tmp_sidep);
- if ((sidep = sidep_db_find(&tmp_sidep.spons_name,&tmp_sidep.dep_name))
!= nullptr) {
+ if ((sidep = sidep_db_find(tmp_sidep.spons_name,tmp_sidep.dep_name)) !=
nullptr) {
TRACE("SI dependency already exists");
}
@@ -1287,7 +1252,7 @@
avd_sidep_indx_init(sidep_name, sidep);
osafassert(sidep->dep_si != nullptr);
osafassert(sidep->spons_si != nullptr);
- sidep_db->insert(make_pair(Amf::to_string(&sidep->spons_name),
Amf::to_string(&sidep->dep_name)), sidep);
+ sidep_db->insert(make_pair(sidep->spons_name, sidep->dep_name), sidep);
/* Allocate a new block structure for imm rec now */
@@ -1324,8 +1289,7 @@
SaAisErrorT error;
SaImmSearchHandleT searchHandle;
SaImmSearchParametersT_2 searchParam;
- SaNameT sidep_name;
- SaNameT sidep_validate;
+ char* sidep_name;
const SaImmAttrValuesT_2 **attributes;
const char *className = "SaAmfSIDependency";
@@ -1335,7 +1299,7 @@
searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT;
searchParam.searchOneAttr.attrValue = &className;
- error = immutil_saImmOmSearchInitialize_2(avd_cb->immOmHandle, nullptr,
SA_IMM_SUBTREE,
+ error = immutil_saImmOmSearchInitialize_o2(avd_cb->immOmHandle,
nullptr, SA_IMM_SUBTREE,
SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_ALL_ATTR,
&searchParam,
nullptr, &searchHandle);
@@ -1344,14 +1308,13 @@
goto done1;
}
- while (immutil_saImmOmSearchNext_2(searchHandle, &sidep_name,
(SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) {
- /* validate the configuration before adding the object */
- memcpy(&sidep_validate, &sidep_name, sizeof(SaNameT));
- if (!is_config_valid(&sidep_name, nullptr)) {
+ while (immutil_saImmOmSearchNext_o2(searchHandle, &sidep_name,
(SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) {
+ const std::string sidep(sidep_name);
+ if (!is_config_valid(sidep, nullptr)) {
error = SA_AIS_ERR_BAD_OPERATION;
goto done2;
}
- if(sidep_new(&sidep_name, attributes) == nullptr) {
+ if(sidep_new(sidep, attributes) == nullptr) {
error = SA_AIS_ERR_BAD_OPERATION;
goto done2;
}
@@ -1369,19 +1332,19 @@
static SaAisErrorT sidep_ccb_completed_cb(CcbUtilOperationData_t *opdata)
{
SaAisErrorT rc = SA_AIS_OK;
+ AVD_SI_DEP sidep;
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_ERR_BAD_OPERATION;
break;
case CCBUTIL_DELETE:
case CCBUTIL_MODIFY:
- AVD_SI_DEP sidep;
- avd_sidep_indx_init(&opdata->objectName, &sidep);
- if (sidep_db_find(&sidep.spons_name, &sidep.dep_name) ==
nullptr)
+ avd_sidep_indx_init(Amf::to_string(&opdata->objectName),
&sidep);
+ if (sidep_db_find(sidep.spons_name, sidep.dep_name) == nullptr)
rc = SA_AIS_ERR_BAD_OPERATION;
break;
default:
@@ -1404,13 +1367,13 @@
switch (opdata->operationType) {
case CCBUTIL_CREATE:
- sidep = sidep_new(&opdata->objectName,
opdata->param.create.attrValues);
+ sidep = sidep_new(Amf::to_string(&opdata->objectName),
opdata->param.create.attrValues);
break;
case CCBUTIL_DELETE:
- avd_sidep_indx_init(&opdata->objectName, &tmp_sidep);
- sidep = sidep_db_find(&tmp_sidep.spons_name,
&tmp_sidep.dep_name);
- dep_si = avd_si_get(&sidep->dep_name);
+ avd_sidep_indx_init(Amf::to_string(&opdata->objectName),
&tmp_sidep);
+ sidep = sidep_db_find(tmp_sidep.spons_name, tmp_sidep.dep_name);
+ dep_si = avd_si_get(sidep->dep_name);
osafassert(dep_si != nullptr);
/* If SI is in tolerance timer running state because of this
* SI-SI dep cfg, then stop the tolerance timer.
@@ -1423,7 +1386,7 @@
dep_si->tol_timer_count--;
}
sidep_spons_list_del(sidep);
- sidep_db->erase(make_pair(Amf::to_string(&sidep->spons_name),
Amf::to_string(&sidep->dep_name)));
+ sidep_db->erase(make_pair(sidep->spons_name, sidep->dep_name));
delete sidep;
if (avd_cb->avail_state_avd == SA_AMF_HA_ACTIVE) {
/* Update the SI according to its existing sponsors
state */
@@ -1433,8 +1396,8 @@
break;
case CCBUTIL_MODIFY:
- avd_sidep_indx_init(&opdata->objectName, &tmp_sidep);
- sidep = sidep_db_find(&tmp_sidep.spons_name,
&tmp_sidep.dep_name);
+ avd_sidep_indx_init(Amf::to_string(&opdata->objectName),
&tmp_sidep);
+ sidep = sidep_db_find(tmp_sidep.spons_name, tmp_sidep.dep_name);
while ((attr_mod = opdata->param.modify.attrMods[i++]) !=
nullptr) {
if (!strcmp(attr_mod->modAttr.attrName,
"saAmfToleranceTime")) {
TRACE("saAmfToleranceTime modified from '%llu'
to '%llu'", sidep->saAmfToleranceTime,
@@ -1463,9 +1426,9 @@
{
AVD_SI_DEP *si_dep_rec;
- TRACE("dep_si:%s spons_si:%s",dep_si->name.value,spons_si->name.value);
+ TRACE("dep_si:%s
spons_si:%s",dep_si->name.c_str(),spons_si->name.c_str());
- si_dep_rec = sidep_db_find(&spons_si->name, &dep_si->name);
+ si_dep_rec = sidep_db_find(spons_si->name, dep_si->name);
if (si_dep_rec != nullptr) {
sidep_update_si_dep_state_for_spons_unassign(avd_cb, dep_si,
si_dep_rec);
} else {
@@ -1500,15 +1463,15 @@
AVD_SI *dep_si;
AVD_SU_SI_REL *sisu;
- TRACE_ENTER2(": '%s'",si->name.value);
+ TRACE_ENTER2(": '%s'",si->name.c_str());
for (std::map<std::pair<std::string,std::string>,
AVD_SI_DEP*>::const_iterator it = sidep_db->begin();
it != sidep_db->end(); it++) {
const AVD_SI_DEP *sidep = it->second;
- if (m_CMP_HORDER_SANAMET(sidep->spons_si->name, si->name) != 0)
+ if (sidep->spons_si->name.compare(si->name) != 0)
continue;
- dep_si = si_db->find(Amf::to_string(&sidep->dep_name));
+ dep_si = si_db->find(sidep->dep_name);
osafassert(dep_si != nullptr);
/* Get the Active susi */
@@ -1606,7 +1569,7 @@
bool assignmemt_status = false;
bool valid_standby = false;
- TRACE_ENTER2("SI: '%s', SU %s",si->name.value, su->name.value);
+ TRACE_ENTER2("SI: '%s', SU %s",si->name.c_str(), su->name.c_str());
/* Role fail-over triggered because of node going down or role
switch-over because
of node lock.*/
@@ -1696,7 +1659,7 @@
failover_possible = false;
valid_standby = false;
for (sisu = spons_si_node->si->list_of_sisu;sisu;sisu =
sisu->si_next) {
- TRACE("sisu->si:%s state:%u
fsm:%u",sisu->si->name.value,sisu->state,sisu->fsm);
+ TRACE("sisu->si:%s state:%u
fsm:%u",sisu->si->name.c_str(),sisu->state,sisu->fsm);
if (((sisu->state == SA_AMF_HA_ACTIVE) ||
(sisu->state == SA_AMF_HA_QUIESCING)) &&
(sisu->fsm != AVD_SU_SI_STATE_UNASGN)) {
failover_possible = true;
@@ -1704,7 +1667,7 @@
sponsor_in_modify_state = true;
if ((sisu->su == su) && (sisu->fsm ==
AVD_SU_SI_STATE_ASGND)) {
sponsor_in_modify_state = true;
- TRACE("Sponsor '%s' active in
same SU",sisu->si->name.value);
+ TRACE("Sponsor '%s' active in
same SU",sisu->si->name.c_str());
}
break;
} else if ((sisu->state == SA_AMF_HA_QUIESCED)
&&
@@ -1714,7 +1677,7 @@
any other SU, it means failover of
sponsor is still pending.
*/
sponsor_in_modify_state = true;
- TRACE("Sponsor '%s' quiescd assigned in
same SU",sisu->si->name.value);
+ TRACE("Sponsor '%s' quiescd assigned in
same SU",sisu->si->name.c_str());
} else if ((spons_si_node->si->sg_of_si ==
si->sg_of_si) && (sisu->su != su) &&
(!valid_standby)) {
@@ -1763,11 +1726,11 @@
AVD_SU_SI_REL *susi;
bool flag = true;
- TRACE_ENTER2("SU:'%s'
node_state:%d",su->name.value,su->su_on_node->node_state);
+ TRACE_ENTER2("SU:'%s'
node_state:%d",su->name.c_str(),su->su_on_node->node_state);
for (susi = su->list_of_susi;susi != nullptr;susi = susi->su_next) {
if (susi->si->spons_si_list) {
- TRACE(":susi:%s si_dep_state:%u state:%u
fsm:%u",susi->si->name.value,susi->si->si_dep_state, susi->state,susi->fsm);
+ TRACE(":susi:%s si_dep_state:%u state:%u
fsm:%u",susi->si->name.c_str(),susi->si->si_dep_state, susi->state,susi->fsm);
if (susi->si->si_dep_state ==
AVD_SI_FAILOVER_UNDER_PROGRESS) {
TRACE("Role failover is deferred as sponsors
role failover is under going");
flag = false;
@@ -1829,19 +1792,19 @@
{
AVD_SPONS_SI_NODE *spons_si_node;
- TRACE_ENTER2("si:%s",si->name.value);
+ TRACE_ENTER2("si:%s",si->name.c_str());
for (std::map<std::pair<std::string,std::string>,
AVD_SI_DEP*>::const_iterator it = sidep_db->begin();
it != sidep_db->end(); it++) {
const AVD_SI_DEP *sidep = it->second;
- if (m_CMP_HORDER_SANAMET(sidep->spons_si->name, si->name) != 0)
+ if (sidep->spons_si->name.compare(si->name) != 0)
continue;
- AVD_SI *dep_si = avd_si_get(&sidep->dep_name);
+ AVD_SI *dep_si = avd_si_get(sidep->dep_name);
osafassert(dep_si != nullptr);
for (AVD_SU_SI_REL *sisu = dep_si->list_of_sisu;sisu;sisu =
sisu->si_next) {
- TRACE("sisu si:%s su:%s state:%d
fsm_state:%d",sisu->si->name.value,sisu->su->name.value,sisu->state,sisu->fsm);
+ TRACE("sisu si:%s su:%s state:%d
fsm_state:%d",sisu->si->name.c_str(),sisu->su->name.c_str(),sisu->state,sisu->fsm);
if (((sisu->state == SA_AMF_HA_ACTIVE) || (sisu->state
== SA_AMF_HA_QUIESCING)
|| (sisu->state ==
SA_AMF_HA_QUIESCED))
&& (sisu->fsm !=
AVD_SU_SI_STATE_UNASGN)) {
@@ -1883,7 +1846,7 @@
if
(spons_si_node->si->si_dep_state == AVD_SI_FAILOVER_UNDER_PROGRESS)
continue;
for (sisu =
spons_si_node->si->list_of_sisu;sisu;sisu = sisu->si_next) {
-
TRACE("sisu->si:%s state:%u fsm:%u",sisu->si->name.value,sisu->state,sisu->fsm);
+
TRACE("sisu->si:%s state:%u
fsm:%u",sisu->si->name.c_str(),sisu->state,sisu->fsm);
if
(((sisu->state == SA_AMF_HA_ACTIVE) || (sisu->state == SA_AMF_HA_QUIESCING) ||
(sisu->state == SA_AMF_HA_QUIESCED)) &&
(sisu->fsm != AVD_SU_SI_STATE_UNASGN)){
@@ -1927,7 +1890,7 @@
{
AVD_SU_SI_REL *susi;
- TRACE_ENTER2(" for su '%s'", su->name.value);
+ TRACE_ENTER2(" for su '%s'", su->name.c_str());
for (susi = su->list_of_susi;susi != nullptr;susi = susi->su_next) {
if (susi->si->num_dependents > 0) {
@@ -1952,7 +1915,7 @@
AVD_SU_SI_REL *susi, *std_susi = nullptr;
uint32_t curr_pref_active_sus = 0;
- TRACE_ENTER2(" for SI '%s'", si->name.value);
+ TRACE_ENTER2(" for SI '%s'", si->name.c_str());
switch (si->sg_of_si->sg_redundancy_model) {
case SA_AMF_2N_REDUNDANCY_MODEL:
@@ -1967,7 +1930,7 @@
for (susi = stdby_su->list_of_susi;susi !=
nullptr;susi = susi->su_next) {
if (actv_su &&
avd_susi_role_failover(susi, actv_su) == NCSCC_RC_FAILURE) {
LOG_NO(" %s: %u: Active role
modification failed for %s ",
- __FILE__,
__LINE__, susi->su->name.value);
+ __FILE__,
__LINE__, susi->su->name.c_str());
goto done;
}
}
@@ -2029,7 +1992,7 @@
/* Send a D2N-INFO_SU_SI_ASSIGN with remove all
to the standby SU */
if (avd_sg_su_si_del_snd(avd_cb, stdby_su) ==
NCSCC_RC_FAILURE) {
LOG_ER("SU del failed :%s :%u :%s",
__FILE__, __LINE__,
- stdby_su->name.value);
+ stdby_su->name.c_str());
goto done;
}
} else {
@@ -2088,16 +2051,16 @@
**/
void avd_sidep_reset_dependents_depstate_in_sufault(AVD_SI *si)
{
- TRACE_ENTER2(" SI: '%s'",si->name.value);
+ TRACE_ENTER2(" SI: '%s'",si->name.c_str());
for (std::map<std::pair<std::string,std::string>,
AVD_SI_DEP*>::const_iterator it = sidep_db->begin();
it != sidep_db->end(); it++) {
const AVD_SI_DEP *sidep = it->second;
- if (m_CMP_HORDER_SANAMET(sidep->spons_si->name, si->name) != 0)
+ if (sidep->spons_si->name.compare(si->name) != 0)
continue;
- AVD_SI *dep_si = avd_si_get(&sidep->dep_name);
+ AVD_SI *dep_si = avd_si_get(sidep->dep_name);
osafassert(dep_si != nullptr);
if (dep_si->si_dep_state == AVD_SI_FAILOVER_UNDER_PROGRESS)
@@ -2151,7 +2114,7 @@
AVD_SU_SI_REL *sisu;
AVD_SU *active_su = nullptr;
- TRACE_ENTER2(": '%s'",si->name.value);
+ TRACE_ENTER2(": '%s'",si->name.c_str());
/* determine the active su */
for (sisu = si->list_of_sisu;sisu != nullptr;sisu = sisu->si_next) {
@@ -2165,13 +2128,13 @@
for (std::map<std::pair<std::string,std::string>,
AVD_SI_DEP*>::const_iterator it = sidep_db->begin();
it != sidep_db->end(); it++) {
const AVD_SI_DEP *sidep = it->second;
- if (m_CMP_HORDER_SANAMET(sidep->spons_si->name, si->name) != 0)
+ if (sidep->spons_si->name.compare(si->name) != 0)
continue;
- AVD_SI *dep_si = avd_si_get(&sidep->dep_name);
+ AVD_SI *dep_si = avd_si_get(sidep->dep_name);
osafassert(dep_si != nullptr);
- TRACE("dependent si:%s
dep_si->si_dep_state:%d",dep_si->name.value,dep_si->si_dep_state);
+ TRACE("dependent si:%s
dep_si->si_dep_state:%d",dep_si->name.c_str(),dep_si->si_dep_state);
if(dep_si->si_dep_state == AVD_SI_FAILOVER_UNDER_PROGRESS) {
if (!avd_sidep_all_sponsors_active(dep_si))
/* Some of the sponsors are not yet in Active
state */
@@ -2224,15 +2187,15 @@
{
bool quiesced = true;
- TRACE_ENTER2(": '%s'",si->name.value);
+ TRACE_ENTER2(": '%s'",si->name.c_str());
for (std::map<std::pair<std::string,std::string>,
AVD_SI_DEP*>::const_iterator it = sidep_db->begin();
it != sidep_db->end(); it++) {
const AVD_SI_DEP *sidep = it->second;
- if (m_CMP_HORDER_SANAMET(sidep->spons_si->name, si->name) != 0)
+ if (sidep->spons_si->name.compare(si->name) != 0)
continue;
- AVD_SI *dep_si = avd_si_get(&sidep->dep_name);
+ AVD_SI *dep_si = avd_si_get(sidep->dep_name);
osafassert(dep_si != nullptr);
for (AVD_SU_SI_REL *sisu = dep_si->list_of_sisu; sisu ; sisu =
sisu->si_next) {
@@ -2264,7 +2227,7 @@
bool all_assigned_active = true;
AVD_SPONS_SI_NODE *spons_si;
- TRACE_ENTER2("SI:%s",si->name.value);
+ TRACE_ENTER2("SI:%s",si->name.c_str());
if (si->spons_si_list == nullptr) {
goto done;
@@ -2300,15 +2263,15 @@
/* Update the si_dep_state for all dependents
* SIs of the sponsor SI.
*/
- TRACE("sponsor si:'%s', dep state:'%s'", si->name.value,
depstatename[si->si_dep_state]);
+ TRACE("sponsor si:'%s', dep state:'%s'", si->name.c_str(),
depstatename[si->si_dep_state]);
for (std::map<std::pair<std::string,std::string>,
AVD_SI_DEP*>::const_iterator it = sidep_db->begin();
it != sidep_db->end(); it++) {
const AVD_SI_DEP *sidep = it->second;
- if (m_CMP_HORDER_SANAMET(sidep->spons_si->name, si->name) != 0)
+ if (sidep->spons_si->name.compare(si->name) != 0)
continue;
- AVD_SI *dep_si = avd_si_get(&sidep->dep_name);
+ AVD_SI *dep_si = avd_si_get(sidep->dep_name);
osafassert(dep_si != nullptr);
/* update si_dep_state of dependent if its SG fsm is
@@ -2334,7 +2297,7 @@
{
bool all_sponsors_assgnd = false;
- TRACE_ENTER2("sponsor si:'%s'", si->name.value);
+ TRACE_ENTER2("sponsor si:'%s'", si->name.c_str());
/*Any dependent SI is never expcted in this state when screening is
going on.
In such situation do not update si_dep_state. It will be taken care
during failover*/
@@ -2403,7 +2366,7 @@
**/
void sidep_si_take_action(AVD_SI *si)
{
- TRACE_ENTER2("si:'%s', si_dep_state:'%s'",si->name.value,
depstatename[si->si_dep_state]);
+ TRACE_ENTER2("si:'%s', si_dep_state:'%s'",si->name.c_str(),
depstatename[si->si_dep_state]);
switch (si->si_dep_state) {
case AVD_SI_ASSIGNED:
@@ -2480,7 +2443,7 @@
**/
void avd_sidep_sg_take_action(AVD_SG *sg)
{
- TRACE_ENTER2("'%s'", sg->name.value);
+ TRACE_ENTER2("'%s'", sg->name.c_str());
for (const auto& si : sg->list_of_si) {
if ((si->spons_si_list != nullptr) || (si->num_dependents > 0))
@@ -2506,14 +2469,14 @@
AVD_SPONS_SI_NODE *temp_spons_list = nullptr;
bool all_spon_assigned = true;
- TRACE_ENTER2("dep si:'%s'", dep_si->name.value);
+ TRACE_ENTER2("dep si:'%s'", dep_si->name.c_str());
for (temp_spons_list = dep_si->spons_si_list; temp_spons_list !=
nullptr;
temp_spons_list = temp_spons_list->next) {
spons_si = temp_spons_list->si;
- TRACE("spons si:'%s'",spons_si->name.value);
+ TRACE("spons si:'%s'",spons_si->name.c_str());
- si_dep_rec = sidep_db_find(&spons_si->name, &dep_si->name);
+ si_dep_rec = sidep_db_find(spons_si->name, dep_si->name);
if (si_dep_rec == nullptr)
goto done;
@@ -2554,12 +2517,12 @@
* @param [in] @spons_si_name: Name of sponsor si
* @param [out] @depsi_list: list of dependent si
*/
-void get_dependent_si_list(const SaNameT &spons_si_name, std::list<AVD_SI*>&
depsi_list)
+void get_dependent_si_list(const std::string& spons_si_name,
std::list<AVD_SI*>& depsi_list)
{
std::map<std::pair<std::string,std::string>,
AVD_SI_DEP*>::const_iterator it;
for (it = sidep_db->begin(); it != sidep_db->end(); it++) {
const AVD_SI_DEP *sidep = it->second;
- if (m_CMP_HORDER_SANAMET(sidep->spons_si->name, spons_si_name)
!= 0)
+ if (sidep->spons_si->name.compare(spons_si_name) != 0)
continue;
depsi_list.push_back(sidep->dep_si);
}
@@ -2588,7 +2551,7 @@
osafassert(evt->rcv_evt == AVD_EVT_UNASSIGN_SI_DEP_STATE);
- dep_si = avd_si_get(&evt->info.tmr.dep_si_name);
+ dep_si = avd_si_get(evt->info.tmr.dep_si_name);
osafassert(dep_si != nullptr);
avd_sidep_si_dep_state_set(dep_si, AVD_SI_UNASSIGNING_DUE_TO_DEP);
@@ -2597,12 +2560,12 @@
stable, based on updated si_dep_state action is taken.
*/
if (dep_si->sg_of_si->sg_fsm_state != AVD_SG_FSM_STABLE) {
- TRACE("sg unstable, so defering sidep action on
si:'%s'",dep_si->name.value);
+ TRACE("sg unstable, so defering sidep action on
si:'%s'",dep_si->name.c_str());
goto done;
}
/* Process UNASSIGN evt */
- LOG_NO("Unassigning due to dep'%s'",dep_si->name.value);
+ LOG_NO("Unassigning due to dep'%s'",dep_si->name.c_str());
sidep_si_dep_start_unassign(cb, evt);
done:
diff --git a/osaf/services/saf/amf/amfd/siass.cc
b/osaf/services/saf/amf/amfd/siass.cc
--- a/osaf/services/saf/amf/amfd/siass.cc
+++ b/osaf/services/saf/amf/amfd/siass.cc
@@ -46,7 +46,7 @@
* @param su_dn
*/
static void avd_create_susi_in_imm(SaAmfHAStateT ha_state,
- const SaNameT *si_dn, const SaNameT *su_dn)
+ const std::string& si_dn, const std::string& su_dn)
{
SaNameT dn;
SaAmfHAReadinessStateT saAmfSISUHAReadinessState =
@@ -73,7 +73,8 @@
nullptr
};
- avsv_create_association_class_dn(su_dn, nullptr, "safSISU", &dn);
+ const SaNameTWrapper su(su_dn);
+ avsv_create_association_class_dn(su, nullptr, "safSISU", &dn);
avd_saImmOiRtObjectCreate("SaAmfSIAssignment", si_dn, attrValues);
}
@@ -82,12 +83,14 @@
* @param si_dn
* @param su_dn
*/
-static void avd_delete_siassignment_from_imm(const SaNameT *si_dn, const
SaNameT *su_dn)
+static void avd_delete_siassignment_from_imm(const std::string& si_dn, const
std::string& su_dn)
{
SaNameT dn;
- avsv_create_association_class_dn(su_dn, si_dn, "safSISU", &dn);
- avd_saImmOiRtObjectDelete(&dn);
+ const SaNameTWrapper si(si_dn);
+ const SaNameTWrapper su(su_dn);
+ avsv_create_association_class_dn(su, si, "safSISU", &dn);
+ avd_saImmOiRtObjectDelete(Amf::to_string(&dn));
}
/**
@@ -100,23 +103,26 @@
{
SaNameT dn;
AVD_COMP_CSI_REL *compcsi;
+ const SaNameTWrapper su_name(susi->su->name);
+ const SaNameTWrapper si_name(susi->si->name);
- avsv_create_association_class_dn(&susi->su->name, &susi->si->name,
"safSISU", &dn);
+ avsv_create_association_class_dn(su_name, si_name, "safSISU", &dn);
+
+ TRACE("HA State %s of %s for %s", avd_ha_state[ha_state],
+ susi->su->name.c_str(), susi->si->name.c_str());
+ saflog(LOG_NOTICE, amfSvcUsrName, "HA State %s of %s for %s",
+ avd_ha_state[ha_state], susi->su->name.c_str(),
susi->si->name.c_str());
- TRACE("HA State %s of %s for %s", avd_ha_state[ha_state],
- susi->su->name.value, susi->si->name.value);
- saflog(LOG_NOTICE, amfSvcUsrName, "HA State %s of %s for %s",
- avd_ha_state[ha_state], susi->su->name.value,
susi->si->name.value);
-
- avd_saImmOiRtObjectUpdate(&dn, "saAmfSISUHAState",
+ avd_saImmOiRtObjectUpdate(Amf::to_string(&dn), "saAmfSISUHAState",
SA_IMM_ATTR_SAUINT32T, &ha_state);
/* Update all CSI assignments */
for (compcsi = susi->list_of_csicomp; compcsi != nullptr; compcsi =
compcsi->susi_csicomp_next) {
+ const SaNameTWrapper csi_name(compcsi->csi->name);
avsv_create_association_class_dn(&compcsi->comp->comp_info.name,
- &compcsi->csi->name, "safCSIComp", &dn);
+ csi_name, "safCSIComp", &dn);
- avd_saImmOiRtObjectUpdate(&dn, "saAmfCSICompHAState",
+ avd_saImmOiRtObjectUpdate(Amf::to_string(&dn),
"saAmfCSICompHAState",
SA_IMM_ATTR_SAUINT32T, &ha_state);
}
}
@@ -145,7 +151,7 @@
AVD_SUS_PER_SI_RANK *su_rank_rec = 0, *i_su_rank_rec = 0;
uint32_t rank1, rank2;
- TRACE_ENTER2("%s %s state=%u", su->name.value, si->name.value, state);
+ TRACE_ENTER2("%s %s state=%u", su->name.c_str(), si->name.c_str(),
state);
/* Allocate a new block structure now
*/
@@ -165,9 +171,9 @@
for (std::map<std::pair<std::string, uint32_t>,
AVD_SUS_PER_SI_RANK*>::const_iterator
it = sirankedsu_db->begin(); it !=
sirankedsu_db->end(); it++) {
su_rank_rec = it->second;
- if (m_CMP_HORDER_SANAMET(su_rank_rec->indx.si_name, si->name)
!= 0)
+ if (su_rank_rec->indx.si_name.compare(si->name) != 0)
continue;
- curr_su = su_db->find(Amf::to_string(&su_rank_rec->su_name));
+ curr_su = su_db->find(su_rank_rec->su_name);
if (curr_su == su)
break;
}
@@ -186,9 +192,9 @@
for (std::map<std::pair<std::string, uint32_t>,
AVD_SUS_PER_SI_RANK*>::const_iterator
it = sirankedsu_db->begin(); it !=
sirankedsu_db->end(); it++) {
i_su_rank_rec = it->second;
- if
(m_CMP_HORDER_SANAMET(i_su_rank_rec->indx.si_name, si->name) != 0)
+ if
(i_su_rank_rec->indx.si_name.compare(si->name) != 0)
continue;
- curr_su =
su_db->find(Amf::to_string(&i_su_rank_rec->su_name));
+ curr_su = su_db->find(i_su_rank_rec->su_name);
if (curr_su == i_su_si->su)
break;
}
@@ -227,7 +233,7 @@
p_su_si = nullptr;
i_su_si = su->list_of_susi;
while ((i_su_si != nullptr) &&
- (m_CMP_HORDER_SANAMET(i_su_si->si->name, su_si->si->name) < 0)) {
+ i_su_si->si->name.compare(su_si->si->name) < 0) {
p_su_si = i_su_si;
i_su_si = i_su_si->su_next;
}
@@ -243,7 +249,7 @@
done:
//ADD susi in imm job queue at both standby and active amfd.
if (su_si != nullptr)
- avd_create_susi_in_imm(state, &si->name, &su->name);
+ avd_create_susi_in_imm(state, si->name, su->name);
if ((ckpt == false) && (su_si != nullptr)) {
avd_susi_update_assignment_counters(su_si, AVSV_SUSI_ACT_ASGN,
state, state);
avd_gen_su_ha_state_changed_ntf(cb, su_si);
@@ -270,22 +276,17 @@
*
**************************************************************************/
-AVD_SU_SI_REL *avd_su_susi_find(AVD_CL_CB *cb, AVD_SU *su, const SaNameT
*si_name)
+AVD_SU_SI_REL *avd_su_susi_find(AVD_CL_CB *cb, AVD_SU *su, const std::string&
si_name)
{
AVD_SU_SI_REL *su_si;
- SaNameT lsi_name;
su_si = su->list_of_susi;
- memset((char *)&lsi_name, '\0', sizeof(SaNameT));
- memcpy(lsi_name.value, si_name->value, si_name->length);
- lsi_name.length = si_name->length;
-
- while ((su_si != nullptr) && (m_CMP_HORDER_SANAMET(su_si->si->name,
lsi_name) < 0)) {
+ while ((su_si != nullptr) && (su_si->si->name.compare(si_name) < 0)) {
su_si = su_si->su_next;
}
- if ((su_si != nullptr) && (m_CMP_HORDER_SANAMET(su_si->si->name,
lsi_name) == 0)) {
+ if ((su_si != nullptr) && (su_si->si->name.compare(si_name) == 0)) {
return su_si;
}
@@ -309,11 +310,11 @@
*
**************************************************************************/
-AVD_SU_SI_REL *avd_susi_find(AVD_CL_CB *cb, const SaNameT *su_name, const
SaNameT *si_name)
+AVD_SU_SI_REL *avd_susi_find(AVD_CL_CB *cb, const std::string& su_name, const
std::string& si_name)
{
AVD_SU *su;
- if ((su = su_db->find(Amf::to_string(su_name))) == nullptr)
+ if ((su = su_db->find(su_name)) == nullptr)
return nullptr;
return avd_su_susi_find(cb, su, si_name);
@@ -341,7 +342,7 @@
AVD_SU_SI_REL *p_su_si, *p_si_su, *i_su_si;
AVD_SU *su = susi->su;
- TRACE_ENTER2("%s %s", susi->su->name.value, susi->si->name.value);
+ TRACE_ENTER2("%s %s", susi->su->name.c_str(), susi->si->name.c_str());
/* check the SU list to get the prev pointer */
i_su_si = susi->su->list_of_susi;
@@ -405,7 +406,7 @@
}
}
- avd_delete_siassignment_from_imm(&susi->si->name, &susi->su->name);
+ avd_delete_siassignment_from_imm(susi->si->name, susi->su->name);
susi->si = nullptr;
susi->su = nullptr;
@@ -421,16 +422,16 @@
SaAmfHAStateT old_state = susi->state;
osafassert(ha_state <= SA_AMF_HA_QUIESCING);
- TRACE_ENTER2("'%s' %s => %s", susi->si->name.value,
avd_ha_state[susi->state],
+ TRACE_ENTER2("'%s' %s => %s", susi->si->name.c_str(),
avd_ha_state[susi->state],
avd_ha_state[ha_state]);
- saflog(LOG_NOTICE, amfSvcUsrName, "%s HA State %s => %s",
susi->si->name.value,
+ saflog(LOG_NOTICE, amfSvcUsrName, "%s HA State %s => %s",
susi->si->name.c_str(),
avd_ha_state[susi->state], avd_ha_state[ha_state]);
susi->state = ha_state;
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, susi, AVSV_CKPT_AVD_SI_ASS);
/* alarm & notifications */
- avd_send_su_ha_state_chg_ntf(&susi->su->name, &susi->si->name,
old_state, susi->state);
+ avd_send_su_ha_state_chg_ntf(susi->su->name, susi->si->name, old_state,
susi->state);
}
/* This function serves as a wrapper. avd_susi_ha_state_set should be used for
state
@@ -441,13 +442,13 @@
{
uint32_t status = NCSCC_RC_FAILURE;
- TRACE_ENTER2("'%s' assigned to '%s' HA state '%s'",
susi->si->name.value,
- susi->su->name.value, avd_ha_state[susi->state]);
+ TRACE_ENTER2("'%s' assigned to '%s' HA state '%s'",
susi->si->name.c_str(),
+ susi->su->name.c_str(), avd_ha_state[susi->state]);
saflog(LOG_NOTICE, amfSvcUsrName, "%s assigned to %s HA State '%s'",
- susi->si->name.value, susi->su->name.value,
avd_ha_state[susi->state]);
+ susi->si->name.c_str(), susi->su->name.c_str(),
avd_ha_state[susi->state]);
/* alarm & notifications */
- avd_send_su_ha_state_chg_ntf(&susi->su->name, &susi->si->name,
static_cast<SaAmfHAStateT>(SA_FALSE), susi->state); /*old state not known*/
+ avd_send_su_ha_state_chg_ntf(susi->su->name, susi->si->name,
static_cast<SaAmfHAStateT>(SA_FALSE), susi->state); /*old state not known*/
TRACE_LEAVE();
return status;
@@ -483,8 +484,8 @@
curr_su_act_cnt++;
}
if (curr_su_act_cnt <
si->sg_of_si->saAmfSGMaxActiveSIsperSU) {
- TRACE("Found preferred sisu SU: '%s' SI:
'%s'",curr_sisu->su->name.value,
- curr_sisu->si->name.value);
+ TRACE("Found preferred sisu SU: '%s' SI:
'%s'",curr_sisu->su->name.c_str(),
+ curr_sisu->si->name.c_str());
break;
}
}
@@ -508,7 +509,7 @@
AVD_SU_SI_STATE old_fsm_state;
uint32_t rc = NCSCC_RC_SUCCESS;
- TRACE_ENTER2("SI '%s', SU '%s' ha_state:%d", susi->si->name.value,
susi->su->name.value, ha_state);
+ TRACE_ENTER2("SI '%s', SU '%s' ha_state:%d", susi->si->name.c_str(),
susi->su->name.c_str(), ha_state);
old_state = susi->state;
old_fsm_state = susi->fsm;
@@ -517,7 +518,7 @@
rc = avd_snd_susi_msg(avd_cb, susi->su, susi, AVSV_SUSI_ACT_MOD, false,
nullptr);
if (NCSCC_RC_SUCCESS != rc) {
LOG_NO("role modification msg send failed %s:%u: SU:%s SI:%s",
__FILE__,__LINE__,
- susi->su->name.value,susi->si->name.value);
+ susi->su->name.c_str(),susi->si->name.c_str());
susi->state = old_state;
susi->fsm = old_fsm_state;
goto done;
@@ -549,7 +550,7 @@
AVD_SU_SI_STATE old_fsm_state;
uint32_t rc = NCSCC_RC_SUCCESS;
- TRACE_ENTER2("SI '%s', SU '%s' ", susi->si->name.value,
susi->su->name.value);
+ TRACE_ENTER2("SI '%s', SU '%s' ", susi->si->name.c_str(),
susi->su->name.c_str());
old_fsm_state = susi->fsm;
susi->fsm = AVD_SU_SI_STATE_UNASGN;
@@ -557,7 +558,7 @@
avd_snd_susi_msg(avd_cb, susi->su, susi, AVSV_SUSI_ACT_DEL, false,
nullptr);
if (NCSCC_RC_SUCCESS != rc) {
LOG_NO("susi del msg snd failed %s:%u: SU:%s SI:%s",
__FILE__,__LINE__,
- susi->su->name.value,susi->si->name.value);
+ susi->su->name.c_str(),susi->si->name.c_str());
susi->fsm = old_fsm_state;
goto done;
}
@@ -590,7 +591,7 @@
AVD_SU *su = susi->su;
TRACE_ENTER2("SI:'%s', SU:'%s' action:%u current_ha_state:%u
new_ha_state:%u",
- susi->si->name.value, susi->su->name.value, action,
current_ha_state, new_ha_state);
+ susi->si->name.c_str(), susi->su->name.c_str(), action,
current_ha_state, new_ha_state);
switch (action) {
case AVSV_SUSI_ACT_ASGN:
@@ -660,7 +661,7 @@
{
uint32_t rc = NCSCC_RC_SUCCESS;
- TRACE_ENTER2(" '%s' '%s'",sisu->si->name.value, sisu->su->name.value);
+ TRACE_ENTER2(" '%s' '%s'",sisu->si->name.c_str(),
sisu->su->name.c_str());
if ((sisu->si->si_dep_state == AVD_SI_FAILOVER_UNDER_PROGRESS) ||
(sisu->si->si_dep_state == AVD_SI_READY_TO_UNASSIGN)) {
@@ -713,7 +714,7 @@
AVD_SU_SI_REL *a_susi;
AVD_SPONS_SI_NODE *spons_si_node;
- TRACE_ENTER2("'%s' '%s'", susi->si->name.value, susi->su->name.value);
+ TRACE_ENTER2("'%s' '%s'", susi->si->name.c_str(),
susi->su->name.c_str());
for (a_susi = susi->su->list_of_susi; a_susi; a_susi = a_susi->su_next)
{
if (a_susi->state == SA_AMF_HA_ACTIVE) {
@@ -728,7 +729,7 @@
}
}
done:
- TRACE_LEAVE2("next_susi: %s",a_susi ? a_susi->si->name.value : nullptr);
+ TRACE_LEAVE2("next_susi: %s",a_susi ? a_susi->si->name.c_str() :
nullptr);
return a_susi;
}
@@ -743,7 +744,7 @@
{
bool quiesc_role = true;
- TRACE_ENTER2("%s %s", susi->su->name.value, susi->si->name.value);
+ TRACE_ENTER2("%s %s", susi->su->name.c_str(), susi->si->name.c_str());
if (!susi->si->num_dependents) {
/* This SI doesnot have any dependents on it, so quiesced role
can be given */
@@ -753,10 +754,10 @@
for (std::map<std::pair<std::string,std::string>,
AVD_SI_DEP*>::const_iterator it = sidep_db->begin();
it != sidep_db->end(); it++) {
const AVD_SI_DEP *sidep = it->second;
- if (m_CMP_HORDER_SANAMET(sidep->spons_si->name,
susi->si->name) != 0)
+ if (sidep->spons_si->name.compare(susi->si->name) != 0)
continue;
- AVD_SI *dep_si = avd_si_get(&sidep->dep_name);
+ AVD_SI *dep_si = avd_si_get(sidep->dep_name);
osafassert(dep_si != nullptr);
for (AVD_SU_SI_REL *sisu = dep_si->list_of_sisu; sisu ;
sisu = sisu->si_next) {
------------------------------------------------------------------------------
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