osaf/services/saf/amf/amfd/su.cc |  19 +++++++++++++++----
 1 files changed, 15 insertions(+), 4 deletions(-)


AMFD assert for the following commands:
immcfg -a saAmfSUHostNodeOrNodeGroup= safSu=SC-2,safSg=2N,safApp=OpenSAF
immcfg -a saAmfSURank= safSu=SC-2,safSg=2N,safApp=OpenSAF

Modification of these attributes is not supported.

Patch rejects CCB modification and fixes assert.

diff --git a/osaf/services/saf/amf/amfd/su.cc b/osaf/services/saf/amf/amfd/su.cc
--- a/osaf/services/saf/amf/amfd/su.cc
+++ b/osaf/services/saf/amf/amfd/su.cc
@@ -1368,14 +1368,21 @@ static SaAisErrorT su_ccb_completed_modi
        SaAisErrorT rc = SA_AIS_OK;
        const SaImmAttrModificationT_2 *attr_mod;
        int i = 0;
+       bool value_is_deleted;
 
        while ((attr_mod = opdata->param.modify.attrMods[i++]) != nullptr) {
 
-               /* Attribute value removed */
-               if ((attr_mod->modType == SA_IMM_ATTR_VALUES_DELETE) || 
(attr_mod->modAttr.attrValues == nullptr))
-                       continue;
-
+               if ((attr_mod->modType == SA_IMM_ATTR_VALUES_DELETE) ||
+                               (attr_mod->modAttr.attrValues == nullptr)) {
+                       /* Attribute value is deleted, revert to default value 
if applicable*/
+                       value_is_deleted = true;
+               } else {
+                       /* Attribute value is modified */
+                       value_is_deleted = false;
+               }
                if (!strcmp(attr_mod->modAttr.attrName, "saAmfSUFailover")) {
+                       if (value_is_deleted == true)
+                               continue;
                        AVD_SU *su = 
su_db->find(Amf::to_string(&opdata->objectName));
                        uint32_t su_failover = *((SaUint32T 
*)attr_mod->modAttr.attrValues[0]);
 
@@ -1396,6 +1403,8 @@ static SaAisErrorT su_ccb_completed_modi
                                goto done;
                        }
                } else if (!strcmp(attr_mod->modAttr.attrName, 
"saAmfSUMaintenanceCampaign")) {
+                       if (value_is_deleted == true)
+                               continue;
                        AVD_SU *su = 
su_db->find(Amf::to_string(&opdata->objectName));
 
                        if (su->saAmfSUMaintenanceCampaign.length > 0) {
@@ -1405,6 +1414,8 @@ static SaAisErrorT su_ccb_completed_modi
                                goto done;
                        }
                } else if (!strcmp(attr_mod->modAttr.attrName, "saAmfSUType")) {
+                       if (value_is_deleted == true)
+                               continue;
                        AVD_SU *su;
                        SaNameT sutype_name = *(SaNameT*) 
attr_mod->modAttr.attrValues[0];
                        su = su_db->find(Amf::to_string(&opdata->objectName));

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to