Hi Leenart, Yes, push the patch, with all #2442 changes. Reviewed and tested the patch. Ack.
/Neel. On 2017/04/27 07:40 PM, Lennart Lund wrote: > Hi Neel, > > I am not sure I understand what you mean? > All of the #2442 changes are needed not only the "> + attribute = > attrMod->modAttr;" fix. > I suggest that you push your #2431 patch as is after the #2442 fix is pushed > > Thanks > Lennart > >> -----Original Message----- >> From: Neelakanta Reddy [mailto:reddy.neelaka...@oracle.com] >> Sent: den 27 april 2017 15:59 >> To: Lennart Lund <lennart.l...@ericsson.com>; Rafael Odzakow >> <rafael.odza...@ericsson.com> >> Cc: opensaf-devel@lists.sourceforge.net >> Subject: Re: [PATCH 1/1] smf: Attribute value handling in longDn applier is >> incorrect [#2442] >> >> Hi Lennart, >> >> From IMM Version A.2.17, the IMM modify callback will have canonical >> attributes. >> All the attributes in the class along with the modified attributes. >> >> The code in CcbApplyCallback in the file >> "src/smf/smfd/SmfImmApplierHdl.cc", if the attrmods are more than one >> then the following correction has to be made: >> >> diff --git a/src/smf/smfd/SmfImmApplierHdl.cc >> b/src/smf/smfd/SmfImmApplierHdl.cc >> --- a/src/smf/smfd/SmfImmApplierHdl.cc >> +++ b/src/smf/smfd/SmfImmApplierHdl.cc >> @@ -455,6 +455,7 @@ static void CcbApplyCallback(SaImmOiHand >> if (attribute_name_.compare(attribute.attrName) != 0) { >> // Not found >> attrMod = opdata->param.modify.attrMods[i]; >> + attribute = attrMod->modAttr; >> continue; >> } >> >> >> I tested with A.2.17 IMM version, the longdns are working fine.. If you >> agree with the above patch, re-publish the patch. >> The #2442 has to go before #2431. >> >> Thanks, >> Neel. >> >> >> On 2017/04/27 06:40 PM, Lennart Lund wrote: >>> SMF has an IMM applier to track changes of attribute longDnsAllowed in >> OpensafImm class. >>> Fix that the applier does not find the value if the list of attributes to be >> handled in the >>> apply callback contains more than one attribute. Also if the found attribute >> is not the serached >>> one the cached attribute value is set to invalid >>> --- >>> src/smf/smfd/SmfImmApplierHdl.cc | 28 +++++++++++++++------------- >>> 1 file changed, 15 insertions(+), 13 deletions(-) >>> >>> diff --git a/src/smf/smfd/SmfImmApplierHdl.cc >> b/src/smf/smfd/SmfImmApplierHdl.cc >>> index d325ec4..693446b 100644 >>> --- a/src/smf/smfd/SmfImmApplierHdl.cc >>> +++ b/src/smf/smfd/SmfImmApplierHdl.cc >>> @@ -436,15 +436,12 @@ static void CcbApplyCallback(SaImmOiHandleT >> immOiHandle, SaImmOiCcbIdT ccbId) { >>> objName = osaf_extended_name_borrow(&opdata->objectName); >>> if (object_name_.compare(objName) != 0) { >>> - TRACE("%s: Object \"%s\" not an OpensafConfig object", >> __FUNCTION__, >>> - objName); >>> + LOG_NO("%s: Object \"%s\" wrong object", __FUNCTION__, >> objName); >>> goto done; >>> } >>> >>> - /* Read value in opensafNetworkName >>> - * Note: This is implemented as a loop in case more attributes are >>> - * added in the class in the future. For now the only >>> - * attribute of interest here is opensafNetworkName >>> + /* Read value >>> + * Note: For now the only attribute of interest here is >> opensafNetworkName >>> */ >>> TRACE("%s: Read value in attributes", __FUNCTION__); >>> attrMod = opdata->param.modify.attrMods[0]; >>> @@ -455,21 +452,26 @@ static void CcbApplyCallback(SaImmOiHandleT >> immOiHandle, SaImmOiCcbIdT ccbId) { >>> if (attribute_name_.compare(attribute.attrName) != 0) { >>> // Not found >>> attrMod = opdata->param.modify.attrMods[i]; >>> + attribute = attrMod->modAttr; >>> continue; >>> } >>> >>> // Attribute found >>> value = static_cast<SaUint32T *>(attribute.attrValues[0]); >>> + TRACE("Attribute found: attrName '%s', value = %d", >>> + attribute.attrName, *value); >>> break; >>> } >>> >>> - if (value == nullptr) { >>> - TRACE("%s: Value is nullptr", __FUNCTION__); >>> - SetAttributeValue(""); >>> - attribute_value_is_valid_ = false; >>> - } else { >>> - SetAttributeValue(std::to_string(*value)); >>> - attribute_value_is_valid_ = true; >>> + if (attrMod != nullptr) { >>> + if (value == nullptr) { >>> + TRACE("%s: Value is nullptr", __FUNCTION__); >>> + SetAttributeValue(""); >>> + attribute_value_is_valid_ = false; >>> + } else { >>> + SetAttributeValue(std::to_string(*value)); >>> + attribute_value_is_valid_ = true; >>> + } >>> } >>> >>> done: ------------------------------------------------------------------------------ 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 Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel