osaf/services/saf/smfsv/smfd/SmfUpgradeStep.cc | 46 +++++++++++++++++++------ osaf/services/saf/smfsv/smfd/SmfUpgradeStep.hh | 1 + 2 files changed, 36 insertions(+), 11 deletions(-)
Recreate handles and admin owner if creating a node group fail diff --git a/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.cc b/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.cc --- a/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.cc +++ b/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.cc @@ -2816,6 +2816,17 @@ SmfAdminOperation::SmfAdminOperation(std m_smfKeepDuState = true; } + // Create an instance unique name for a node group IMM object + // using an instance number. + m_instance_number = m_next_instance_number++; + m_instanceNodeGroupName = "safAmfNodeGroup=smfLockAdmNg"+ + std::to_string(m_instance_number); + m_admin_owner_name ="smfNgAdmOwnerName"; + TRACE("%s m_instanceNodeGroupName '%s'",__FUNCTION__, + m_instanceNodeGroupName.c_str()); + TRACE("%s m_NodeGroupAdminOwnerName '%s'", __FUNCTION__, + m_admin_owner_name.c_str()); + // Note: // If any of the following steps fails m_creation_fail is set to true // and an immediate return is done @@ -2835,12 +2846,6 @@ SmfAdminOperation::SmfAdminOperation(std m_creation_fail = true; return; } - - // Create an instance unique name for a node group IMM object using an - // instance number. - m_instance_number = m_next_instance_number++; - m_instanceNodeGroupName = "safAmfNodeGroup=smfLockAdmNg"+ - std::to_string(m_instance_number); } SmfAdminOperation::~SmfAdminOperation() @@ -3103,7 +3108,8 @@ bool SmfAdminOperation::initNodeGroupOm( timeout_try_cnt = 6; while (timeout_try_cnt > 0) { ais_rc = immutil_saImmOmAdminOwnerInitialize(m_omHandle, - const_cast<char*> ("smfSetAdminStateOwner"), + const_cast<char*> + (m_admin_owner_name.c_str()), SA_TRUE, &m_ownerHandle); if (ais_rc != SA_AIS_ERR_TIMEOUT) break; @@ -3162,7 +3168,8 @@ bool SmfAdminOperation::becomeAdminOwner objectNames, SA_IMM_SUBTREE); bool rc = true; if (ais_rc != SA_AIS_OK) { - LOG_NO("%s: saImmOmAdminOwnerSet Fail '%s'", __FUNCTION__, + LOG_NO("%s: saImmOmAdminOwnerSet owner name '%s' Fail '%s'", + __FUNCTION__, m_admin_owner_name.c_str(), saf_error(ais_rc)); } @@ -3470,7 +3477,9 @@ bool SmfAdminOperation::createNodeGroup( { TRACE_ENTER(); - TRACE("\t uniqueNodeName '%s'", m_instanceNodeGroupName.c_str()); + TRACE("\t unique Node name '%s'", m_instanceNodeGroupName.c_str()); + TRACE("\t unique Admin owner name '%s'", + m_admin_owner_name.c_str()); // ------------------------------------ // Attribute descriptor for the node name @@ -3556,7 +3565,7 @@ bool SmfAdminOperation::createNodeGroup( // Create the node group m_errno = SA_AIS_OK; bool method_rc = false; - const uint32_t MAX_NO_RETRIES = 2; + const uint32_t MAX_NO_RETRIES = 4; uint32_t retry_cnt = 0; while (++retry_cnt <= MAX_NO_RETRIES) { // Creating the node group object will fail if a previously @@ -3585,7 +3594,22 @@ bool SmfAdminOperation::createNodeGroup( break; } continue; - } else if (m_errno != SA_AIS_OK) { + } else if (m_errno == SA_AIS_ERR_BAD_HANDLE || + m_errno == SA_AIS_ERR_BAD_OPERATION) { + LOG_NO("%s: saImmOmCcbObjectCreate_2 Fail %s", + __FUNCTION__, saf_error(m_errno)); + finalizeNodeGroupOm(); + bool rc = initNodeGroupOm(); + if (rc == false) { + LOG_NO("%s: initNodeGroupOm() Fail", + __FUNCTION__); + method_rc = false; + break; + } + TRACE("\t Try again after %s", + saf_error(m_errno)); + continue; + } else if (m_errno != SA_AIS_OK) { LOG_NO("%s: saImmOmCcbObjectCreate_2() '%s' Fail %s", __FUNCTION__, nGnodeName, saf_error(m_errno)); method_rc = false; diff --git a/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.hh b/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.hh --- a/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.hh +++ b/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.hh @@ -907,6 +907,7 @@ class SmfAdminOperation { bool m_smfKeepDuState {false}; unsigned int m_instance_number {0}; std::string m_instanceNodeGroupName {""}; + std::string m_admin_owner_name {""}; DELETE_COPY_AND_MOVE_OPERATORS(SmfAdminOperation); }; ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today. http://sdm.link/xeonphi _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel