Hi Gary,
We need to do these changes in a separate thread (Refer #1607 and
#1609).
Thanks
-Nagu
> -----Original Message-----
> From: Gary Lee [mailto:[email protected]]
> Sent: 19 May 2016 07:05
> To: [email protected]; Nagendra Kumar;
> [email protected]; [email protected];
> [email protected]
> Cc: [email protected]
> Subject: [PATCH 1 of 1] amfnd: add preliminary support for BAD OM handles
> [#1833]
>
> osaf/services/saf/amf/amfnd/clm.cc | 4 +-
> osaf/services/saf/amf/amfnd/compdb.cc | 97 ++++++++++++++--------
> --
> 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, 176 insertions(+), 62 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
> @@ -126,8 +126,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;
> @@ -1121,10 +1121,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;
> }
>
> @@ -1327,10 +1327,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;
> }
>
> @@ -1827,37 +1827,50 @@ unsigned int avnd_comp_config_get_su(AVN
>
> TRACE_ENTER2("SU'%s'", su->name.value);
>
> - error = saImmOmInitialize(&immOmHandle, nullptr, &immVersion);
> - if (error != SA_AIS_OK) {
> - LOG_CR("saImmOmInitialize failed: %u", error);
> - rc = NCSCC_RC_OUT_OF_MEM;
> - goto done;
> + // this loop construct is to handle BAD_HANDLE from
> immutil_saImmOmSearchNext_2()
> + for (;;) {
> + error = saImmOmInitialize(&immOmHandle, nullptr,
> &immVersion);
> + if (error != SA_AIS_OK) {
> + LOG_CR("saImmOmInitialize failed: %u", error);
> + rc = NCSCC_RC_OUT_OF_MEM;
> + 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);
> @@ -1904,15 +1917,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
> @@ -244,9 +244,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);
> @@ -317,9 +317,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
> @@ -692,12 +692,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>("saAmfSutDefSUFail
> over"),
> 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, 1 };
> + 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;
> +}
------------------------------------------------------------------------------
Mobile security can be enabling, not merely restricting. Employees who
bring their own devices (BYOD) to work are irked by the imposition of MDM
restrictions. Mobile Device Manager Plus allows you to control only the
apps on BYO-devices by containerizing them, leaving personal data untouched!
https://ad.doubleclick.net/ddm/clk/304595813;131938128;j
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel