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

Reply via email to