Hi Rafael,
Reviewed and tested the patch.
Ack.
minor comments inline.
On 2017/02/06 08:27 PM, Rafael Odzakow wrote:
> src/smf/smfd/SmfImmOperation.cc | 22 +++++++++++++++++++++-
> src/smf/smfd/SmfUpgradeStep.cc | 23 +++++++++++++++++++++--
> 2 files changed, 42 insertions(+), 3 deletions(-)
>
>
> Create a campaign containing several single step procedures that install
> several bundles. If the procedures are on the same saSmfExecLevel the campaign
> will sometimes fail because of conflicting admin owner on IMM object.
>
> trace message:
> SmfImmCreateOperation::execute:saImmOmAdminOwnerSet failed SA_AIS_ERR_EXIST
>
> diff --git a/src/smf/smfd/SmfImmOperation.cc b/src/smf/smfd/SmfImmOperation.cc
> --- a/src/smf/smfd/SmfImmOperation.cc
> +++ b/src/smf/smfd/SmfImmOperation.cc
> @@ -34,6 +34,7 @@
> #include "imm/saf/saImm.h"
> #include "base/saf_error.h"
> #include "base/osaf_extended_name.h"
> +#include "base/osaf_time.h"
> #include "smf/smfd/smfd_long_dn.h"
>
> /* ========================================================================
> @@ -440,7 +441,26 @@ SmfImmCreateOperation::execute(SmfRollba
> const SaNameT *objectNames[2];
> objectNames[0] = &objectName;
> objectNames[1] = NULL;
> - result = immutil_saImmOmAdminOwnerSet(m_immOwnerHandle,
> objectNames, SA_IMM_ONE);
> +
> + // We are taking admin owner on the parent DN of this object.
> + // This can be conflicting with other threads which also want
> + // to create objects. Specifically SmfUpgradeStep takes admin
> + // owner when creating node groups. Retry if object has admin
> + // owner already.
> + int timeout_try_cnt = 6;
> + while (timeout_try_cnt > 0) {
> + TRACE("%s: calling adminOwnerSet", __FUNCTION__);
> + result =
> immutil_saImmOmAdminOwnerSet(m_immOwnerHandle,
> + objectNames,
> + SA_IMM_ONE);
> + if (result != SA_AIS_ERR_EXIST)
> + break;
> +
> + timeout_try_cnt--;
> + TRACE("%s: adminOwnerSet returned SA_AIS_ERR_EXIST,
> " +
The "+" at end of the line needs to be removed
> + "sleep 1 second and retry", __FUNCTION__);
> + osaf_nanosleep(&kOneSecond);
> + }
> if (result != SA_AIS_OK) {
>
> TRACE("SmfImmCreateOperation::execute:saImmOmAdminOwnerSet failed %s\n",
> saf_error(result));
> TRACE_LEAVE();
> diff --git a/src/smf/smfd/SmfUpgradeStep.cc b/src/smf/smfd/SmfUpgradeStep.cc
> --- a/src/smf/smfd/SmfUpgradeStep.cc
> +++ b/src/smf/smfd/SmfUpgradeStep.cc
> @@ -3172,8 +3172,27 @@ bool SmfAdminOperation::becomeAdminOwner
> SaNameT nodeGroupParentDn;
> saAisNameLend(m_nodeGroupParentDn.c_str(), &nodeGroupParentDn);
> const SaNameT *objectNames[2] = {&nodeGroupParentDn, NULL};
> - SaAisErrorT ais_rc = immutil_saImmOmAdminOwnerSet(m_ownerHandle,
> - objectNames, SA_IMM_SUBTREE);
> +
> + // We are taking admin owner on the parent DN of this object. This
> can
> + // be conflicting with other threads which also want to create
> objects.
> + // Specifically SmfImmOperation takes admin owner when creating IMM
> + // objects. Retry if object has admin owner already.
> + int timeout_try_cnt = 6;
> + SaAisErrorT ais_rc = SA_AIS_OK;
> + while (timeout_try_cnt > 0) {
> + TRACE("%s: calling adminOwnerSet", __FUNCTION__);
> + ais_rc = immutil_saImmOmAdminOwnerSet(m_ownerHandle,
> + objectNames,
> + SA_IMM_SUBTREE);
> + if (ais_rc != SA_AIS_ERR_EXIST)
> + break;
> +
> + timeout_try_cnt--;
> + TRACE("%s: adminOwnerSet returned SA_AIS_ERR_EXIST, " +
The "+" at end of the line needs to be removed
/Neel.
> + "sleep 1 second and retry", __FUNCTION__);
> + osaf_nanosleep(&kOneSecond);
> + }
> +
> bool rc = true;
> if (ais_rc != SA_AIS_OK) {
> LOG_NO("%s: saImmOmAdminOwnerSet owner name '%s' Fail '%s'",
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel