Hi Neel The value of longDnsAllowed is cached in SMF. This is done by reading the attribute at start up and using an applier to get runtime changes. The current handling is that the cached value is updated in the applier "apply callback" when the attribute value is changed. Based on the assumption that there is a timing problem causing the value to be used after it is changed by an object manager but before the cached value has been update by the applier. However further investigation shows that this is not the case. The attached trace and logs shows that the apply callback is executed approximately 5 seconds before the cached value is used so there is no timing problem. actual problem is in the SMF applier and the problem is trigged (and found) because of some changes in the behavior of the IMM applier apply callback function. The SMF problem must be fixed whatever version of IMM that is used and with the fix also version .17 should work. I will do the fix and verify. I will send you a diff with the fix. Maybe this fix should be handled in a separate ticket? If so this ticket must be pushed before your ticket #2431 or I you want you could add the fix to your ticket?
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
probleminfo.tgz
Description: probleminfo.tgz
------------------------------------------------------------------------------ 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
