osaf/services/saf/amf/amfnd/clm.cc | 4 +-
osaf/services/saf/amf/amfnd/compdb.cc | 95 ++++++++++++++----------
osaf/services/saf/amf/amfnd/hcdb.cc | 8 +-
osaf/services/saf/amf/amfnd/include/avnd_util.h | 16 ++++
osaf/services/saf/amf/amfnd/main.cc | 6 +-
osaf/services/saf/amf/amfnd/sidb.cc | 10 +-
osaf/services/saf/amf/amfnd/su.cc | 12 +-
osaf/services/saf/amf/amfnd/util.cc | 85 ++++++++++++++++++++++
8 files changed, 175 insertions(+), 61 deletions(-)
Introduce wrapper functions for some immutil calls that are likely to return
BAD_HANDLE when there is MDS message loss detected. The wrapper functions
will reinitialize with IMM once, if IMMA returns BAD_HANDLE.
This is a temporary solution only and should be re-worked when #1609 is
completed.
diff --git a/osaf/services/saf/amf/amfnd/clm.cc
b/osaf/services/saf/amf/amfnd/clm.cc
--- a/osaf/services/saf/amf/amfnd/clm.cc
+++ b/osaf/services/saf/amf/amfnd/clm.cc
@@ -128,9 +128,9 @@ static void clm_to_amf_node(void)
goto done1;
}
- error = immutil_saImmOmSearchInitialize_2(immOmHandle, nullptr,
SA_IMM_SUBTREE,
+ error = amf_saImmOmSearchInitialize_2(immOmHandle, nullptr,
SA_IMM_SUBTREE,
SA_IMM_SEARCH_ONE_ATTR |
SA_IMM_SEARCH_GET_ALL_ATTR,
- &searchParam,nullptr, &searchHandle);
+ &searchParam, nullptr, searchHandle);
if (SA_AIS_OK != error) {
LOG_ER("No objects found");
diff --git a/osaf/services/saf/amf/amfnd/compdb.cc
b/osaf/services/saf/amf/amfnd/compdb.cc
--- a/osaf/services/saf/amf/amfnd/compdb.cc
+++ b/osaf/services/saf/amf/amfnd/compdb.cc
@@ -128,8 +128,8 @@ static SaAisErrorT avnd_compglobalattrs_
dn.length = strlen((char *)dn.value);
- immutil_saImmOmAccessorInitialize(immOmHandle, &accessorHandle);
- rc = immutil_saImmOmAccessorGet_2(accessorHandle, &dn, nullptr,
(SaImmAttrValuesT_2 ***)&attributes);
+ amf_saImmOmAccessorInitialize(immOmHandle, accessorHandle);
+ rc = amf_saImmOmAccessorGet_2(immOmHandle, accessorHandle, &dn,
nullptr, (SaImmAttrValuesT_2 ***)&attributes);
if (rc != SA_AIS_OK) {
LOG_ER("saImmOmAccessorGet_2 FAILED %u", rc);
goto done;
@@ -1130,10 +1130,10 @@ static amf_comp_type_t *avnd_comptype_cr
compt = new amf_comp_type_t();
- (void)immutil_saImmOmAccessorInitialize(immOmHandle, &accessorHandle);
+ (void)amf_saImmOmAccessorInitialize(immOmHandle, accessorHandle);
- if (immutil_saImmOmAccessorGet_2(accessorHandle, dn, nullptr,
(SaImmAttrValuesT_2 ***)&attributes) != SA_AIS_OK) {
- LOG_ER("saImmOmAccessorGet_2 FAILED for '%s'", dn->value);
+ if (amf_saImmOmAccessorGet_2(immOmHandle, accessorHandle, dn, nullptr,
(SaImmAttrValuesT_2 ***)&attributes) != SA_AIS_OK) {
+ LOG_ER("amf_saImmOmAccessorGet_2 FAILED for '%s'", dn->value);
goto done;
}
@@ -1336,10 +1336,10 @@ static int get_string_attr_from_imm(SaIm
SaAisErrorT error;
TRACE_ENTER();
- immutil_saImmOmAccessorInitialize(immOmHandle, &accessorHandle);
+ amf_saImmOmAccessorInitialize(immOmHandle, accessorHandle);
- if ((error = immutil_saImmOmAccessorGet_2(accessorHandle, dn,
attributeNames, (SaImmAttrValuesT_2 ***)&attributes)) != SA_AIS_OK) {
- TRACE("saImmOmAccessorGet FAILED %u for %s", error, dn->value);
+ if ((error = amf_saImmOmAccessorGet_2(immOmHandle, accessorHandle, dn,
attributeNames, (SaImmAttrValuesT_2 ***)&attributes)) != SA_AIS_OK) {
+ TRACE("amf_saImmOmAccessorGet FAILED %u for %s", error,
dn->value);
goto done;
}
@@ -1836,36 +1836,49 @@ unsigned int avnd_comp_config_get_su(AVN
TRACE_ENTER2("SU'%s'", su->name.value);
- error = saImmOmInitialize_cond(&immOmHandle, nullptr, &immVersion);
- if (error != SA_AIS_OK) {
- LOG_CR("saImmOmInitialize failed: %u", error);
- goto done;
+ // this loop construct is to handle BAD_HANDLE from
immutil_saImmOmSearchNext_2()
+ for (;;) {
+ error = saImmOmInitialize_cond(&immOmHandle, nullptr,
&immVersion);
+ if (error != SA_AIS_OK) {
+ LOG_CR("saImmOmInitialize failed: %u", error);
+ goto done;
+ }
+ searchParam.searchOneAttr.attrName =
const_cast<SaImmAttrNameT>("SaImmAttrClassName");
+ searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT;
+ searchParam.searchOneAttr.attrValue = &className;
+
+ if ((error = amf_saImmOmSearchInitialize_2(immOmHandle,
&su->name,
+ SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR |
SA_IMM_SEARCH_GET_CONFIG_ATTR,
+ &searchParam, nullptr, searchHandle)) != SA_AIS_OK) {
+
+ LOG_ER("amf_saImmOmSearchInitialize_2 failed: %u",
error);
+ goto done1;
+ }
+
+ while (error == SA_AIS_OK) {
+ error = immutil_saImmOmSearchNext_2(searchHandle,
&comp_name,
+ (SaImmAttrValuesT_2 ***)&attributes);
+
+ if (error != SA_AIS_OK) {
+ break;
+ }
+
+ TRACE_1("'%s'", comp_name.value);
+ if(0 == m_AVND_COMPDB_REC_GET(avnd_cb->compdb,
comp_name)) {
+ if ((comp = avnd_comp_create(&comp_name,
attributes, su)) == nullptr)
+ goto done2;
+
+ avnd_hc_config_get(comp);
+ }
+ }
+
+ if (error == SA_AIS_ERR_BAD_HANDLE) {
+ continue;
+ }
+
+ rc = NCSCC_RC_SUCCESS;
+ break;
}
- searchParam.searchOneAttr.attrName =
const_cast<SaImmAttrNameT>("SaImmAttrClassName");
- searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT;
- searchParam.searchOneAttr.attrValue = &className;
-
- if ((error = immutil_saImmOmSearchInitialize_2(immOmHandle, &su->name,
- SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR |
SA_IMM_SEARCH_GET_CONFIG_ATTR,
- &searchParam, nullptr, &searchHandle)) != SA_AIS_OK) {
-
- LOG_ER("saImmOmSearchInitialize_2 failed: %u", error);
- goto done1;
- }
-
- while (immutil_saImmOmSearchNext_2(searchHandle, &comp_name,
- (SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) {
-
- TRACE_1("'%s'", comp_name.value);
- if(0 == m_AVND_COMPDB_REC_GET(avnd_cb->compdb, comp_name)) {
- if ((comp = avnd_comp_create(&comp_name, attributes,
su)) == nullptr)
- goto done2;
-
- avnd_hc_config_get(comp);
- }
- }
-
- rc = NCSCC_RC_SUCCESS;
done2:
(void)immutil_saImmOmSearchFinalize(searchHandle);
@@ -1912,15 +1925,15 @@ int avnd_comp_config_reinit(AVND_COMP *c
LOG_CR("saImmOmInitialize FAILED for '%s'", comp->name.value);
goto done1;
}
- error = immutil_saImmOmAccessorInitialize(immOmHandle, &accessorHandle);
+ error = amf_saImmOmAccessorInitialize(immOmHandle, accessorHandle);
if (error != SA_AIS_OK) {
- LOG_CR("immutil_saImmOmAccessorInitialize FAILED for '%s'",
comp->name.value);
+ LOG_CR("amf_saImmOmAccessorInitialize FAILED for '%s'",
comp->name.value);
goto done2;
}
- if (immutil_saImmOmAccessorGet_2(accessorHandle, &comp->name, nullptr,
+ if (amf_saImmOmAccessorGet_2(immOmHandle, accessorHandle, &comp->name,
nullptr,
(SaImmAttrValuesT_2 ***)&attributes) != SA_AIS_OK) {
- LOG_ER("saImmOmAccessorGet_2 FAILED for '%s'",
comp->name.value);
+ LOG_ER("amf_saImmOmAccessorGet_2 FAILED for '%s'",
comp->name.value);
goto done3;
}
diff --git a/osaf/services/saf/amf/amfnd/hcdb.cc
b/osaf/services/saf/amf/amfnd/hcdb.cc
--- a/osaf/services/saf/amf/amfnd/hcdb.cc
+++ b/osaf/services/saf/amf/amfnd/hcdb.cc
@@ -259,9 +259,9 @@ SaAisErrorT avnd_hc_config_get(AVND_COMP
searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT;
searchParam.searchOneAttr.attrValue = &className;
- error = immutil_saImmOmSearchInitialize_2(immOmHandle, &comp_dn,
+ error = amf_saImmOmSearchInitialize_2(immOmHandle, &comp_dn,
SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR |
SA_IMM_SEARCH_GET_ALL_ATTR,
- &searchParam, nullptr, &searchHandle);
+ &searchParam, nullptr, searchHandle);
if (SA_AIS_OK != error) {
LOG_ER("saImmOmSearchInitialize_2 failed: %u", error);
@@ -334,9 +334,9 @@ SaAisErrorT avnd_hctype_config_get(SaImm
searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT;
searchParam.searchOneAttr.attrValue = &className;
- error = immutil_saImmOmSearchInitialize_2(immOmHandle, comptype_dn,
+ error = amf_saImmOmSearchInitialize_2(immOmHandle, comptype_dn,
SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR |
SA_IMM_SEARCH_GET_ALL_ATTR,
- &searchParam, nullptr, &searchHandle);
+ &searchParam, nullptr, searchHandle);
if (SA_AIS_OK != error) {
LOG_ER("saImmOmSearchInitialize_2 failed: %u", error);
diff --git a/osaf/services/saf/amf/amfnd/include/avnd_util.h
b/osaf/services/saf/amf/amfnd/include/avnd_util.h
--- a/osaf/services/saf/amf/amfnd/include/avnd_util.h
+++ b/osaf/services/saf/amf/amfnd/include/avnd_util.h
@@ -61,4 +61,20 @@ void free_n2d_nd_csicomp_state_info(AVSV
void free_n2d_nd_sisu_state_info(AVSV_DND_MSG *msg);
SaAisErrorT saImmOmInitialize_cond(SaImmHandleT *immHandle,
const SaImmCallbacksT *immCallbacks, SaVersionT *version);
+SaAisErrorT amf_saImmOmAccessorInitialize(SaImmHandleT& immHandle,
+ SaImmAccessorHandleT& accessorHandle);
+SaAisErrorT amf_saImmOmSearchInitialize_2(SaImmHandleT& immHandle,
+ const SaNameT * rootName,
+ SaImmScopeT scope,
+ SaImmSearchOptionsT searchOptions,
+ const SaImmSearchParametersT_2 *
+ searchParam,
+ const SaImmAttrNameT *
+ attributeNames,
+ SaImmSearchHandleT& searchHandle);
+SaAisErrorT amf_saImmOmAccessorGet_2(SaImmHandleT& immHandle,
+ SaImmAccessorHandleT& accessorHandle,
+ const SaNameT * objectName,
+ const SaImmAttrNameT * attributeNames,
+ SaImmAttrValuesT_2 *** attributes);
#endif /* !AVND_UTIL_H */
diff --git a/osaf/services/saf/amf/amfnd/main.cc
b/osaf/services/saf/amf/amfnd/main.cc
--- a/osaf/services/saf/amf/amfnd/main.cc
+++ b/osaf/services/saf/amf/amfnd/main.cc
@@ -695,12 +695,12 @@ static void hydra_config_get(AVND_CB *cb
dn.length = strlen((char *)dn.value);
immutil_saImmOmInitialize(&immOmHandle, nullptr, &immVersion);
- immutil_saImmOmAccessorInitialize(immOmHandle, &accessorHandle);
- rc = immutil_saImmOmAccessorGet_2(accessorHandle, &dn, attributeNames,
+ amf_saImmOmAccessorInitialize(immOmHandle, accessorHandle);
+ rc = amf_saImmOmAccessorGet_2(immOmHandle, accessorHandle, &dn,
attributeNames,
(SaImmAttrValuesT_2 ***)&attributes);
if (rc != SA_AIS_OK) {
- LOG_WA("saImmOmAccessorGet_2 FAILED %u for %s", rc, dn.value);
+ LOG_WA("amf_saImmOmAccessorGet_2 FAILED %u for %s", rc,
dn.value);
goto done;
}
diff --git a/osaf/services/saf/amf/amfnd/sidb.cc
b/osaf/services/saf/amf/amfnd/sidb.cc
--- a/osaf/services/saf/amf/amfnd/sidb.cc
+++ b/osaf/services/saf/amf/amfnd/sidb.cc
@@ -251,9 +251,9 @@ static void get_cstype(SaImmHandleT immO
// TODO remove, just for test
LOG_NO("get_cstype: csi = '%s'", csi_name->value);
- if ((error = immutil_saImmOmAccessorGet_2(accessorHandle, csi_name,
+ if ((error = amf_saImmOmAccessorGet_2(immOmHandle, accessorHandle,
csi_name,
attributeNames, (SaImmAttrValuesT_2 ***)&attributes))
!= SA_AIS_OK) {
- LOG_ER("saImmOmAccessorGet FAILED %u for %s", error,
csi_name->value);
+ LOG_ER("amf_saImmOmAccessorGet FAILED %u for %s", error,
csi_name->value);
osafassert(0);
}
@@ -287,14 +287,14 @@ static SaAmfCompCapabilityModelT get_com
LOG_CR("saImmOmInitialize failed: %u", error);
goto done1;
}
- immutil_saImmOmAccessorInitialize(immOmHandle, &accessorHandle);
+ amf_saImmOmAccessorInitialize(immOmHandle, accessorHandle);
get_cstype(immOmHandle, accessorHandle, csi_name, &cs_type);
avsv_create_association_class_dn(&cs_type, comp_type,
"safSupportedCsType", &dn);
- if ((error = immutil_saImmOmAccessorGet_2(accessorHandle, &dn,
attributeNames,
+ if ((error = amf_saImmOmAccessorGet_2(immOmHandle, accessorHandle, &dn,
attributeNames,
(SaImmAttrValuesT_2 ***)&attributes)) != SA_AIS_OK) {
- LOG_ER("saImmOmAccessorGet FAILED %u for'%s'", error, dn.value);
+ LOG_ER("amf_saImmOmAccessorGet FAILED %u for'%s'", error,
dn.value);
goto done;
}
diff --git a/osaf/services/saf/amf/amfnd/su.cc
b/osaf/services/saf/amf/amfnd/su.cc
--- a/osaf/services/saf/amf/amfnd/su.cc
+++ b/osaf/services/saf/amf/amfnd/su.cc
@@ -68,13 +68,13 @@ static bool get_su_failover(const SaName
LOG_CR("saImmOmInitialize failed: %u", error);
goto done1;
}
- immutil_saImmOmAccessorInitialize(immOmHandle, &accessorHandle);
+ amf_saImmOmAccessorInitialize(immOmHandle, accessorHandle);
/* Use an attribute name list to avoid reading runtime attributes which
* causes callbacks executed in AMF director. */
- if (immutil_saImmOmAccessorGet_2(accessorHandle, name, attributeNames,
+ if (amf_saImmOmAccessorGet_2(immOmHandle, accessorHandle, name,
attributeNames,
(SaImmAttrValuesT_2 ***)&attributes) != SA_AIS_OK) {
- LOG_ER("saImmOmAccessorGet_2 FAILED for '%s'", name->value);
+ LOG_ER("amf_saImmOmAccessorGet_2 FAILED for '%s'", name->value);
goto done;
}
@@ -86,7 +86,7 @@ static bool get_su_failover(const SaName
attributeNames[0] =
const_cast<SaImmAttrNameT>("saAmfSutDefSUFailover");
attributeNames[1] = nullptr;
- if (immutil_saImmOmAccessorGet_2(accessorHandle,
&sutype, nullptr,
+ if (amf_saImmOmAccessorGet_2(immOmHandle,
accessorHandle, &sutype, nullptr,
(SaImmAttrValuesT_2 ***)&attributes) ==
SA_AIS_OK) {
immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSutDefSUFailover"),
attributes, 0, &sufailover);
@@ -332,9 +332,9 @@ static uint32_t get_sirank(const SaNameT
LOG_CR("saImmOmInitialize failed: %u", error);
goto done;
}
- immutil_saImmOmAccessorInitialize(immOmHandle, &accessorHandle);
+ amf_saImmOmAccessorInitialize(immOmHandle, accessorHandle);
- osafassert((error = immutil_saImmOmAccessorGet_2(accessorHandle, dn,
+ osafassert((error = amf_saImmOmAccessorGet_2(immOmHandle,
accessorHandle, dn,
attributeNames, (SaImmAttrValuesT_2 ***)&attributes)) ==
SA_AIS_OK);
osafassert((error = immutil_getAttr(attributeNames[0], attributes, 0,
&rank)) == SA_AIS_OK);
diff --git a/osaf/services/saf/amf/amfnd/util.cc
b/osaf/services/saf/amf/amfnd/util.cc
--- a/osaf/services/saf/amf/amfnd/util.cc
+++ b/osaf/services/saf/amf/amfnd/util.cc
@@ -818,3 +818,88 @@ SaAisErrorT saImmOmInitialize_cond(SaImm
// cause the watchdog to kill AMFND.
return saImmOmInitialize(immHandle, immCallbacks, version);
}
+
+SaAisErrorT amf_saImmOmInitialize(SaImmHandleT& immHandle)
+{
+ SaVersionT immVersion = { 'A', 2, 11 };
+ return saImmOmInitialize_cond(&immHandle, nullptr, &immVersion);
+}
+
+SaAisErrorT amf_saImmOmAccessorInitialize(SaImmHandleT& immHandle,
+ SaImmAccessorHandleT& accessorHandle)
+{
+ // note: this will handle SA_AIS_ERR_BAD_HANDLE just once
+ SaAisErrorT rc = immutil_saImmOmAccessorInitialize(immHandle,
&accessorHandle);
+ if (rc == SA_AIS_ERR_BAD_HANDLE) {
+ rc = amf_saImmOmInitialize(immHandle);
+
+ // re-attempt immutil_saImmOmAccessorInitialize once more
+ if (rc == SA_AIS_OK) {
+ rc = immutil_saImmOmAccessorInitialize(immHandle,
&accessorHandle);
+ }
+ }
+
+ return rc;
+}
+
+SaAisErrorT amf_saImmOmSearchInitialize_2(SaImmHandleT& immHandle,
+ const SaNameT * rootName,
+ SaImmScopeT scope,
+ SaImmSearchOptionsT searchOptions,
+ const SaImmSearchParametersT_2 *
+ searchParam,
+ const SaImmAttrNameT *
+ attributeNames,
+ SaImmSearchHandleT& searchHandle)
+{
+ // note: this will handle SA_AIS_ERR_BAD_HANDLE just once
+ SaAisErrorT rc = immutil_saImmOmSearchInitialize_2(immHandle,
+ rootName,
+ scope,
+ searchOptions,
+ searchParam,
+ attributeNames,
+ &searchHandle);
+
+ if (rc == SA_AIS_ERR_BAD_HANDLE) {
+ rc = amf_saImmOmInitialize(immHandle);
+
+ // re-attempt immutil_saImmOmSearchInitialize_2 once more
+ if (rc == SA_AIS_OK) {
+ rc = immutil_saImmOmSearchInitialize_2(immHandle,
+ rootName,
+ scope,
+ searchOptions,
+ searchParam,
+ attributeNames,
+ &searchHandle);
+ }
+ }
+ return rc;
+}
+
+SaAisErrorT amf_saImmOmAccessorGet_2(SaImmHandleT& immHandle,
+ SaImmAccessorHandleT& accessorHandle,
+ const SaNameT * objectName,
+ const SaImmAttrNameT * attributeNames,
+ SaImmAttrValuesT_2 *** attributes)
+{
+ // note: this will handle SA_AIS_ERR_BAD_HANDLE just once
+ SaAisErrorT rc = immutil_saImmOmAccessorGet_2(accessorHandle,
+ objectName, attributeNames, attributes);
+
+ if (rc == SA_AIS_ERR_BAD_HANDLE) {
+ rc = amf_saImmOmInitialize(immHandle);
+
+ if (rc == SA_AIS_OK) {
+ rc = amf_saImmOmAccessorInitialize(immHandle,
accessorHandle);
+ }
+
+ if (rc == SA_AIS_OK) {
+ rc = immutil_saImmOmAccessorGet_2(accessorHandle,
+ objectName, attributeNames, attributes);
+ }
+ }
+
+ return rc;
+}
------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are
consuming the most bandwidth. Provides multi-vendor support for NetFlow,
J-Flow, sFlow and other flows. Make informed decisions using capacity planning
reports.http://sdm.link/zohodev2dev
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel