Hi Danh, Ack from me.
Thanks, Vu. > -----Original Message----- > From: Danh Vo <danh.c...@dektech.com.au> > Sent: Tuesday, May 8, 2018 4:35 PM > To: ravisekhar.ko...@oracle.com; hans.nordeb...@ericsson.com; > zoran.milinko...@ericsson.com; anders.wid...@ericsson.com; > lennart.l...@ericsson.com; vu.m.ngu...@dektech.com.au > Cc: opensaf-devel@lists.sourceforge.net; Danh Vo > <danh.c...@dektech.com.au> > Subject: [PATCH 1/1] imm: fix PBE terminated when adding data with > duplicated values [#2422] > > When adding value set which has duplicated values into non-pure > runtime attribute (cached or persistent), the first loop (doIt=0) does > not validate in the correct way. It tries to detect duplicated > values between current values and provided values without updating > current values. So the current values remain the old values and > validation just checks on that value set. Duplicated values cannot be > dectected in provided values by current values. As a result, err is > still SA_AIS_OK even though provided values are duplicated in the first > loop. > > This fix also increases performance for the previous fix. The validation > should be performed in first loop (doIt=0) instead of both loops. > --- > src/imm/immnd/ImmModel.cc | 42 +++++++++++++++++++++++++++--------- > ------ > 1 file changed, 27 insertions(+), 15 deletions(-) > > diff --git a/src/imm/immnd/ImmModel.cc b/src/imm/immnd/ImmModel.cc > index 156c308..80ba6ef 100644 > --- a/src/imm/immnd/ImmModel.cc > +++ b/src/imm/immnd/ImmModel.cc > @@ -18119,7 +18119,7 @@ SaAisErrorT ImmModel::rtObjectUpdate( > eduAtValToOs(&tmpos, &(p->attrValue.attrValue), > (SaImmValueTypeT)p->attrValue.attrValueType); > > - if ((attr->mFlags & SA_IMM_ATTR_NO_DUPLICATES) && > + if (!doIt && (attr->mFlags & SA_IMM_ATTR_NO_DUPLICATES) && > (multiattr->hasMatchingValue(tmpos))) { > LOG_NO( > "ERR_INVALID_PARAM: multivalued attr '%s' with " > @@ -18127,9 +18127,7 @@ SaAisErrorT ImmModel::rtObjectUpdate( > "call. Object:'%s'.", attrName.c_str(), objectName.c_str()); > err = SA_AIS_ERR_INVALID_PARAM; > break; // out of for switch > - } > - > - if (doIt) { > + } else if (doIt){ > multiattr->setExtraValue(tmpos); > } > } > @@ -18147,22 +18145,36 @@ SaAisErrorT ImmModel::rtObjectUpdate( > > osafassert(attrValue->isMultiValued()); > ImmAttrMultiValue* multiattr = (ImmAttrMultiValue*)attrValue; > - IMMSV_EDU_ATTR_VAL_LIST* al = p->attrValue.attrMoreValues; > > + // Note: tmpMultiVal is used for validation purpose. It is only > + // valid when doIt = 0. It holds the first value which does not > + // exist in p->attrValue.attrMoreValues. > + ImmAttrMultiValue tmpMultiVal; > + if (!doIt && (attr->mFlags & SA_IMM_ATTR_NO_DUPLICATES)) { > + eduAtValToOs(&tmpos, &(p->attrValue.attrValue), > + (SaImmValueTypeT)p->attrValue.attrValueType); > + tmpMultiVal = *multiattr; > + tmpMultiVal.setExtraValue(tmpos); > + } > + > + IMMSV_EDU_ATTR_VAL_LIST* al = p->attrValue.attrMoreValues; > while (al) { > eduAtValToOs(&tmpos, &(al->n), > (SaImmValueTypeT)p->attrValue.attrValueType); > - if ((attr->mFlags & SA_IMM_ATTR_NO_DUPLICATES) && > - (multiattr->hasMatchingValue(tmpos))) { > - LOG_NO( > - "ERR_INVALID_PARAM: multivalued attr '%s' with " > - "NO_DUPLICATES yet duplicate values provided in rta-update " > - "call. Object:'%s'.", attrName.c_str(), objectName.c_str()); > - err = SA_AIS_ERR_INVALID_PARAM; > - break; // out of loop > - } > > - if (doIt) { > + if (!doIt && (attr->mFlags & SA_IMM_ATTR_NO_DUPLICATES)) { > + if (tmpMultiVal.hasMatchingValue(tmpos)) { > + LOG_NO( > + "ERR_INVALID_PARAM: multivalued attr '%s' with " > + "NO_DUPLICATES yet duplicate values provided in " > + "rta-update call. Object:'%s'.", > + attrName.c_str(), objectName.c_str()); > + err = SA_AIS_ERR_INVALID_PARAM; > + break; // out of loop > + } else { > + tmpMultiVal.setExtraValue(tmpos); > + } > + } else if (doIt) { > multiattr->setExtraValue(tmpos); > } > > -- > 2.7.4 ------------------------------------------------------------------------------ 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