Hi Neel

In SMF the value of long dn attribute is cached and an applier is used to 
handle updates. I am creating a fix for the applier that will lock reading of 
this cached value when getting the completed callback (a change is most likely 
going to happen) and  updating of the cached variable and unlock will be done 
in the apply callback (if abort only unlock will be done). This is maybe not a 
perfect solution but it should give less timing dependency.  The fix is mostly 
done but I need to do some more testing to see if it actually is useful. I will 
send you this fix as a patch to look at and add to your IMM version upgrade 
fix. Of course it is still interesting to know what the difference is between 
IMM version .16 and .17

Thanks
Lennart

> -----Original Message-----
> From: Neelakanta Reddy [mailto:[email protected]]
> Sent: den 26 april 2017 08:49
> To: Lennart Lund <[email protected]>; Rafael Odzakow
> <[email protected]>
> Cc: [email protected]
> Subject: Re: [PATCH 1/1] smf: updated the imm API vesrion to latest
> supported [#2431]
> 
> Hi Lennart,
> 
> The problem is happening when the IMM OI version is greater than A.2.16.
> I tested with A.2.16 its working fine.
> 
> Test with A.2.16 and let me know the result.
> If the tests are passing the IMM version for
> src/smf/smfd/SmfImmApplierHdl.h will be changed to A.2.16 before pushing
> the code.
> 
> Parallely, I will debug why it is failing for version greater than A.2.16.
> 
> Thanks,
> Neel.
> 
> On 2017/04/24 06:31 PM, Lennart Lund wrote:
> > Hi Neel,
> >
> > I have an idea how to fix the problem (2.).
> > I will create an addition to your patch and test if it solves the problem. 
> > I will
> send it to you if it works with our test
> >
> > /Lennart
> >
> >> -----Original Message-----
> >> From: Neelakanta Reddy [mailto:[email protected]]
> >> Sent: den 24 april 2017 10:20
> >> To: Lennart Lund <[email protected]>; Rafael Odzakow
> >> <[email protected]>
> >> Cc: [email protected]
> >> Subject: Re: [PATCH 1/1] smf: updated the imm API vesrion to latest
> >> supported [#2431]
> >>
> >> Hi Lennart,
> >>
> >> comments inline.
> >>
> >> On 2017/04/24 01:17 PM, Lennart Lund wrote:
> >>> Hi Neel
> >>>
> >>> I have found two things:
> >>> 1.
> >>> You have changed SMF to use IMM minor version 17 but the IMM PR
> >> document says that version 18 is the latest. Also the ticket says that SMF
> shall
> >> be upgraded to use version 18.
> >> The latest A.2.18 is for CLM integration, with IMM( as CLM Integration
> >> is not happened in OpenSAF Fully).
> >> so, used A,2,17 and will change to A.2.17 in ticket description.
> >>> 2.
> >>> I have a test that during campaign init state changes "longDnsAllowed"
> >> setting to ON and then creates an object with a long name. With this
> patch
> >> applied this is no longer working. SMF uses an IMM Applier to surveil the
> >> "longDnsAllowed" attribute. With the patch applied it seems as if it takes
> >> longer time for IMM to activate the applier callback that makes SMF
> aware of
> >> that the setting has changed resulting in a "too long name" fail when SMF
> >> tries to create the object. I will do some more investigations
> >> changing IMM version to A.2.17 should not cause any delays, I will also
> >> test the longdn related cases.
> >>
> >> Thanks,
> >> Neel.
> >>> Thanks
> >>> Lennart
> >>>
> >>>> -----Original Message-----
> >>>> From: Neelakanta Reddy [mailto:[email protected]]
> >>>> Sent: den 20 april 2017 12:59
> >>>> To: Rafael Odzakow <[email protected]>; Lennart Lund
> >>>> <[email protected]>
> >>>> Cc: [email protected]; Neelakanta Reddy
> >>>> <[email protected]>
> >>>> Subject: [PATCH 1/1] smf: updated the imm API vesrion to latest
> >> supported
> >>>> [#2431]
> >>>>
> >>>> ---
> >>>>    src/smf/smfd/SmfCampaignThread.cc  |  2 +-
> >>>>    src/smf/smfd/SmfExecControlHdl.h   |  2 +-
> >>>>    src/smf/smfd/SmfImmApplierHdl.h    |  2 +-
> >>>>    src/smf/smfd/SmfImmOperation.cc    | 15 +++++++++------
> >>>>    src/smf/smfd/SmfProcedureThread.cc |  2 +-
> >>>>    src/smf/smfd/SmfUpgradeCampaign.cc |  2 ++
> >>>>    src/smf/smfd/SmfUpgradeStep.h      |  2 +-
> >>>>    src/smf/smfd/SmfUtils.cc           |  7 ++++---
> >>>>    src/smf/smfd/smfd_campaign_oi.cc   |  2 +-
> >>>>    src/smf/smfd/smfd_main.cc          |  2 +-
> >>>>    10 files changed, 22 insertions(+), 16 deletions(-)
> >>>>
> >>>> diff --git a/src/smf/smfd/SmfCampaignThread.cc
> >>>> b/src/smf/smfd/SmfCampaignThread.cc
> >>>> index 413beb0..8f3d257 100644
> >>>> --- a/src/smf/smfd/SmfCampaignThread.cc
> >>>> +++ b/src/smf/smfd/SmfCampaignThread.cc
> >>>> @@ -521,7 +521,7 @@ SaAisErrorT
> >>>> SmfCampaignThread::createImmHandle(SmfCampaign *i_campaign) {
> >>>>      TRACE_ENTER();
> >>>>      SaAisErrorT rc = SA_AIS_OK;
> >>>>      int existCnt = 0;
> >>>> -  SaVersionT immVersion = {'A', 2, 1};
> >>>> +  SaVersionT immVersion = {'A', 2, 17};
> >>>>      SmfImmUtils immutil;
> >>>>      SaImmAttrValuesT_2 **attributes;
> >>>>      const char *campOiName = NULL;
> >>>> diff --git a/src/smf/smfd/SmfExecControlHdl.h
> >>>> b/src/smf/smfd/SmfExecControlHdl.h
> >>>> index 3c3e8bc..8ba30a4 100644
> >>>> --- a/src/smf/smfd/SmfExecControlHdl.h
> >>>> +++ b/src/smf/smfd/SmfExecControlHdl.h
> >>>> @@ -108,7 +108,7 @@ class SmfExecControlObjHandler {
> >>>>      SaImmAttrValuesT_2 *m_nodesForSingleStep_ad;
> >>>>
> >>>>      // For storing IMM handles
> >>>> -  const SaVersionT m_immVersion{'A', 2, 1};
> >>>> +  const SaVersionT m_immVersion{'A', 2, 17};
> >>>>      SaImmHandleT m_omHandle;
> >>>>      SaImmAdminOwnerHandleT m_ownerHandle;
> >>>>      SaImmCcbHandleT m_ccbHandle;
> >>>> diff --git a/src/smf/smfd/SmfImmApplierHdl.h
> >>>> b/src/smf/smfd/SmfImmApplierHdl.h
> >>>> index 68ffa1c..7bd037c 100644
> >>>> --- a/src/smf/smfd/SmfImmApplierHdl.h
> >>>> +++ b/src/smf/smfd/SmfImmApplierHdl.h
> >>>> @@ -98,7 +98,7 @@ class SmfImmApplierHdl {
> >>>>      ExecuteImmCallbackReply ExecuteImmCallback(void);
> >>>>
> >>>>     private:
> >>>> -  const SaVersionT kImmVersion = {'A', 2, 11};
> >>>> +  const SaVersionT kImmVersion = {'A', 2, 17};
> >>>>      static std::atomic<unsigned int> instance_number_;
> >>>>      bool isCreated_;
> >>>>      std::string applier_name_;
> >>>> diff --git a/src/smf/smfd/SmfImmOperation.cc
> >>>> b/src/smf/smfd/SmfImmOperation.cc
> >>>> index 1dd44df..445455f 100644
> >>>> --- a/src/smf/smfd/SmfImmOperation.cc
> >>>> +++ b/src/smf/smfd/SmfImmOperation.cc
> >>>> @@ -414,8 +414,9 @@ SaAisErrorT
> >>>> SmfImmCreateOperation::execute(SmfRollbackData *o_rollbackData) {
> >>>>          m_ccbHandle, (SaImmClassNameT)className, &objectName,
> >>>>          (const SaImmAttrValuesT_2 **)m_immAttrValues);
> >>>>      if (result != SA_AIS_OK && result ==
> SA_AIS_ERR_FAILED_OPERATION)
> >> {
> >>>> -    result = saImmOmCcbGetErrorStrings(m_ccbHandle, &errStrings);
> >>>> -    if (errStrings) {
> >>>> +    SaAisErrorT result1 = SA_AIS_OK;
> >>>> +    result1 = saImmOmCcbGetErrorStrings(m_ccbHandle, &errStrings);
> >>>> +    if (result1 == SA_AIS_OK && errStrings) {
> >>>>          TRACE("Received error string is %s", errStrings[0]);
> >>>>          char *type = NULL;
> >>>>          type = strstr(errStrings[0], "IMM: Resource abort: ");
> >>>> @@ -651,8 +652,9 @@ SaAisErrorT
> >>>> SmfImmDeleteOperation::execute(SmfRollbackData *o_rollbackData) {
> >>>>      const SaStringT *errStrings = NULL;
> >>>>      result = immutil_saImmOmCcbObjectDelete(m_ccbHandle,
> >> &objectName);
> >>>>      if (result != SA_AIS_OK && result ==
> SA_AIS_ERR_FAILED_OPERATION)
> >> {
> >>>> -    result = saImmOmCcbGetErrorStrings(m_ccbHandle, &errStrings);
> >>>> -    if (errStrings) {
> >>>> +    SaAisErrorT result1 = SA_AIS_OK;
> >>>> +    result1 = saImmOmCcbGetErrorStrings(m_ccbHandle, &errStrings);
> >>>> +    if (result1 == SA_AIS_OK && errStrings) {
> >>>>          TRACE("Received error string is %s", errStrings[0]);
> >>>>          char *type = NULL;
> >>>>          type = strstr(errStrings[0], "IMM: Resource abort: ");
> >>>> @@ -1030,8 +1032,9 @@ SaAisErrorT
> >>>> SmfImmModifyOperation::execute(SmfRollbackData *o_rollbackData)
> {
> >>>>          m_ccbHandle, &objectName,
> >>>>          (const SaImmAttrModificationT_2 **)m_immAttrMods);
> >>>>      if (result != SA_AIS_OK && result ==
> SA_AIS_ERR_FAILED_OPERATION)
> >> {
> >>>> -    result = saImmOmCcbGetErrorStrings(m_ccbHandle, &errStrings);
> >>>> -    if (errStrings) {
> >>>> +    SaAisErrorT result1 = SA_AIS_OK;
> >>>> +    result1 = saImmOmCcbGetErrorStrings(m_ccbHandle, &errStrings);
> >>>> +    if (result1 == SA_AIS_OK && errStrings) {
> >>>>          TRACE("Received error string is %s", errStrings[0]);
> >>>>          char *type = strstr(errStrings[0], "IMM: Resource abort: ");
> >>>>          if (type != NULL) {
> >>>> diff --git a/src/smf/smfd/SmfProcedureThread.cc
> >>>> b/src/smf/smfd/SmfProcedureThread.cc
> >>>> index 269820b..023dc8e 100644
> >>>> --- a/src/smf/smfd/SmfProcedureThread.cc
> >>>> +++ b/src/smf/smfd/SmfProcedureThread.cc
> >>>> @@ -179,7 +179,7 @@ SaAisErrorT
> >>>> SmfProcedureThread::createImmHandle(void) {
> >>>>      TRACE_ENTER();
> >>>>      SaAisErrorT rc = SA_AIS_OK;
> >>>>      int existCnt = 0;
> >>>> -  SaVersionT immVersion = {'A', 2, 1};
> >>>> +  SaVersionT immVersion = {'A', 2, 17};
> >>>>
> >>>>      // DN of the procedure
> >>>>      const char *procName = m_procedure->getProcName().c_str();
> >>>> diff --git a/src/smf/smfd/SmfUpgradeCampaign.cc
> >>>> b/src/smf/smfd/SmfUpgradeCampaign.cc
> >>>> index 396bf10..aa03eba 100644
> >>>> --- a/src/smf/smfd/SmfUpgradeCampaign.cc
> >>>> +++ b/src/smf/smfd/SmfUpgradeCampaign.cc
> >>>> @@ -1040,6 +1040,8 @@ void
> >>>> SmfUpgradeCampaign::resetMaintenanceState() {
> >>>>           * with Resource abort in error string.
> >>>>           */
> >>>>          continue;
> >>>> +    } else {
> >>>> +       break;
> >>>>        }
> >>>>      }
> >>>>      if (rc != SA_AIS_OK) {
> >>>> diff --git a/src/smf/smfd/SmfUpgradeStep.h
> >>>> b/src/smf/smfd/SmfUpgradeStep.h
> >>>> index 4e741b7..72e5d97 100644
> >>>> --- a/src/smf/smfd/SmfUpgradeStep.h
> >>>> +++ b/src/smf/smfd/SmfUpgradeStep.h
> >>>> @@ -895,7 +895,7 @@ class SmfAdminOperation {
> >>>>      std::list<unitNameAndState> m_suList;
> >>>>      std::list<unitNameAndState> m_nodeList;
> >>>>
> >>>> -  const SaVersionT m_immVersion{'A', 2, 1};
> >>>> +  const SaVersionT m_immVersion{'A', 2, 17};
> >>>>
> >>>>      std::string m_nodeGroupParentDn;
> >>>>
> >>>> diff --git a/src/smf/smfd/SmfUtils.cc b/src/smf/smfd/SmfUtils.cc
> >>>> index 7277fde..d2b4734 100644
> >>>> --- a/src/smf/smfd/SmfUtils.cc
> >>>> +++ b/src/smf/smfd/SmfUtils.cc
> >>>> @@ -58,7 +58,7 @@
> >>>>     *
> >>>>
> >>
> ==========================================================
> >>>> ==============
> >>>>     */
> >>>>
> >>>> -SaVersionT SmfImmUtils::s_immVersion = {'A', 2, 1};
> >>>> +SaVersionT SmfImmUtils::s_immVersion = {'A', 2, 17};
> >>>>
> >>>>    /*
> >>>>
> >>
> ==========================================================
> >>>> ==============
> >>>>     *   FUNCTION PROTOTYPES
> >>>> @@ -703,8 +703,9 @@ SaAisErrorT SmfImmUtils::doImmOperations(
> >>>>      /* Apply the CCB */
> >>>>      result = immutil_saImmOmCcbApply(immCcbHandle);
> >>>>      if (result != SA_AIS_OK && result ==
> SA_AIS_ERR_FAILED_OPERATION)
> >> {
> >>>> -    result = saImmOmCcbGetErrorStrings(immCcbHandle, &errStrings);
> >>>> -    if (errStrings) {
> >>>> +    SaAisErrorT result1 = SA_AIS_OK;
> >>>> +    result1 = saImmOmCcbGetErrorStrings(immCcbHandle,
> &errStrings);
> >>>> +    if (result1 == SA_AIS_OK && errStrings) {
> >>>>          TRACE("Received error string is %s", errStrings[0]);
> >>>>          char *type = NULL;
> >>>>          type = strstr(errStrings[0], "IMM: Resource abort: ");
> >>>> diff --git a/src/smf/smfd/smfd_campaign_oi.cc
> >>>> b/src/smf/smfd/smfd_campaign_oi.cc
> >>>> index f37f8ca..e559730 100644
> >>>> --- a/src/smf/smfd/smfd_campaign_oi.cc
> >>>> +++ b/src/smf/smfd/smfd_campaign_oi.cc
> >>>> @@ -42,7 +42,7 @@
> >>>>    #include "smf/smfd/SmfCbkUtil.h"
> >>>>    #include "base/osaf_extended_name.h"
> >>>>
> >>>> -static SaVersionT immVersion = {'A', 2, 1};
> >>>> +static SaVersionT immVersion = {'A', 2, 17};
> >>>>    static const SaImmOiImplementerNameT implementerName =
> >>>>        (SaImmOiImplementerNameT) "safSmfService";
> >>>>
> >>>> diff --git a/src/smf/smfd/smfd_main.cc b/src/smf/smfd/smfd_main.cc
> >>>> index 2d66c1e..35b16ee 100644
> >>>> --- a/src/smf/smfd/smfd_main.cc
> >>>> +++ b/src/smf/smfd/smfd_main.cc
> >>>> @@ -334,7 +334,7 @@ static void main_process(void) {
> >>>>        initialized.
> >>>>      */
> >>>>      SaImmHandleT omHandle = 0;
> >>>> -  SaVersionT immVersion = {'A', 2, 1};
> >>>> +  SaVersionT immVersion = {'A', 2, 17};
> >>>>      SaAisErrorT rc = immutil_saImmOmInitialize(&omHandle, NULL,
> >>>> &immVersion);
> >>>>      if (rc != SA_AIS_OK) {
> >>>>        LOG_ER("immutil_saImmOmInitialize faild, rc=%s", saf_error(rc));
> >>>> --
> >>>> 1.9.1


------------------------------------------------------------------------------
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

Reply via email to