please ignore this, will send an updated one.

Mathi.

----- mathi.naic...@oracle.com wrote:

> osaf/services/saf/cpsv/cpnd/cpnd_amf.c              |  13
> ++++++++++++-
>  osaf/services/saf/cpsv/cpnd/scripts/osaf-ckptnd.in  |  13
> +++++++++++++
>  osaf/services/saf/glsv/glnd/glnd_amf.c              |  12
> ++++++++++++
>  osaf/services/saf/glsv/glnd/scripts/osaf-lcknd.in   |  13
> +++++++++++++
>  osaf/services/saf/immsv/immnd/immnd_amf.c           |  10 ++++++++++
>  osaf/services/saf/immsv/immnd/scripts/osaf-immnd.in |  18
> ++++++++++++++++++
>  osaf/services/saf/mqsv/mqnd/mqnd_amf.c              |  10 ++++++++++
>  osaf/services/saf/mqsv/mqnd/scripts/osaf-msgnd.in   |  13
> +++++++++++++
>  osaf/services/saf/smfsv/smfnd/scripts/osaf-smfnd.in |  13
> +++++++++++++
>  osaf/services/saf/smfsv/smfnd/smfnd_amf.c           |  10 ++++++++++
>  10 files changed, 124 insertions(+), 1 deletions(-)
> 
> 
> amf-adm restart <DN of of OpenSAF node director>  can fail in some
> occassions because
> at the time of re-instantiation the previously running NodeDirector
> process did not exit completely.
> This patch creates a temporary term_state_file from inside the node
> director callback.
> The existence of this file will be checked from inside the component's
> instantation script and
> subsequently a kill of the process will be attempted before
> re-spawning that Node Director.
> 
> diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_amf.c
> b/osaf/services/saf/cpsv/cpnd/cpnd_amf.c
> --- a/osaf/services/saf/cpsv/cpnd/cpnd_amf.c
> +++ b/osaf/services/saf/cpsv/cpnd/cpnd_amf.c
> @@ -36,6 +36,7 @@
>  
>  #include "cpnd.h"
>  
> +static const char *term_state_file = PKGPIDDIR
> "/osafckptnd_termstate";
> 
> /****************************************************************************
>   * Name          : cpnd_saf_health_chk_callback
>   *
> @@ -232,13 +233,23 @@ void cpnd_amf_comp_terminate_callback(Sa
>  {
>       CPND_CB *cb = NULL;
>       SaAisErrorT saErr = SA_AIS_OK;
> +     int fd;
> +     TRACE_ENTER();
>  
> -     TRACE_ENTER();
>       cb = ncshm_take_hdl(NCS_SERVICE_ID_CPND, gl_cpnd_cb_hdl);
>       if (cb == NULL) {
>               LOG_ER("cpnd cb take handle failed in amf term callback");
>               return;
>       }
> +
> +     fd = open(term_state_file, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
> +
> +     if (fd >=0)
> +             (void)close(fd);
> +     else
> +             LOG_NO("cannot create termstate file %s: %s",
> +                                     term_state_file, strerror(errno));
> +
>       saAmfResponse(cb->amf_hdl, invocation, saErr);
>       ncshm_give_hdl(gl_cpnd_cb_hdl);
>       LOG_NO("Received AMF component terminate callback, exiting");
> diff --git a/osaf/services/saf/cpsv/cpnd/scripts/osaf-ckptnd.in
> b/osaf/services/saf/cpsv/cpnd/scripts/osaf-ckptnd.in
> --- a/osaf/services/saf/cpsv/cpnd/scripts/osaf-ckptnd.in
> +++ b/osaf/services/saf/cpsv/cpnd/scripts/osaf-ckptnd.in
> @@ -15,6 +15,7 @@
>  osafdirfile=@sysconfdir@/@PACKAGE_NAME@/osafdir.conf
>  prog="osafckptnd"
>  initscript=`basename $0`
> +termfile=$pkgpiddir/$prog_termstate
>  
>  # Source LSB functions library
>  . /lib/lsb/init-functions
> @@ -34,6 +35,16 @@ lockfile=$lockdir/$initscript
>  RETVAL=0
>  
>  start() {
> +     #If the term file exists, it means instantiation is
> +     #attempted after a termination For eg:- during administrative
> +     #restart of a component. In this case, first try to kill
> +     #the component since it might be seen as still running while
> exiting
> +     #via the termination callback or termination scripts(in case of
> NPI).
> +     #Note: start_daemon -f may also be used to create another copy of
> the daemon,
> +     #but the behaviour of -f option has not been tested yet! 
> +
> +     [ -e $termfile ] && killproc -p$pidfile $binary
> +
>       export LD_LIBRARY_PATH=$pkglibdir:$LD_LIBRARY_PATH
>       [ -x $binary ] || exit 5
>       echo -n "Starting $prog: "
> @@ -41,6 +52,7 @@ start() {
>       RETVAL=$?
>       if [ $RETVAL -eq 0 ]; then
>               touch $lockfile
> +             rm -f $termfile
>               log_success_msg
>       else
>               log_failure_msg
> @@ -55,6 +67,7 @@ stop() {
>       if [ $RETVAL -eq 0 ] || [ $RETVAL -eq 7 ]; then
>               rm -f $lockfile
>               log_success_msg
> +             rm -f $termfile
>               RETVAL=0
>       else
>               log_failure_msg
> diff --git a/osaf/services/saf/glsv/glnd/glnd_amf.c
> b/osaf/services/saf/glsv/glnd/glnd_amf.c
> --- a/osaf/services/saf/glsv/glnd/glnd_amf.c
> +++ b/osaf/services/saf/glsv/glnd/glnd_amf.c
> @@ -45,6 +45,7 @@ void glnd_amf_CSI_set_callback(SaInvocat
>  void glnd_amf_csi_rmv_callback(SaInvocationT invocation,
>                              const SaNameT *compName, const SaNameT *csiName,
> SaAmfCSIFlagsT csiFlags);
>  
> +static const char *term_state_file = PKGPIDDIR
> "/osaflcknd_termstate";
> 
> /****************************************************************************
>   * Name          : glnd_saf_health_chk_callback
>   *
> @@ -114,17 +115,28 @@ void glnd_amf_comp_terminate_callback(Sa
>       GLND_CB *glnd_cb;
>       SaAisErrorT error = SA_AIS_OK;
>       TRACE_ENTER2("Component Name: %s", compName->value);
> +     int fd;
>  
>       /* take the handle */
>       glnd_cb = (GLND_CB *)m_GLND_TAKE_GLND_CB;
>       if (!glnd_cb) {
>               LOG_ER("GLND cb take handle failed");
>       } else {
> +
> +             fd = open(term_state_file, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
> +
> +             if (fd >=0)
> +                     (void)close(fd);
> +             else
> +                     LOG_NO("cannot create termstate file %s: %s",
> +                                     term_state_file, strerror(errno));
> +
>               if (saAmfResponse(glnd_cb->amf_hdl, invocation, error) !=
> SA_AIS_OK)
>                       LOG_ER("GLND amf response failed");
>               /* giveup the handle */
>               m_GLND_GIVEUP_GLND_CB;
>       }
> +
>       LOG_NO("Received AMF component terminate callback, exiting");
>       TRACE_LEAVE();
>  
> diff --git a/osaf/services/saf/glsv/glnd/scripts/osaf-lcknd.in
> b/osaf/services/saf/glsv/glnd/scripts/osaf-lcknd.in
> --- a/osaf/services/saf/glsv/glnd/scripts/osaf-lcknd.in
> +++ b/osaf/services/saf/glsv/glnd/scripts/osaf-lcknd.in
> @@ -15,6 +15,7 @@
>  osafdirfile=@sysconfdir@/@PACKAGE_NAME@/osafdir.conf
>  prog="osaflcknd"
>  initscript=`basename $0`
> +termfile=$pkgpiddir/$prog_termstate
>  
>  # Source LSB functions library
>  . /lib/lsb/init-functions
> @@ -34,6 +35,16 @@ lockfile=$lockdir/$initscript
>  RETVAL=0
>  
>  start() {
> +     #If the term file exists, it means instantiation is
> +     #attempted after a termination For eg:- during administrative
> +     #restart of a component. In this case, first try to kill
> +     #the component since it might be seen as still running while
> exiting
> +     #via the termination callback or termination scripts(in case of
> NPI).
> +     #Note: start_daemon -f may also be used to create another copy of
> the daemon,
> +     #but the behaviour of -f option has not been tested yet! 
> +
> +     [ -e $termfile ] && killproc -p$pidfile $binary
> +
>       export LD_LIBRARY_PATH=$pkglibdir:$LD_LIBRARY_PATH
>       [ -x $binary ] || exit 5
>       echo -n "Starting $prog: "
> @@ -41,6 +52,7 @@ start() {
>       RETVAL=$?
>       if [ $RETVAL -eq 0 ]; then
>               touch $lockfile
> +             rm -f $termfile
>               log_success_msg
>       else
>               log_failure_msg
> @@ -55,6 +67,7 @@ stop() {
>       if [ $RETVAL -eq 0 ] || [ $RETVAL -eq 7 ]; then
>               rm -f $lockfile
>               log_success_msg
> +             rm -f $termfile
>               RETVAL=0
>       else
>               log_failure_msg
> diff --git a/osaf/services/saf/immsv/immnd/immnd_amf.c
> b/osaf/services/saf/immsv/immnd/immnd_amf.c
> --- a/osaf/services/saf/immsv/immnd/immnd_amf.c
> +++ b/osaf/services/saf/immsv/immnd/immnd_amf.c
> @@ -19,6 +19,7 @@
>  #include <nid_start_util.h>
>  #include "osaf_extended_name.h"
>  
> +static const char *term_state_file = PKGPIDDIR
> "/osafimmnd_termstate";
> 
> /****************************************************************************
>   * Name          : immnd_saf_health_chk_callback
>   *
> @@ -73,12 +74,21 @@ static void immnd_saf_health_chk_callbac
>  static void immnd_amf_comp_terminate_callback(SaInvocationT
> invocation, const SaNameT *compName)
>  {
>       TRACE_ENTER();
> +     int fd;
>       
>       if (immnd_cb->pbePid > 0)
>               kill(immnd_cb->pbePid, SIGTERM);
>       if (immnd_cb->syncPid > 0)
>               kill(immnd_cb->syncPid, SIGTERM);
>  
> +     fd = open(term_state_file, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
> +     
> +     if (fd >=0)
> +             (void)close(fd);
> +     else
> +             LOG_NO("cannot create termstate file %s: %s",
> +                                     term_state_file, strerror(errno));
> +
>       LOG_NO("Received AMF component terminate callback, exiting");
>       saAmfResponse(immnd_cb->amf_hdl, invocation, SA_AIS_OK);
>  
> diff --git a/osaf/services/saf/immsv/immnd/scripts/osaf-immnd.in
> b/osaf/services/saf/immsv/immnd/scripts/osaf-immnd.in
> --- a/osaf/services/saf/immsv/immnd/scripts/osaf-immnd.in
> +++ b/osaf/services/saf/immsv/immnd/scripts/osaf-immnd.in
> @@ -31,12 +31,17 @@ fi
>  binary=$pkglibdir/$prog
>  pidfile=$pkgpiddir/$prog.pid
>  lockfile=$lockdir/$initscript
> +termfile=$pkgpiddir/$prog_termstate
>  
>  RETVAL=0
>  NIDSERV="IMMND"
>  COMPNAMEFILE=$pkglocalstatedir/immnd_comp_name
>  
>  start() {
> +     # remove any termination file created previously via
> +     # AMF component termination callback
> +     rm -f $termfile
> +
>       export LD_LIBRARY_PATH=$pkglibdir:$LD_LIBRARY_PATH
>       [ -p $NIDFIFO ] || exit 1
>          if [ ! -x $binary ]; then
> @@ -58,6 +63,16 @@ start() {
>  }
>  
>  instantiate() {
> +     #If the term file exists, it means instantiation is
> +     #attempted after a termination For eg:- during administrative
> +     #restart of a component. In this case, first try to kill
> +     #the component since it might be seen as still running while
> exiting
> +     #via the termination callback or termination scripts(in case of
> NPI).
> +     #Note: start_daemon -f may also be used to create another copy of
> the daemon,
> +     #but the behaviour of -f option has not been tested yet! 
> +
> +     [ -e $termfile ] && killproc -p$pidfile $binary
> +
>       echo -n "AMF Instantiating $prog: "
>       echo $SA_AMF_COMPONENT_NAME > $COMPNAMEFILE
>       pidofproc -p $pidfile $binary
> @@ -71,9 +86,11 @@ instantiate() {
>       fi
>       if [ $RETVAL -eq 0 ]; then
>               log_success_msg
> +             rm -f $termfile
>       else
>               log_failure_msg
>       fi
> +
>       return $RETVAL
>  }
>  
> @@ -86,6 +103,7 @@ stop() {
>       if [ $RETVAL -eq 0 ] || [ $RETVAL -eq 7 ]; then
>               rm -f $lockfile
>               rm -f $COMPNAMEFILE
> +             rm -f $termfile
>               log_success_msg
>               RETVAL=0
>       else
> diff --git a/osaf/services/saf/mqsv/mqnd/mqnd_amf.c
> b/osaf/services/saf/mqsv/mqnd/mqnd_amf.c
> --- a/osaf/services/saf/mqsv/mqnd/mqnd_amf.c
> +++ b/osaf/services/saf/mqsv/mqnd/mqnd_amf.c
> @@ -47,6 +47,7 @@ static void mqnd_amf_CSI_set_callback(Sa
>                                     const SaNameT *compName,
>                                     SaAmfHAStateT haState, 
> SaAmfCSIDescriptorT csiDescriptor);
>  
> +static const char *term_state_file = PKGPIDDIR
> "/osafmsgnd_termstate";
> 
> /****************************************************************************
>   * Name          : mqnd_saf_health_chk_callback
>   *
> @@ -227,6 +228,7 @@ static void mqnd_amf_comp_terminate_call
>       TRACE_ENTER();
>  
>       uint32_t cb_hdl = m_MQND_GET_HDL();
> +     int fd;
>  
>       /* Get the CB from the handle */
>       mqnd_cb = ncshm_take_hdl(NCS_SERVICE_ID_MQND, cb_hdl);
> @@ -236,6 +238,14 @@ static void mqnd_amf_comp_terminate_call
>               return;
>       }
>  
> +     fd = open(term_state_file, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
> +
> +     if (fd >=0)
> +             (void)close(fd);
> +     else
> +             LOG_NO("cannot create termstate file %s: %s",
> +                                     term_state_file, strerror(errno));
> +
>       saAmfResponse(mqnd_cb->amf_hdl, invocation, saErr);
>       LOG_ER("Amf Terminate Callback called");
>  
> diff --git a/osaf/services/saf/mqsv/mqnd/scripts/osaf-msgnd.in
> b/osaf/services/saf/mqsv/mqnd/scripts/osaf-msgnd.in
> --- a/osaf/services/saf/mqsv/mqnd/scripts/osaf-msgnd.in
> +++ b/osaf/services/saf/mqsv/mqnd/scripts/osaf-msgnd.in
> @@ -15,6 +15,7 @@
>  osafdirfile=@sysconfdir@/@PACKAGE_NAME@/osafdir.conf
>  prog="osafmsgnd"
>  initscript=`basename $0`
> +termfile=$pkgpiddir/$prog_termstate
>  
>  # Source LSB functions library
>  . /lib/lsb/init-functions
> @@ -34,6 +35,16 @@ lockfile=$lockdir/$initscript
>  RETVAL=0
>  
>  start() {
> +     #If the term file exists, it means instantiation is
> +     #attempted after a termination For eg:- during administrative
> +     #restart of a component. In this case, first try to kill
> +     #the component since it might be seen as still running while
> exiting
> +     #via the termination callback or termination scripts(in case of
> NPI).
> +     #Note: start_daemon -f may also be used to create another copy of
> the daemon,
> +     #but the behaviour of -f option has not been tested yet! 
> +
> +     [ -e $termfile ] && killproc -p$pidfile $binary
> +
>       export LD_LIBRARY_PATH=$pkglibdir:$LD_LIBRARY_PATH
>       [ -x $binary ] || exit 5
>       echo -n "Starting $prog: "
> @@ -42,6 +53,7 @@ start() {
>       if [ $RETVAL -eq 0 ]; then
>               touch $lockfile
>               log_success_msg
> +             rm -f $termfile
>       else
>               log_failure_msg
>       fi
> @@ -55,6 +67,7 @@ stop() {
>       if [ $RETVAL -eq 0 ] || [ $RETVAL -eq 7 ]; then
>               rm -f $lockfile
>               log_success_msg
> +             rm -f $termfile
>               RETVAL=0
>       else
>               log_failure_msg
> diff --git a/osaf/services/saf/smfsv/smfnd/scripts/osaf-smfnd.in
> b/osaf/services/saf/smfsv/smfnd/scripts/osaf-smfnd.in
> --- a/osaf/services/saf/smfsv/smfnd/scripts/osaf-smfnd.in
> +++ b/osaf/services/saf/smfsv/smfnd/scripts/osaf-smfnd.in
> @@ -15,6 +15,7 @@
>  osafdirfile=@sysconfdir@/@PACKAGE_NAME@/osafdir.conf
>  prog="osafsmfnd"
>  initscript=`basename $0`
> +termfile=$pkgpiddir/$prog_termstate
>  
>  # Source LSB functions library
>  . /lib/lsb/init-functions
> @@ -34,6 +35,16 @@ lockfile=$lockdir/$initscript
>  RETVAL=0
>  
>  start() {
> +     #If the term file exists, it means instantiation is
> +     #attempted after a termination For eg:- during administrative
> +     #restart of a component. In this case, first try to kill
> +     #the component since it might be seen as still running while
> exiting
> +     #via the termination callback or termination scripts(in case of
> NPI).
> +     #Note: start_daemon -f may also be used to create another copy of
> the daemon,
> +     #but the behaviour of -f option has not been tested yet! 
> +
> +     [ -e $termfile ] && killproc -p$pidfile $binary
> +
>       export LD_LIBRARY_PATH=$pkglibdir:$LD_LIBRARY_PATH
>       [ -x $binary ] || exit 5
>       echo -n "Starting $prog: "
> @@ -42,6 +53,7 @@ start() {
>       if [ $RETVAL -eq 0 ]; then
>               touch $lockfile
>               log_success_msg
> +             rm -f $termfile
>       else
>               log_failure_msg
>       fi
> @@ -55,6 +67,7 @@ stop() {
>       if [ $RETVAL -eq 0 ] || [ $RETVAL -eq 7 ]; then
>               rm -f $lockfile
>               log_success_msg
> +             rm -f $termfile
>               RETVAL=0
>       else
>               log_failure_msg
> diff --git a/osaf/services/saf/smfsv/smfnd/smfnd_amf.c
> b/osaf/services/saf/smfsv/smfnd/smfnd_amf.c
> --- a/osaf/services/saf/smfsv/smfnd/smfnd_amf.c
> +++ b/osaf/services/saf/smfsv/smfnd/smfnd_amf.c
> @@ -21,6 +21,7 @@
>  
>  #include "smfnd.h"
>  
> +static const char *term_state_file = PKGPIDDIR
> "/osafsmfnd_termstate";
> 
> /****************************************************************************
>   * Name          : amf_health_chk_callback
>   *
> @@ -107,6 +108,15 @@ static void amf_csi_set_callback(SaInvoc
>  static void amf_comp_terminate_callback(SaInvocationT invocation,
> const SaNameT * compName)
>  {
>       TRACE_ENTER();
> +     int fd;
> +
> +     fd = open(term_state_file, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
> +     
> +     if (fd >=0)
> +             (void)close(fd);
> +     else
> +             LOG_NO("cannot create termstate file %s: %s",
> +                                     term_state_file, strerror(errno));
>  
>       saAmfResponse(smfnd_cb->amf_hdl, invocation, SA_AIS_OK);
>  
> 
> ------------------------------------------------------------------------------
> One dashboard for servers and applications across
> Physical-Virtual-Cloud 
> Widest out-of-the-box monitoring support with 50+ applications
> Performance metrics, stats and reports that give you Actionable
> Insights
> Deep dive visibility with transaction tracing using APM Insight.
> http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
> _______________________________________________
> Opensaf-devel mailing list
> Opensaf-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/opensaf-devel

------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to