Please review it by today. Thanks -Nagu
> -----Original Message----- > From: Nagendra Kumar > Sent: 04 August 2016 16:28 > To: [email protected]; Praveen Malviya; > [email protected]; [email protected] > Cc: [email protected] > Subject: [devel] [PATCH 1 of 1] amfd: create node group at std amfd if not > existing [#1932] > > osaf/services/saf/amf/amfd/nodegroup.cc | 35 > +++++++++++++++++++++++++++++--- > 1 files changed, 31 insertions(+), 4 deletions(-) > > > There are chances that node group addition may be missed at std amfd when > added between config read and being applier. > So, next command of adding a node in that node group will result in std amfd > crash because node group doesnt exists at std amfd. > So, it is better to re-read configuration at std amfd when node group is found > null during node group modification (add/del of nodes). > > diff --git a/osaf/services/saf/amf/amfd/nodegroup.cc > b/osaf/services/saf/amf/amfd/nodegroup.cc > --- a/osaf/services/saf/amf/amfd/nodegroup.cc > +++ b/osaf/services/saf/amf/amfd/nodegroup.cc > @@ -551,10 +551,37 @@ static void ng_ccb_apply_modify_hdlr(Ccb > unsigned j = 0; > const SaImmAttrModificationT_2 *mod; > AVD_AMF_NG *ng; > - > + SaAisErrorT rc; > + const SaImmAttrValuesT_2 **attributes; > + SaImmAccessorHandleT accessorHandle; > TRACE_ENTER(); > > ng = avd_ng_get(&opdata->objectName); > + if (ng == nullptr) { > + TRACE("%p", ng); > + /* During Standby cold sync, there may be chance that > + node group creation was missed in-between config read > + and being applier, so re-read config again. > + Once it is read, then below ADD/DEL logic may not be > + needed because config will be the latest, but just keeping > + because they are not causing any harm.*/ > + immutil_saImmOmAccessorInitialize(avd_cb- > >immOmHandle, &accessorHandle); > + rc = immutil_saImmOmAccessorGet_2(accessorHandle, > &opdata->objectName, > + nullptr, (SaImmAttrValuesT_2 > ***)&attributes); > + if (rc != SA_AIS_OK) { > + LOG_ER("saImmOmAccessorGet_2 FAILED %u for > %s", rc, opdata->objectName.value); > + goto done; > + } > + TRACE("'%s'", opdata->objectName.value); > + if ((ng = ng_create(&opdata->objectName, attributes)) == > nullptr) { > + LOG_ER("ng_create failed for %s", opdata- > >objectName.value); > + goto done; > + } > + nodegroup_db->insert(Amf::to_string(&ng->name), ng); > + TRACE("ng '%s' created with number_nodes '%u'", ng- > >name.value, > + ng->number_nodes()); > + immutil_saImmOmAccessorFinalize(accessorHandle); > + } > > while ((mod = opdata->param.modify.attrMods[i++]) != nullptr) { > switch (mod->modType) { > @@ -563,7 +590,7 @@ static void ng_ccb_apply_modify_hdlr(Ccb > ng- > >saAmfNGNodeList.insert(Amf::to_string((SaNameT*)mod- > >modAttr.attrValues[j])); > } > > - TRACE("number_nodes %u", ng->number_nodes()); > + TRACE("number_nodes after addition %u", ng- > >number_nodes()); > break; > } > case SA_IMM_ATTR_VALUES_DELETE: { > @@ -572,14 +599,14 @@ static void ng_ccb_apply_modify_hdlr(Ccb > ng- > >saAmfNGNodeList.erase(Amf::to_string((SaNameT*)mod- > >modAttr.attrValues[j])); > } > > - TRACE("number_nodes %u", ng->number_nodes()); > + TRACE("number_nodes left after deletion %u", ng- > >number_nodes()); > break; > } > default: > osafassert(0); > } > } > - > +done: > TRACE_LEAVE(); > } > > > ------------------------------------------------------------------------------ > _______________________________________________ > Opensaf-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/opensaf-devel ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
