Ack Tested: 1. Set saAmfNodeFailfastOnTerminationFailure and saAmfSGAutoRepair to true and returned error in cleanup script when demo is killed. Node rebooted. 2. Set saAmfNodeFailfastOnTerminationFailure and saAmfSGAutoRepair to false and returned error in cleanup script when demo is killed. Node didn't rebooted, SU got repaired using admin command. 3. Set saAmfNodeFailfastOnTerminationFailure and saAmfSGAutoRepair to true and changed saAmfSgtDefAutoRepair to false. Returned error in cleanup script when demo is killed. Node rebooted. 4. Set saAmfNodeFailfastOnTerminationFailure and saAmfSGAutoRepair to true and changed saAmfSgtDefAutoRepair to true. Returned error in cleanup script when demo is killed. Node rebooted. 5. Set saAmfNodeFailfastOnTerminationFailure to true. Set saAmfSGAutoRepair to false and changed saAmfSgtDefAutoRepair to true. Returned error in cleanup script when demo is killed. Node didn't rebooted, SU got repaired using admin command.. 6. Set saAmfNodeFailfastOnTerminationFailure to true. Delete saAmfSGAutoRepair and changed saAmfSgtDefAutoRepair to true. Returned error in cleanup script when demo is killed. Node rebooted. 7. Set saAmfNodeFailfastOnTerminationFailure to false with above conditions of saAmfSGAutoRepair and saAmfSgtDefAutoRepair and returned error in cleanup script when demo is killed. Node didn't rebooted, SU got repaired using admin command.
Thanks -Nagu > -----Original Message----- > From: Hans Feldt [mailto:osafde...@gmail.com] > Sent: 28 February 2014 13:25 > To: Praveen Malviya; Nagendra Kumar; hans.nordeb...@ericsson.com > Cc: opensaf-devel@lists.sourceforge.net > Subject: [PATCH 2 of 4] amfd: reboot node when term-failed SU [#538] > > osaf/services/saf/amf/amfd/comp.cc | 38 > +++++++++++++++++++++++++----- > osaf/services/saf/amf/amfd/include/util.h | 1 + > osaf/services/saf/amf/amfd/sgproc.cc | 38 > ------------------------------- > osaf/services/saf/amf/amfd/util.cc | 20 ++++++++++++++++ > 4 files changed, 52 insertions(+), 45 deletions(-) > > > When a component enters the TERM-FAILED presence state and if all the repair > conditions on SG and node are true, a node reboot request is ordered. The > comp > presence state is also SAFlogged. > > diff --git a/osaf/services/saf/amf/amfd/comp.cc > b/osaf/services/saf/amf/amfd/comp.cc > --- a/osaf/services/saf/amf/amfd/comp.cc > +++ b/osaf/services/saf/amf/amfd/comp.cc > @@ -74,23 +74,47 @@ AVD_COMP *avd_comp_new(const SaNameT *dn > return comp; > } > > +/** > + * Set the presence state of a component. Updates the IMM copy. If newstate > is > + * TERM-FAILED an alarm is sent and possibly a node reboot request is > ordered. > + * > + * @param comp > + * @param pres_state > + */ > void avd_comp_pres_state_set(AVD_COMP *comp, SaAmfPresenceStateT > pres_state) > { > + AVD_AVND *node = comp->su->su_on_node; > + SaAmfPresenceStateT old_state = comp->saAmfCompPresenceState; > + > osafassert(pres_state <= SA_AMF_PRESENCE_TERMINATION_FAILED); > - TRACE_ENTER2("'%s' %s => %s", > - comp->comp_info.name.value, avd_pres_state_name[comp- > >saAmfCompPresenceState], > + TRACE_ENTER2("'%s' %s => %s", comp->comp_info.name.value, > + avd_pres_state_name[comp->saAmfCompPresenceState], > avd_pres_state_name[pres_state]); > > comp->saAmfCompPresenceState = pres_state; > avd_saImmOiRtObjectUpdate(&comp->comp_info.name, > - > const_cast<SaImmAttrNameT>("saAmfCompPresenceState"), > SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompPresenceState); > + > const_cast<SaImmAttrNameT>("saAmfCompPresenceState"), > + SA_IMM_ATTR_SAUINT32T, &comp- > >saAmfCompPresenceState); > m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, comp, > AVSV_CKPT_COMP_PRES_STATE); > > - /* alarm & notifications */ > if(comp->saAmfCompPresenceState == > SA_AMF_PRESENCE_INSTANTIATION_FAILED) > - avd_send_comp_inst_failed_alarm(&comp->comp_info.name, > &comp->su->su_on_node->name); > - else if(comp->saAmfCompPresenceState == > SA_AMF_PRESENCE_TERMINATION_FAILED) > - avd_send_comp_clean_failed_alarm(&comp- > >comp_info.name, &comp->su->su_on_node->name); > + avd_send_comp_inst_failed_alarm(&comp->comp_info.name, > &node->name); > + else if (comp->saAmfCompPresenceState == > SA_AMF_PRESENCE_TERMINATION_FAILED) { > + avd_send_comp_clean_failed_alarm(&comp- > >comp_info.name, &node->name); > + > + saflog(LOG_NOTICE, amfSvcUsrName, "%s PresenceState %s > => %s", > + comp->comp_info.name.value, > avd_pres_state_name[old_state], > + avd_pres_state_name[pres_state]); > + > + if ((comp->su->sg_of_su->saAmfSGAutoRepair == true) && > + (node->saAmfNodeAutoRepair == true) && > + (node- > >saAmfNodeFailfastOnTerminationFailure == true)) { > + saflog(LOG_NOTICE, amfSvcUsrName, > + "Ordering reboot of '%s' as repair > action", > + node->name.value); > + avd_d2n_reboot_snd(node); > + } > + } > } > > void avd_comp_oper_state_set(AVD_COMP *comp, SaAmfOperationalStateT > oper_state) > diff --git a/osaf/services/saf/amf/amfd/include/util.h > b/osaf/services/saf/amf/amfd/include/util.h > --- a/osaf/services/saf/amf/amfd/include/util.h > +++ b/osaf/services/saf/amf/amfd/include/util.h > @@ -94,6 +94,7 @@ struct avd_comp_tag; > struct avd_comp_csi_rel_tag; > struct avd_csi_tag; > > +void avd_d2n_reboot_snd(struct avd_avnd_tag *node); > void amflog(int priority, const char *format, ...); > void d2n_msg_free(AVD_DND_MSG *msg); > uint32_t avd_d2n_msg_dequeue(struct cl_cb_tag *cb); > diff --git a/osaf/services/saf/amf/amfd/sgproc.cc > b/osaf/services/saf/amf/amfd/sgproc.cc > --- a/osaf/services/saf/amf/amfd/sgproc.cc > +++ b/osaf/services/saf/amf/amfd/sgproc.cc > @@ -35,8 +35,6 @@ > #include <clm.h> > #include <si_dep.h> > > -static SaAisErrorT avd_d2n_reboot_snd(AVD_AVND *node); > - > > /************************************************************ > ***************** > * Function: avd_new_assgn_susi > * > @@ -2038,42 +2036,6 @@ done: > return rc; > } > > - > /************************************************************ > **************** > - Name : avd_d2n_reboot_snd > - > - Description : This is a routine sends reboot command to amfnd. > - > - Arguments : node: Node director node to which this message > - will be sent. > - > - Return Values : OK/ERROR > - > - Notes : None. > - > ************************************************************* > ****************/ > -static SaAisErrorT avd_d2n_reboot_snd(AVD_AVND *node) > -{ > - SaAisErrorT rc = SA_AIS_OK; > - > - TRACE("Sending REBOOT MSG to %x", node->node_info.nodeId); > - > - /* Send reboot request to amfnd to reboot that node. */ > - AVD_DND_MSG *d2n_msg; > - > - d2n_msg = new AVD_DND_MSG(); > - > - d2n_msg->msg_type = AVSV_D2N_REBOOT_MSG; > - d2n_msg->msg_info.d2n_reboot_info.node_id = node- > >node_info.nodeId; > - d2n_msg->msg_info.d2n_reboot_info.msg_id = ++(node- > >snd_msg_id); > - > - /* Now send the message to the node director */ > - if (avd_d2n_msg_snd(avd_cb, node, d2n_msg) != > NCSCC_RC_SUCCESS) { > - LOG_ER("%s: snd to %x failed", __FUNCTION__, node- > >node_info.nodeId); > - d2n_msg_free(d2n_msg); > - rc = SA_AIS_ERR_FAILED_OPERATION; > - } > - > - return rc; > -} > /** > * @brief This routine does the following functionality > * a. Checks the dependencies of the SI's to see whether > diff --git a/osaf/services/saf/amf/amfd/util.cc > b/osaf/services/saf/amf/amfd/util.cc > --- a/osaf/services/saf/amf/amfd/util.cc > +++ b/osaf/services/saf/amf/amfd/util.cc > @@ -1729,6 +1729,26 @@ void d2n_msg_free(AVSV_DND_MSG *msg) > } > > /** > + * Sends a reboot command to amfnd > + * @param node > + */ > +void avd_d2n_reboot_snd(AVD_AVND *node) > +{ > + TRACE("Sending REBOOT MSG to %x", node->node_info.nodeId); > + > + AVD_DND_MSG *d2n_msg = new AVD_DND_MSG(); > + > + d2n_msg->msg_type = AVSV_D2N_REBOOT_MSG; > + d2n_msg->msg_info.d2n_reboot_info.node_id = node- > >node_info.nodeId; > + d2n_msg->msg_info.d2n_reboot_info.msg_id = ++(node- > >snd_msg_id); > + > + if (avd_d2n_msg_snd(avd_cb, node, d2n_msg) != > NCSCC_RC_SUCCESS) { > + LOG_ER("%s: snd to %x failed", __FUNCTION__, node- > >node_info.nodeId); > + d2n_msg_free(d2n_msg); > + } > +} > + > +/** > * Logs to saflog if active > * @param priority > * @param format ------------------------------------------------------------------------------ Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. Written by three acclaimed leaders in the field, this first edition is now available. Download your free book today! http://p.sf.net/sfu/13534_NeoTech _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel