Hi Lennart,

Reviewed the patch.
Ack.

/Neel.

On 2016/11/11 09:27 PM, Lennart Lund wrote:
> Hi Neel,
>
> "What is the reason for retrying fro BAD_OPERATION?"
> In order to create a Node Group several handles has to be created. A Failed 
> handle will result in return code BAD_HANDLE
> It is also needed to become admin owner of node group parent. It is also 
> possible that we still have a valid handle but not a valid admin owner. This 
> will result in return code BAD_OPERATION
>
> Thanks
> Lennart
>
>
>> -----Original Message-----
>> From: Neelakanta Reddy [mailto:reddy.neelaka...@oracle.com]
>> Sent: den 11 november 2016 06:07
>> To: Lennart Lund <lennart.l...@ericsson.com>; Rafael Odzakow
>> <rafael.odza...@ericsson.com>
>> Cc: opensaf-devel@lists.sourceforge.net
>> Subject: Re: [PATCH 1 of 1] smf: Fails to create a node group, admin
>> owner/handle is lost [#2153]
>>
>> Hi Lennart,
>>
>> comments inline
>>
>> On 2016/11/07 05:42 PM, Lennart Lund wrote:
>>>    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) {
>> What is the reason for retrying fro BAD_OPERATION?
>>
>> Thanks,
>> Neel.
>>
>>> +                        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

Reply via email to