Currently changing attribute saAmfCtDefDisableRestart of SaAmfCompType
object not affect to all components at runtime. Because the change
does not broadcast to all nodes.

Broadcast the change once it is updated.

Similar fix for attribute saAmfCtDefInstantiationLevel.
---
 src/amf/amfd/comptype.cc | 200 ++++++++++++++++++++++++++---------------------
 1 file changed, 110 insertions(+), 90 deletions(-)

diff --git a/src/amf/amfd/comptype.cc b/src/amf/amfd/comptype.cc
index b6d4d6d..a77fdab 100644
--- a/src/amf/amfd/comptype.cc
+++ b/src/amf/amfd/comptype.cc
@@ -456,6 +456,15 @@ done1:
   return rc;
 }
 
+static void broadcast_change_to_nodes(
+                               std::set<AVD_AVND *, NodeNameCompare> node_set,
+                               AVSV_PARAM_INFO* param) {
+  std::set<AVD_AVND *>::iterator it;
+  for (it = node_set.begin(); it != node_set.end(); ++it) {
+    avd_snd_op_req_msg(avd_cb, *it, param);
+  }
+}
+
 static void ccb_apply_modify_hdlr(const CcbUtilOperationData_t *opdata) {
   const SaImmAttrModificationT_2 *attr_mod;
   AVD_COMP_TYPE *comp_type;
@@ -488,98 +497,109 @@ static void ccb_apply_modify_hdlr(const 
CcbUtilOperationData_t *opdata) {
     comp = comp->comp_type_list_comp_next;
   }
 
-  std::set<AVD_AVND *>::iterator it;
-  for (it = node_set.begin(); it != node_set.end(); ++it) {
-    int i = 0;
-    while ((attr_mod = opdata->param.modify.attrMods[i++]) != nullptr) {
-      AVSV_PARAM_INFO param;
-      memset(&param, 0, sizeof(param));
-      param.class_id = AVSV_SA_AMF_COMP_TYPE;
-      param.act = AVSV_OBJ_OPR_MOD;
-      param.name = opdata->objectName;
-      const SaImmAttrValuesT_2 *attribute = &attr_mod->modAttr;
-
-      if (!strcmp(attribute->attrName, "saAmfCtDefCallbackTimeout")) {
-        SaTimeT *param_val = (SaTimeT *)attribute->attrValues[0];
-        TRACE(
-            "saAmfCtDefCallbackTimeout to '%llu' for compType '%s' on node 
'%s'",
-            *param_val, osaf_extended_name_borrow(&opdata->objectName),
-            (*it)->name.c_str());
-        param.value_len = sizeof(*param_val);
-        memcpy(param.value, param_val, param.value_len);
-        param.attr_id = saAmfCtDefCallbackTimeout_ID;
-        avd_snd_op_req_msg(avd_cb, *it, &param);
-      } else if (!strcmp(attribute->attrName, "saAmfCtDefClcCliTimeout")) {
-        SaTimeT *param_val = (SaTimeT *)attribute->attrValues[0];
-        TRACE(
-            "saAmfCtDefClcCliTimeout to '%llu' for compType '%s' on node '%s'",
-            *param_val, osaf_extended_name_borrow(&opdata->objectName),
-            (*it)->name.c_str());
-        param.value_len = sizeof(*param_val);
-        memcpy(param.value, param_val, param.value_len);
-        param.attr_id = saAmfCtDefClcCliTimeout_ID;
-        avd_snd_op_req_msg(avd_cb, *it, &param);
-      } else if (!strcmp(attribute->attrName,
-                         "saAmfCtDefQuiescingCompleteTimeout")) {
-        SaTimeT *param_val = (SaTimeT *)attribute->attrValues[0];
-        TRACE(
-            "saAmfCtDefQuiescingCompleteTimeout to '%llu' for compType '%s' on 
node '%s'",
-            *param_val, osaf_extended_name_borrow(&opdata->objectName),
-            (*it)->name.c_str());
-        param.value_len = sizeof(*param_val);
-        memcpy(param.value, param_val, param.value_len);
-        param.attr_id = saAmfCtDefQuiescingCompleteTimeout_ID;
-        avd_snd_op_req_msg(avd_cb, *it, &param);
-      } else if (!strcmp(attribute->attrName, "saAmfCtDefInstantiationLevel")) 
{
-        SaUint32T param_val;
-        SaUint32T old_value = comp_type->saAmfCtDefInstantiationLevel;
-        if ((attr_mod->modType == SA_IMM_ATTR_VALUES_DELETE) ||
-            (attribute->attrValues == nullptr)) {
-          param_val = 0;  // Default value as per Section 8.13.1 (B0401)
-        } else {
-          param_val = *(SaUint32T *)attribute->attrValues[0];
-        }
-        TRACE(
-            "saAmfCtDefInstantiationLevel to '%u' for compType '%s' on node 
'%s'",
-            param_val, osaf_extended_name_borrow(&opdata->objectName),
-            (*it)->name.c_str());
-        param.value_len = sizeof(param_val);
-        memcpy(param.value, &param_val, param.value_len);
-        param.attr_id = saAmfCtDefInstantiationLevel_ID;
+  int i = 0;
+  while ((attr_mod = opdata->param.modify.attrMods[i++]) != nullptr) {
+    AVSV_PARAM_INFO param;
+    memset(&param, 0, sizeof(param));
+    param.class_id = AVSV_SA_AMF_COMP_TYPE;
+    param.act = AVSV_OBJ_OPR_MOD;
+    param.name = opdata->objectName;
+    const SaImmAttrValuesT_2 *attribute = &attr_mod->modAttr;
+
+    if (!strcmp(attribute->attrName, "saAmfCtDefCallbackTimeout")) {
+      SaTimeT *param_val = (SaTimeT *)attribute->attrValues[0];
+      SaTimeT old_value = comp_type->saAmfCtDefCallbackTimeout;
+      TRACE(
+          "saAmfCtDefCallbackTimeout to '%llu' for compType '%s'",
+          *param_val, osaf_extended_name_borrow(&opdata->objectName));
+      param.value_len = sizeof(*param_val);
+      memcpy(param.value, param_val, param.value_len);
+      param.attr_id = saAmfCtDefCallbackTimeout_ID;
+      if (old_value != *param_val) {
+        comp_type->saAmfCtDefCallbackTimeout = *param_val;
+        broadcast_change_to_nodes(node_set, &param);
+      }
+    } else if (!strcmp(attribute->attrName, "saAmfCtDefClcCliTimeout")) {
+      SaTimeT *param_val = (SaTimeT *)attribute->attrValues[0];
+      SaTimeT old_value = comp_type->saAmfCtDefClcCliTimeout;
+      TRACE(
+          "saAmfCtDefClcCliTimeout to '%llu' for compType '%s'",
+          *param_val, osaf_extended_name_borrow(&opdata->objectName));
+      param.value_len = sizeof(*param_val);
+      memcpy(param.value, param_val, param.value_len);
+      param.attr_id = saAmfCtDefClcCliTimeout_ID;
+      if (old_value != *param_val) {
+        comp_type->saAmfCtDefClcCliTimeout = *param_val;
+        broadcast_change_to_nodes(node_set, &param);
+      }
+    } else if (!strcmp(attribute->attrName,
+                       "saAmfCtDefQuiescingCompleteTimeout")) {
+      SaTimeT *param_val = (SaTimeT *)attribute->attrValues[0];
+      SaTimeT old_value = comp_type->saAmfCtDefQuiescingCompleteTimeout;
+      TRACE(
+          "saAmfCtDefQuiescingCompleteTimeout to '%llu' for compType '%s'",
+          *param_val, osaf_extended_name_borrow(&opdata->objectName));
+      param.value_len = sizeof(*param_val);
+      memcpy(param.value, param_val, param.value_len);
+      param.attr_id = saAmfCtDefQuiescingCompleteTimeout_ID;
+      if (old_value != *param_val) {
+        comp_type->saAmfCtDefQuiescingCompleteTimeout = *param_val;
+        broadcast_change_to_nodes(node_set, &param);
+      }
+    } else if (!strcmp(attribute->attrName, "saAmfCtDefInstantiationLevel")) {
+      SaUint32T param_val;
+      SaUint32T old_value = comp_type->saAmfCtDefInstantiationLevel;
+      if ((attr_mod->modType == SA_IMM_ATTR_VALUES_DELETE) ||
+          (attribute->attrValues == nullptr)) {
+        param_val = 0;  // Default value as per Section 8.13.1 (B0401)
+      } else {
+        param_val = *(SaUint32T *)attribute->attrValues[0];
+      }
+      TRACE(
+          "saAmfCtDefInstantiationLevel to '%u' for compType '%s'",
+          param_val, osaf_extended_name_borrow(&opdata->objectName));
+      param.value_len = sizeof(param_val);
+      memcpy(param.value, &param_val, param.value_len);
+      param.attr_id = saAmfCtDefInstantiationLevel_ID;
+      if (old_value != param_val) {
         comp_type->saAmfCtDefInstantiationLevel = param_val;
-        if (old_value != param_val) avd_snd_op_req_msg(avd_cb, *it, &param);
-      } else if (!strcmp(attribute->attrName, "saAmfCtDefRecoveryOnError")) {
-        SaAmfRecommendedRecoveryT *param_val =
-            (SaAmfRecommendedRecoveryT *)attribute->attrValues[0];
-        TRACE(
-            "saAmfCtDefRecoveryOnError to '%u' for compType '%s' on node '%s'",
-            *param_val, osaf_extended_name_borrow(&opdata->objectName),
-            (*it)->name.c_str());
-        param.value_len = sizeof(*param_val);
-        memcpy(param.value, param_val, param.value_len);
-        param.attr_id = saAmfCtDefRecoveryOnError_ID;
-        avd_snd_op_req_msg(avd_cb, *it, &param);
-      } else if (!strcmp(attribute->attrName, "saAmfCtDefDisableRestart")) {
-        SaBoolT param_val;
-        SaUint32T old_value = comp_type->saAmfCtDefDisableRestart;
-        if ((attr_mod->modType == SA_IMM_ATTR_VALUES_DELETE) ||
-            (attribute->attrValues == nullptr)) {
-          param_val = static_cast<SaBoolT>(
-              0);  // Default value as per Section 8.13.1 (B0401)
-        } else {
-          param_val = *(SaBoolT *)attribute->attrValues[0];
-        }
-        TRACE("saAmfCtDefDisableRestart to '%u' for compType '%s' on node 
'%s'",
-              param_val, osaf_extended_name_borrow(&opdata->objectName),
-              (*it)->name.c_str());
-        param.value_len = sizeof(param_val);
-        memcpy(param.value, &param_val, param.value_len);
-        param.attr_id = saAmfCtDefDisableRestart_ID;
+        broadcast_change_to_nodes(node_set, &param);
+      }
+    } else if (!strcmp(attribute->attrName, "saAmfCtDefRecoveryOnError")) {
+      SaUint32T old_value = comp_type->saAmfCtDefRecoveryOnError;
+      SaAmfRecommendedRecoveryT *param_val =
+          (SaAmfRecommendedRecoveryT *)attribute->attrValues[0];
+      TRACE(
+          "saAmfCtDefRecoveryOnError to '%u' for compType '%s'",
+          *param_val, osaf_extended_name_borrow(&opdata->objectName));
+      param.value_len = sizeof(*param_val);
+      memcpy(param.value, param_val, param.value_len);
+      param.attr_id = saAmfCtDefRecoveryOnError_ID;
+      if (old_value != *param_val) {
+        comp_type->saAmfCtDefRecoveryOnError = *param_val;
+        broadcast_change_to_nodes(node_set, &param);
+      }
+    } else if (!strcmp(attribute->attrName, "saAmfCtDefDisableRestart")) {
+      SaBoolT param_val;
+      SaUint32T old_value = comp_type->saAmfCtDefDisableRestart;
+      if ((attr_mod->modType == SA_IMM_ATTR_VALUES_DELETE) ||
+          (attribute->attrValues == nullptr)) {
+        param_val = static_cast<SaBoolT>(
+            0);  // Default value as per Section 8.13.1 (B0401)
+      } else {
+        param_val = *(SaBoolT *)attribute->attrValues[0];
+      }
+      TRACE("saAmfCtDefDisableRestart to '%u' for compType '%s'",
+            param_val, osaf_extended_name_borrow(&opdata->objectName));
+      param.value_len = sizeof(param_val);
+      memcpy(param.value, &param_val, param.value_len);
+      param.attr_id = saAmfCtDefDisableRestart_ID;
+      if (old_value != param_val) {
         comp_type->saAmfCtDefDisableRestart = param_val;
-        if (old_value != param_val) avd_snd_op_req_msg(avd_cb, *it, &param);
-      } else
-        LOG_WA("Unexpected attribute name: %s", attribute->attrName);
-    }
+        broadcast_change_to_nodes(node_set, &param);
+      }
+    } else
+      LOG_WA("Unexpected attribute name: %s", attribute->attrName);
   }
 }
 
-- 
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

Reply via email to