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