Ack, code review only. /HansF > -----Original Message----- > From: Hans Nordebäck > Sent: den 21 augusti 2014 12:21 > To: Hans Feldt; [email protected] > Cc: [email protected] > Subject: [PATCH 1 of 1] AMF: support immediate effect when changing comp-type > attribute saAmfCtDefInstantiationLevel [#819] > > osaf/libs/common/amf/include/amf_defs.h | 3 +- > osaf/services/saf/amf/amfd/comptype.cc | 16 +++++++++++ > osaf/services/saf/amf/amfnd/compdb.cc | 35 > +++++++++++++++++++++++- > osaf/services/saf/amf/amfnd/include/avnd_comp.h | 1 + > 4 files changed, 52 insertions(+), 3 deletions(-) > > > Added support for saAmfCtDefInstantiationLevel > > diff --git a/osaf/libs/common/amf/include/amf_defs.h > b/osaf/libs/common/amf/include/amf_defs.h > --- a/osaf/libs/common/amf/include/amf_defs.h > +++ b/osaf/libs/common/amf/include/amf_defs.h > @@ -254,7 +254,8 @@ typedef enum > saAmfCtDefClcCliTimeout_ID = 2, > saAmfCtDefRecoveryOnError_ID = 3, > saAmfCtDefDisableRestart_ID = 4, > - saAmfCtDefQuiescingCompleteTimeout_ID = 5 > + saAmfCtDefQuiescingCompleteTimeout_ID = 5, > + saAmfCtDefInstantiationLevel_ID = 6 > } AVSV_AMF_COMPTYPE_ATTR_ID; > > /* Attribute ID enum for the SaAmfHealthcheck class */ > diff --git a/osaf/services/saf/amf/amfd/comptype.cc > b/osaf/services/saf/amf/amfd/comptype.cc > --- a/osaf/services/saf/amf/amfd/comptype.cc > +++ b/osaf/services/saf/amf/amfd/comptype.cc > @@ -461,6 +461,14 @@ static void ccb_apply_modify_hdlr(const > 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, ¶m); > + } else if (!strcmp(attribute->attrName, > "saAmfCtDefInstantiationLevel")) { > + SaUint32T *param_val = (SaUint32T > *)attribute->attrValues[0]; > + TRACE("saAmfCtDefInstantiationLevel to '%u' for > compType '%s' on node '%s'", *param_val, > + opdata->objectName.value, > (*it)->name.value); > + param.value_len = sizeof(*param_val); > + memcpy(param.value, param_val, param.value_len); > + param.attr_id = saAmfCtDefInstantiationLevel_ID; > avd_snd_op_req_msg(avd_cb, *it, ¶m); > } else if (!strcmp(attribute->attrName, > "saAmfCtDefRecoveryOnError")) { > SaAmfRecommendedRecoveryT *param_val = > (SaAmfRecommendedRecoveryT *)attribute- > >attrValues[0]; > @@ -576,6 +584,14 @@ static SaAisErrorT ccb_completed_modify_ > rc = SA_AIS_ERR_BAD_OPERATION; > goto done; > } > + } else if (!strcmp(mod->modAttr.attrName, > "saAmfCtDefInstantiationLevel")) { > + uint32_t num_inst = *((SaUint32T > *)mod->modAttr.attrValues[0]); > + if (num_inst == 0) { > + report_ccb_validation_error(opdata, > "Modification of saAmfCtDefInstantiationLevel Fail," > + " Zero InstantiationLevel"); > + rc = SA_AIS_ERR_BAD_OPERATION; > + goto done; > + } > } else if (strcmp(mod->modAttr.attrName, > "saAmfCtDefRecoveryOnError") == 0) { > uint32_t value = *((SaUint32T > *)mod->modAttr.attrValues[0]); > if ((value < SA_AMF_COMPONENT_RESTART) || (value > > SA_AMF_NODE_FAILFAST)) { > diff --git a/osaf/services/saf/amf/amfnd/compdb.cc > b/osaf/services/saf/amf/amfnd/compdb.cc > --- a/osaf/services/saf/amf/amfnd/compdb.cc > +++ b/osaf/services/saf/amf/amfnd/compdb.cc > @@ -912,7 +912,15 @@ uint32_t avnd_comptype_oper_req(AVND_CB > if (strncmp((const char*) comp->saAmfCompType.value, > comp_type_name, comp->saAmfCompType.length) > == 0) { > // 3. comptype found, check if component uses > this comptype attribute value or if > // component has specialized this attribute > value. > - TRACE("comp name: %s , comp_type: %s", > comp->name.value, comp->saAmfCompType.value); > + > + AVND_SU *su = m_AVND_SUDB_REC_GET(cb->sudb, > comp->su->name); > + if (!su) { > + LOG_ER("no su in database for the comp > %s", comp->name.value); > + goto done; > + } > + > + TRACE("su name: %s , comp name: %s , comp_type: > %s", comp->su->name.value, > + comp->name.value, > comp->saAmfCompType.value); > > switch (param->attr_id) { > case saAmfCtDefCallbackTimeout_ID: { > @@ -980,6 +988,27 @@ uint32_t avnd_comptype_oper_req(AVND_CB > } > break; > } > + case saAmfCtDefInstantiationLevel_ID: { > + osafassert(sizeof(SaUint32T) == > param->value_len); > + > + if > (comp->use_comptype_attr.test(CompInstantiationLevel)) { > + comp->inst_level = *(SaUint32T > *)(param->value); > + /* Remove from the comp-list > (maintained by su) */ > + rc = > m_AVND_SUDB_REC_COMP_REM(*su, *comp); > + if (NCSCC_RC_SUCCESS != rc) { > + LOG_ER("%s: %s remove > failed", __FUNCTION__, comp->name.value); > + goto done; > + } > + > + (&comp->su_dll_node)->prev = > NULL; > + (&comp->su_dll_node)->next = > NULL; > + > + /* Add to the comp-list > (maintained by su) */ > + m_AVND_SUDB_REC_COMP_ADD(*su, > *comp, rc); > + TRACE("comp->inst_level > modified to '%u'", comp->inst_level); > + } > + break; > + } > case saAmfCtDefRecoveryOnError_ID: { > SaAmfRecommendedRecoveryT > saAmfCtDefRecoveryOnError = > *((SaAmfRecommendedRecoveryT *) param->value); > > osafassert(sizeof(SaAmfRecommendedRecoveryT) == param->value_len); > @@ -1528,8 +1557,10 @@ static int comp_init(AVND_COMP *comp, co > const_cast<SaImmAttrNameT>("saAmfNodeSwBundlePathPrefix"), > &nodeswbundle_name, &path_prefix); > > - if > (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompInstantiationLevel"), > attributes, 0, &comp->inst_level) != > SA_AIS_OK) > + if > (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompInstantiationLevel"), > attributes, 0, &comp->inst_level) != > SA_AIS_OK) { > comp->inst_level = comptype->saAmfCtDefInstantiationLevel; > + comp->use_comptype_attr.set(CompInstantiationLevel); > + } > > if > (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompNumMaxInstantiateWithoutDelay"), > attributes, > 0, &comp->clc_info.inst_retry_max) != SA_AIS_OK) > diff --git a/osaf/services/saf/amf/amfnd/include/avnd_comp.h > b/osaf/services/saf/amf/amfnd/include/avnd_comp.h > --- a/osaf/services/saf/amf/amfnd/include/avnd_comp.h > +++ b/osaf/services/saf/amf/amfnd/include/avnd_comp.h > @@ -295,6 +295,7 @@ enum UsedComptypeAttrs { > DefRecoveryOnError, > DefDisableRestart, > DefQuiescingCompleteTimeout, > + CompInstantiationLevel, > NumAttrs > }; >
------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/ _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
