osaf/services/saf/immsv/immnd/ImmModel.cc | 39 ++++++++- osaf/services/saf/immsv/immnd/ImmSearchOp.cc | 2 +- osaf/services/saf/immsv/immnd/ImmSearchOp.hh | 4 +- osaf/services/saf/immsv/schema/SAI-AIS-IMM-XSD-A.01.02_OpenSAF.xsd | 10 +- 4 files changed, 40 insertions(+), 15 deletions(-)
diff --git a/osaf/services/saf/immsv/immnd/ImmModel.cc b/osaf/services/saf/immsv/immnd/ImmModel.cc --- a/osaf/services/saf/immsv/immnd/ImmModel.cc +++ b/osaf/services/saf/immsv/immnd/ImmModel.cc @@ -72,7 +72,7 @@ struct AttrInfo { AttrInfo():mValueType(0), mFlags(0), mNtfId(0){} SaUint32T mValueType; - SaUint32T mFlags; + SaImmAttrFlagsT mFlags; SaUint32T mNtfId; ImmAttrValue mDefaultValue; }; @@ -2219,6 +2219,7 @@ ImmModel::classCreate(const ImmsvOmClass int illegal=0; bool persistentRt = false; bool persistentRdn = false; + bool useUnknownFlag = false; ClassInfo* classInfo = NULL; ClassInfo* prevClassInfo = NULL; ClassInfo dummyClass(req->classCategory); @@ -2423,7 +2424,10 @@ ImmModel::classCreate(const ImmsvOmClass } } err = attrCreate(classInfo, attr, attrName); - if(err != SA_AIS_OK) { + if(err == SA_AIS_ERR_NOT_SUPPORTED) { + useUnknownFlag = true; + err = SA_AIS_OK; + } else if(err != SA_AIS_OK) { illegal = 1; } list = list->next; @@ -2476,6 +2480,10 @@ ImmModel::classCreate(const ImmsvOmClass goto done; } + if(useUnknownFlag) { + LOG_NO("At least one attribute in class %s has unsupported attribute flag", className.c_str()); + } + /* All checks passed, now install the class def. */ if(!schemaChange) { @@ -3054,12 +3062,29 @@ ImmModel::attrCreate(ClassInfo* classInf } } - TRACE_5("create attribute '%s'", attrName.c_str()); + SaImmAttrFlagsT unknownFlags = attr->attrFlags & + ~(SA_IMM_ATTR_MULTI_VALUE | + SA_IMM_ATTR_RDN | + SA_IMM_ATTR_CONFIG | + SA_IMM_ATTR_WRITABLE | + SA_IMM_ATTR_INITIALIZED | + SA_IMM_ATTR_RUNTIME | + SA_IMM_ATTR_PERSISTENT | + SA_IMM_ATTR_CACHED); + + if(unknownFlags) { + /* This error means that at least one attribute flag is not supported by OpenSAF, + * but because of forward compatibility, future flags must be supported. + */ + err = SA_AIS_ERR_NOT_SUPPORTED; + TRACE_5("create attribute '%s' with unknown flag(s), attribute flag: %llu", attrName.c_str(), attr->attrFlags); + } else { + TRACE_5("create attribute '%s'", attrName.c_str()); + } AttrInfo* attrInfo = new AttrInfo; attrInfo->mValueType = attr->attrValueType; - osafassert(attr->attrFlags < 0xffffffff); - attrInfo->mFlags = (SaUint32T) attr->attrFlags; + attrInfo->mFlags = attr->attrFlags; attrInfo->mNtfId = attr->attrNtfId; if(attr->attrDefaultValue) { IMMSV_OCTET_STRING tmpos; //temporary octet string @@ -3142,13 +3167,13 @@ ImmModel::classDescriptionGet(const IMMS struct AttrFlagIncludes { - AttrFlagIncludes(SaUint32T attrFlag) : mFlag(attrFlag) { } + AttrFlagIncludes(SaImmAttrFlagsT attrFlag) : mFlag(attrFlag) { } bool operator() (AttrMap::value_type& item) const { return (item.second->mFlags & mFlag) != 0; } - SaUint32T mFlag; + SaImmAttrFlagsT mFlag; }; struct IdIs diff --git a/osaf/services/saf/immsv/immnd/ImmSearchOp.cc b/osaf/services/saf/immsv/immnd/ImmSearchOp.cc --- a/osaf/services/saf/immsv/immnd/ImmSearchOp.cc +++ b/osaf/services/saf/immsv/immnd/ImmSearchOp.cc @@ -51,7 +51,7 @@ ImmSearchOp::addObject( void ImmSearchOp::addAttribute(const std::string& attributeName, SaUint32T valueType, - SaUint32T flags) + SaImmAttrFlagsT flags) { SearchObject& obj = mResultList.back(); diff --git a/osaf/services/saf/immsv/immnd/ImmSearchOp.hh b/osaf/services/saf/immsv/immnd/ImmSearchOp.hh --- a/osaf/services/saf/immsv/immnd/ImmSearchOp.hh +++ b/osaf/services/saf/immsv/immnd/ImmSearchOp.hh @@ -32,7 +32,7 @@ struct SearchAttribute std::string name; ImmAttrValue* valuep; SaImmValueTypeT valueType; - SaUint32T flags; + SaImmAttrFlagsT flags; ~SearchAttribute(); }; @@ -63,7 +63,7 @@ public: void addAttribute( const std::string& attributeName, SaUint32T valueType, - SaUint32T flags); + SaImmAttrFlagsT flags); void addAttrValue(const ImmAttrValue& value); void setImplementer( SaUint32T conn, diff --git a/osaf/services/saf/immsv/schema/SAI-AIS-IMM-XSD-A.01.02_OpenSAF.xsd b/osaf/services/saf/immsv/schema/SAI-AIS-IMM-XSD-A.01.02_OpenSAF.xsd --- a/osaf/services/saf/immsv/schema/SAI-AIS-IMM-XSD-A.01.02_OpenSAF.xsd +++ b/osaf/services/saf/immsv/schema/SAI-AIS-IMM-XSD-A.01.02_OpenSAF.xsd @@ -59,11 +59,11 @@ <xs:documentation>Attribute flags</xs:documentation> </xs:annotation> <xs:restriction base="xs:string"> - <xs:enumeration value="SA_MULTI_VALUE"/> - <xs:enumeration value="SA_WRITABLE"/> - <xs:enumeration value="SA_INITIALIZED"/> - <xs:enumeration value="SA_PERSISTENT"/> - <xs:enumeration value="SA_CACHED"/> + <xs:enumeration ID="0x00000001" value="SA_MULTI_VALUE"/> + <xs:enumeration ID="0x00000200" value="SA_WRITABLE"/> + <xs:enumeration ID="0x00000400" value="SA_INITIALIZED"/> + <xs:enumeration ID="0x00020000" value="SA_PERSISTENT"/> + <xs:enumeration ID="0x00040000" value="SA_CACHED"/> </xs:restriction> </xs:simpleType> <!-- ------------------------------------------------------------------------------ Managing the Performance of Cloud-Based Applications Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. Read the Whitepaper. http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel