Hi Hans, yes, I'll move the variables before pushing./Regards HansN On 08/12/14 14:40, Hans Feldt wrote: > Ack with minor inline comment > /HansF > >> -----Original Message----- >> From: Hans Nordebäck >> Sent: den 12 augusti 2014 11:18 >> To: Hans Feldt; nagendr...@oracle.com; praveen.malv...@oracle.com >> Cc: opensaf-devel@lists.sourceforge.net >> Subject: [PATCH 1 of 1] AMF: support immediate effect when changing >> comp-type attributes V4 [#819] >> >> osaf/libs/common/amf/include/amf_defs.h | 3 ++- >> osaf/services/saf/amf/amfd/comptype.cc | 22 >> +++++++++++++++++----- >> osaf/services/saf/amf/amfnd/compdb.cc | 18 ++++++++++++++---- >> osaf/services/saf/amf/amfnd/include/avnd_comp.h | 1 + >> 4 files changed, 34 insertions(+), 10 deletions(-) >> >> >> Added support for saAmfCtDefRecoveryOnError >> >> 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 >> @@ -251,7 +251,8 @@ typedef enum >> typedef enum >> { >> saAmfCtDefCallbackTimeout_ID = 1, >> - saAmfCtDefClcCliTimeout_ID = 2 >> + saAmfCtDefClcCliTimeout_ID = 2, >> + saAmfCtDefRecoveryOnError_ID = 3 >> } 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 >> @@ -432,26 +432,38 @@ static void ccb_apply_modify_hdlr(const >> i = 0; >> while ((attr_mod = opdata->param.modify.attrMods[i++]) != NULL) >> { >> AVSV_PARAM_INFO param; >> - const SaImmAttrValuesT_2 *attribute = >> &attr_mod->modAttr; >> - SaTimeT *param_val = (SaTimeT >> *)attribute->attrValues[0]; >> - >> memset(¶m, 0, sizeof(param)); >> param.class_id = AVSV_SA_AMF_COMP_TYPE; >> param.act = AVSV_OBJ_OPR_MOD; >> param.name = opdata->objectName; >> - param.value_len = sizeof(*param_val); >> - memcpy(param.value, param_val, param.value_len); >> + 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, >> opdata->objectName.value, >> (*it)->name.value); >> + >> + 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, ¶m); >> } 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, >> opdata->objectName.value, >> (*it)->name.value); >> + >> + 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, ¶m); >> + } 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, >> + opdata->objectName.value, >> (*it)->name.value); >> + 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, ¶m); >> } else >> LOG_WA("Unexpected attribute name: %s", >> attribute->attrName); >> } >> 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 >> @@ -896,14 +896,13 @@ uint32_t avnd_comptype_oper_req(AVND_CB >> const char* comp_type_name; >> SaTimeT saAmfCtDefCallbackTimeout = 0; >> SaTimeT saAmfCtDefClcCliTimeout = 0; >> + SaAmfRecommendedRecoveryT saAmfCtDefRecoveryOnError; > [Hans] can the above be moved to where it is used instead? >> TRACE_ENTER2("Op %u, %s", param->act, param->name.value); >> >> switch (param->act) { >> case AVSV_OBJ_OPR_MOD: >> { >> - osafassert(sizeof(SaTimeT) == param->value_len); >> - >> // 1. find component from componentType, >> // input example, param->name.value = >> safVersion=1,safCompType=AmfDemo1 >> comp_type_name = (char *) param->name.value; >> @@ -921,6 +920,7 @@ uint32_t avnd_comptype_oper_req(AVND_CB >> switch (param->attr_id) { >> case saAmfCtDefCallbackTimeout_ID: >> saAmfCtDefCallbackTimeout = *((SaTimeT >> *) param->value); >> + osafassert(sizeof(SaTimeT) == >> param->value_len); >> if >> (comp->use_comptype_attr.test(PxiedInstCallbackTimeout)) { >> comp->pxied_inst_cbk_timeout = >> saAmfCtDefCallbackTimeout; >> >> TRACE("comp->pxied_inst_cbk_timeout modified to '%llu'", comp- >>> pxied_inst_cbk_timeout); >> @@ -945,6 +945,7 @@ uint32_t avnd_comptype_oper_req(AVND_CB >> case saAmfCtDefClcCliTimeout_ID: >> AVND_COMP_CLC_CMD_PARAM *cmd; >> saAmfCtDefClcCliTimeout = *((SaTimeT *) >> param->value); >> + osafassert(sizeof(SaTimeT) == >> param->value_len); >> if >> (comp->use_comptype_attr.test(CompInstantiateTimeout)) { >> >> cmd = >> &comp->clc_info.cmds[AVND_COMP_CLC_CMD_TYPE_INSTANTIATE - 1]; >> cmd->timeout = >> saAmfCtDefClcCliTimeout; >> @@ -971,6 +972,14 @@ uint32_t avnd_comptype_oper_req(AVND_CB >> TRACE("cmd->timeout (AM Stop) >> modified to '%llu'", cmd->timeout); >> >> } >> break; >> + case saAmfCtDefRecoveryOnError_ID: >> + saAmfCtDefRecoveryOnError = >> *((SaAmfRecommendedRecoveryT *) param->value); >> + >> osafassert(sizeof(SaAmfRecommendedRecoveryT) == param->value_len); >> + if >> (comp->use_comptype_attr.test(DefRecoveryOnError)) { >> + comp->err_info.def_rec = >> saAmfCtDefRecoveryOnError; >> + TRACE("comp->err_info.def_rec >> modified to '%u'", comp->err_info.def_rec); >> >> + } >> + break; >> default: >> LOG_WA("Unexpected attribute id: %d", >> param->attr_id); >> } >> @@ -1541,9 +1550,10 @@ static int comp_init(AVND_COMP *comp, co >> 0, &comp->quies_complete_cbk_timeout) != SA_AIS_OK) >> comp->quies_complete_cbk_timeout = >> comptype->saAmfCompQuiescingCompleteTimeout; >> >> - if >> (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompRecoveryOnError"), >> attributes, 0, &comp->err_info.def_rec) >> != SA_AIS_OK) >> + if >> (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompRecoveryOnError"), >> attributes, 0, &comp->err_info.def_rec) >> != SA_AIS_OK) { >> comp->err_info.def_rec = comptype->saAmfCtDefRecoveryOnError; >> - else { >> + comp->use_comptype_attr.set(DefRecoveryOnError); >> + } else { >> if ((SaAmfRecommendedRecoveryT)comp->err_info.def_rec == >> SA_AMF_NO_RECOMMENDATION) { >> comp->err_info.def_rec = SA_AMF_COMPONENT_FAILOVER; >> LOG_NO("COMPONENT_FAILOVER(%u) used instead of >> NO_RECOMMENDATION(%u) for '%s'", >> 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 >> @@ -292,6 +292,7 @@ enum UsedComptypeAttrs { >> CompCleanupTimeout, >> CompAmStartTimeout, >> CompAmStopTimeout, >> + DefRecoveryOnError, >> NumAttrs >> }; >>
------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel