Hi Minh,
        Ack for patches (1725_01_V5_intro_new_rta_states_longDn.diff, 
1725_02_V2_resend_su_si_assign_msg_longDn.diff, 
1725_02_V2_bugfix_resend_buffer_in_set_leds.diff and 
1725_02_V2_bugfix_1_honor_cluster_sync_timer.diff) for phase 1 with the 
following comments:

1. Let us document that the nodegroup is not supported. We will remove the 
excerpts  if we can fix it after FC and before RC.
2. Reported issue of sg unstable, you can work after FC. But this is mandatory 
to fix before RC/GA.
3. I think, the versioning changes are not required (at least between 
Amfd-Amfd), can you please confirm.

The following are the tests done:

Tested the following operations by responding respective callback or 
script(mentioned below) in two cases:
1. After headless and before recovery.
2. After headless recovery.

SU:
========================
lock: Quisced, Act, Standby(for SU3)
unlock: Act
shutdown: Quiscing.
lock-in : terminate
unlock-in: instantiate
========================

Comp:
========================
Restart: Instantiate
========================

SI:
========================
Unlock: Act
Lock: Quisced, Remove
Shutdown: Quiscing, Remove
SI-Swap: quisced, Act, Standby
========================

SG:
========================
Lock: quisced
Unlock: Act
Lock-in: Terminate
Unlock-in: Instantiate
========================

Node:
========================
Lock: Quisced
Unlock: Act
========================

Node Group:
========================
Unlock: Act
Lock: this test case failed.
========================

Thanks
-Nagu

> -----Original Message-----
> From: Nagendra Kumar
> Sent: 25 August 2016 17:07
> To: Minh Hon Chau; hans.nordeb...@ericsson.com; Praveen Malviya;
> gary....@dektech.com.au; long.hb.ngu...@dektech.com.au
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: Re: [devel] [PATCH 2 of 2] AMFND: Admin operation continuation if
> csi callback completes during headless [#1725 part 1] V1
> 
> Further testing results:
> Node group lock has resulted in SG unstable. Logs and configuration file
> attached.
> 
> Configuration : SC-1, PL-3 and PL-4.
> 
> Steps:
> 
> 1. Unlock SU1(on PL-3), SU2 and SU3 (Both on PL-4).
> 2. Create node group of PL-3 and PL-4:
> 3. Lock the node group.
> amf-adm lock  safAmfNodeGroup=nagu,safAmfCluster=myAmfCluster
> 4. Keep gdb in csi set callback, stop SC-1 and start respond OK from csi set
> callback and start SC-1.
> 
> SG becomes unstable if you try to unlock the Node group:
> Aug 25 16:57:06 PM_SC-1 osafamfd[2166]: NO
> 'safSg=AmfDemo_2N,safApp=AmfDemo1' is in unstable/transition state
> 
> 
> Thanks
> -Nagu
> 
> > -----Original Message-----
> > From: Nagendra Kumar
> > Sent: 24 August 2016 16:58
> > To: Minh Hon Chau; hans.nordeb...@ericsson.com; Praveen Malviya;
> > gary....@dektech.com.au; long.hb.ngu...@dektech.com.au
> > Cc: opensaf-devel@lists.sourceforge.net
> > Subject: Re: [devel] [PATCH 2 of 2] AMFND: Admin operation
> > continuation if csi callback completes during headless [#1725 part 1]
> > V1
> >
> > The below is the assignments after the test case (SU2 has standby
> > assignment):
> >
> > PM_SC-1:/home/nagu/views/staging-1725 # /etc/init.d/opensafd  status
> >
> safSISU=safSu=SU2\,safSg=AmfDemo_2N\,safApp=AmfDemo1,safSi=AmfDe
> > mo1,safApp=AmfDemo1
> >         saAmfSISUHAState=STANDBY(2)
> > safSISU=safSu=PL-
> > 3\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed3,safApp=OpenSAF
> >         saAmfSISUHAState=ACTIVE(1)
> > safSISU=safSu=PL-
> > 4\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed2,safApp=OpenSAF
> >         saAmfSISUHAState=ACTIVE(1)
> > safSISU=safSu=SC-
> > 2\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed4,safApp=OpenSAF
> >         saAmfSISUHAState=ACTIVE(1)
> > safSISU=safSu=SC-
> > 1\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed1,safApp=OpenSAF
> >         saAmfSISUHAState=ACTIVE(1)
> > safSISU=safSu=SC-2\,safSg=2N\,safApp=OpenSAF,safSi=SC-
> > 2N,safApp=OpenSAF
> >         saAmfSISUHAState=STANDBY(2)
> > safSISU=safSu=SC-1\,safSg=2N\,safApp=OpenSAF,safSi=SC-
> > 2N,safApp=OpenSAF
> >         saAmfSISUHAState=ACTIVE(1)
> >
> > Thanks
> > -Nagu
> >
> > > -----Original Message-----
> > > From: Nagendra Kumar
> > > Sent: 24 August 2016 16:55
> > > To: Minh Hon Chau; hans.nordeb...@ericsson.com; Praveen Malviya;
> > > gary....@dektech.com.au; long.hb.ngu...@dektech.com.au
> > > Cc: opensaf-devel@lists.sourceforge.net
> > > Subject: Re: [devel] [PATCH 2 of 2] AMFND: Admin operation
> > > continuation if csi callback completes during headless [#1725 part
> > > 1]
> > > V1
> > >
> > > Hi Minh,
> > >   With 1725_phase_1_V2.tgz, the below email TC has failed. Please
> > find
> > > the traces attached along with the configuration in the ticket.
> > >
> > > Thanks
> > > -Nagu
> > >
> > > > -----Original Message-----
> > > > From: Nagendra Kumar
> > > > Sent: 23 August 2016 15:15
> > > > To: Minh Hon Chau; hans.nordeb...@ericsson.com; Praveen Malviya;
> > > > gary....@dektech.com.au; long.hb.ngu...@dektech.com.au
> > > > Cc: opensaf-devel@lists.sourceforge.net
> > > > Subject: Re: [devel] [PATCH 2 of 2] AMFND: Admin operation
> > > > continuation if csi callback completes during headless [#1725 part
> > > > 1]
> > > > V1
> > > >
> > > > Hi Minh,
> > > >         The following SU lock case is not working. This issue will exist
> > > > for all the flows, so please check.
> > > >
> > > > Configuration and traces attached in the ticket.
> > > >
> > > > Steps:
> > > > 1. Start SC-1, SC-2, PL-3 and PL-4. Run the following command:
> > > > immcfg -f  /tmp/AppConfig-2N-1725.xml amf-adm unlock-in
> > > > safSu=SU1,safSg=AmfDemo_2N,safApp=AmfDemo1
> > > > amf-adm unlock-in safSu=SU2,safSg=AmfDemo_2N,safApp=AmfDemo1
> > > > amf-adm unlock-in safSu=SU3,safSg=AmfDemo_2N,safApp=AmfDemo1
> > > > amf-adm unlock safSu=SU1,safSg=AmfDemo_2N,safApp=AmfDemo1
> > > > amf-adm unlock safSu=SU2,safSg=AmfDemo_2N,safApp=AmfDemo1
> > > > amf-adm unlock safSu=SU3,safSg=AmfDemo_2N,safApp=AmfDemo1
> > > >
> > > > Assignments are:
> > > > PM_SC-1:/home/nagu/views/staging-1725 # /etc/init.d/opensafd
> > > > status
> > > > safSISU=safSu=SC-
> > > > 1\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed1,safApp=OpenSAF
> > > >         saAmfSISUHAState=ACTIVE(1)
> > > > safSISU=safSu=SC-1\,safSg=2N\,safApp=OpenSAF,safSi=SC-
> > > > 2N,safApp=OpenSAF
> > > >         saAmfSISUHAState=ACTIVE(1)
> > > > safSISU=safSu=SC-
> > > > 2\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed2,safApp=OpenSAF
> > > >         saAmfSISUHAState=ACTIVE(1)
> > > > safSISU=safSu=SC-2\,safSg=2N\,safApp=OpenSAF,safSi=SC-
> > > > 2N,safApp=OpenSAF
> > > >         saAmfSISUHAState=STANDBY(2)
> > > > safSISU=safSu=PL-
> > > > 4\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed3,safApp=OpenSAF
> > > >         saAmfSISUHAState=ACTIVE(1)
> > > > safSISU=safSu=PL-
> > > > 3\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed4,safApp=OpenSAF
> > > >         saAmfSISUHAState=ACTIVE(1)
> > > >
> > >
> >
> safSISU=safSu=SU2\,safSg=AmfDemo_2N\,safApp=AmfDemo1,safSi=AmfDe
> > > > mo1,safApp=AmfDemo1
> > > >         saAmfSISUHAState=STANDBY(2)
> > > >
> > >
> >
> safSISU=safSu=SU1\,safSg=AmfDemo_2N\,safApp=AmfDemo1,safSi=AmfDe
> > > > mo1,safApp=AmfDemo1
> > > >         saAmfSISUHAState=ACTIVE(1)
> > > >
> > > > 2. Issue lock on SU1.
> > > > amf-adm lock safSu=SU1,safSg=AmfDemo_2N,safApp=AmfDemo1
> > > > And keep gdb in csi_set callback. Stop SC-1 and SC-2.
> > > > Send Ok from csi_set callback.
> > > >
> > > > 3. Start SC-1 and SC-2.
> > > >
> > > > 4. Assignment to components of SU2 is not given and assignments of
> > > > SU2 still shows Standby.
> > > > PM_SC-1:/home/nagu/views/staging-1725 # /etc/init.d/opensafd
> > > > status
> > > >
> > >
> >
> safSISU=safSu=SU2\,safSg=AmfDemo_2N\,safApp=AmfDemo1,safSi=AmfDe
> > > > mo1,safApp=AmfDemo1
> > > >         saAmfSISUHAState=STANDBY(2)
> > > > safSISU=safSu=SC-2\,safSg=2N\,safApp=OpenSAF,safSi=SC-
> > > > 2N,safApp=OpenSAF
> > > >         saAmfSISUHAState=STANDBY(2)
> > > > safSISU=safSu=SC-
> > > > 1\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed1,safApp=OpenSAF
> > > >         saAmfSISUHAState=ACTIVE(1)
> > > > safSISU=safSu=PL-
> > > > 4\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed3,safApp=OpenSAF
> > > >         saAmfSISUHAState=ACTIVE(1)
> > > > safSISU=safSu=PL-
> > > > 3\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed2,safApp=OpenSAF
> > > >         saAmfSISUHAState=ACTIVE(1)
> > > > safSISU=safSu=SC-
> > > > 2\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed4,safApp=OpenSAF
> > > >         saAmfSISUHAState=ACTIVE(1)
> > > > safSISU=safSu=SC-1\,safSg=2N\,safApp=OpenSAF,safSi=SC-
> > > > 2N,safApp=OpenSAF
> > > >         saAmfSISUHAState=ACTIVE(1)
> > > >
> > > >
> > > > Thanks
> > > > -Nagu
> > > >
> > > > > -----Original Message-----
> > > > > From: Minh Hon Chau [mailto:minh.c...@dektech.com.au]
> > > > > Sent: 05 August 2016 02:50
> > > > > To: hans.nordeb...@ericsson.com; Nagendra Kumar; Praveen
> > > > > Malviya; gary....@dektech.com.au;
> long.hb.ngu...@dektech.com.au;
> > > > > minh.c...@dektech.com.au
> > > > > Cc: opensaf-devel@lists.sourceforge.net
> > > > > Subject: [PATCH 2 of 2] AMFND: Admin operation continuation if
> > > > > csi
> > > > callback
> > > > > completes during headless [#1725 part 1] V1
> > > > >
> > > > >  osaf/services/saf/amf/amfnd/di.cc             |  199
> +++++++++++++++++-
> > ---
> > > --
> > > > --
> > > > >  osaf/services/saf/amf/amfnd/include/avnd_di.h |    1 +
> > > > >  2 files changed, 134 insertions(+), 66 deletions(-)
> > > > >
> > > > >
> > > > > The patch buffers susi_resp_msg during headless stage and resend
> > > > > it to AMFD after headless.
> > > > >
> > > > > diff --git a/osaf/services/saf/amf/amfnd/di.cc
> > > > > b/osaf/services/saf/amf/amfnd/di.cc
> > > > > --- a/osaf/services/saf/amf/amfnd/di.cc
> > > > > +++ b/osaf/services/saf/amf/amfnd/di.cc
> > > > > @@ -804,11 +804,6 @@ uint32_t avnd_di_susi_resp_send(AVND_CB
> > > > >       if (cb->term_state ==
> > > > > AVND_TERM_STATE_OPENSAF_SHUTDOWN_STARTED)
> > > > >               return rc;
> > > > >
> > > > > -     if (cb->is_avd_down == true) {
> > > > > -        m_AVND_SU_ALL_SI_RESET(su);
> > > > > -             return rc;
> > > > > -     }
> > > > > -
> > > > >       // should be in assignment pending state to be here
> > > > >       osafassert(m_AVND_SU_IS_ASSIGN_PEND(su));
> > > > >
> > > > > @@ -819,64 +814,76 @@ uint32_t
> avnd_di_susi_resp_send(AVND_CB
> > > > >       TRACE_ENTER2("Sending Resp su=%s, si=%s, curr_state=%u,
> > > > > prv_state=%u", su->name.value, curr_si->name.value,curr_si-
> > > > > >curr_state,curr_si->prv_state);
> > > > >       /* populate the susi resp msg */
> > > > >       msg.info.avd = new AVSV_DND_MSG();
> > > > > -        msg.type = AVND_MSG_AVD;
> > > > > -        msg.info.avd->msg_type =
> AVSV_N2D_INFO_SU_SI_ASSIGN_MSG;
> > > > > -        msg.info.avd->msg_info.n2d_su_si_assign.msg_id = ++(cb-
> > > > > >snd_msg_id);
> > > > > -        msg.info.avd->msg_info.n2d_su_si_assign.node_id = cb-
> > > > > >node_info.nodeId;
> > > > > -        if (si) {
> > > > > -                msg.info.avd->msg_info.n2d_su_si_assign.single_csi =
> > > > > -                        ((si->single_csi_add_rem_in_si ==
> AVSV_SUSI_ACT_BASE)
> > ?
> > > > > false : true);
> > > > > -        }
> > > > > -        TRACE("curr_assign_state '%u'", curr_si->curr_assign_state);
> > > > > -        msg.info.avd->msg_info.n2d_su_si_assign.msg_act =
> > > > > -
> (m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_ASSIGNED(curr_si)
> > > ||
> > > > > -
> > m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_ASSIGNING(curr_si))
> > > ?
> > > > > -                ((!curr_si->prv_state) ? AVSV_SUSI_ACT_ASGN :
> > > > > AVSV_SUSI_ACT_MOD) : AVSV_SUSI_ACT_DEL;
> > > > > -        msg.info.avd->msg_info.n2d_su_si_assign.su_name = su-
> >name;
> > > > > -        if (si) {
> > > > > -                msg.info.avd->msg_info.n2d_su_si_assign.si_name = si-
> > >name;
> > > > > -                if (AVSV_SUSI_ACT_ASGN == 
> > > > > si->single_csi_add_rem_in_si) {
> > > > > -                        TRACE("si->curr_assign_state '%u'", curr_si-
> > > > > >curr_assign_state);
> > > > > -                        
> > > > > msg.info.avd->msg_info.n2d_su_si_assign.msg_act =
> > > > > -
> > > > > (m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_ASSIGNED(curr_si) ||
> > > > > -
> > > > > m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_ASSIGNING(curr_si)) ?
> > > > > -                                AVSV_SUSI_ACT_ASGN : 
> > > > > AVSV_SUSI_ACT_DEL;
> > > > > -                }
> > > > > -        }
> > > > > -        msg.info.avd->msg_info.n2d_su_si_assign.ha_state =
> > > > > -                (SA_AMF_HA_QUIESCING == curr_si->curr_state) ?
> > > > > SA_AMF_HA_QUIESCED : curr_si->curr_state;
> > > > > -        msg.info.avd->msg_info.n2d_su_si_assign.error =
> > > > > -
> (m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_ASSIGNED(curr_si)
> > > ||
> > > > > -
> > m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_REMOVED(curr_si))
> > > ?
> > > > > NCSCC_RC_SUCCESS : NCSCC_RC_FAILURE;
> > > > > +     msg.type = AVND_MSG_AVD;
> > > > > +     msg.info.avd->msg_type =
> AVSV_N2D_INFO_SU_SI_ASSIGN_MSG;
> > > > > +     msg.info.avd->msg_info.n2d_su_si_assign.node_id = cb-
> > > > > >node_info.nodeId;
> > > > > +     if (si) {
> > > > > +             msg.info.avd->msg_info.n2d_su_si_assign.single_csi
> =
> > > > > +                             ((si->single_csi_add_rem_in_si ==
> > > > > AVSV_SUSI_ACT_BASE) ? false : true);
> > > > > +     }
> > > > > +     TRACE("curr_assign_state '%u'", curr_si->curr_assign_state);
> > > > > +     msg.info.avd->msg_info.n2d_su_si_assign.msg_act =
> > > > > +
> > > > >       (m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_ASSIGNED(curr_si) ||
> > > > > +
> > > > >       m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_ASSIGNING(curr_si)) ?
> > > > > +                             ((!curr_si->prv_state) ?
> > > > > AVSV_SUSI_ACT_ASGN : AVSV_SUSI_ACT_MOD) :
> AVSV_SUSI_ACT_DEL;
> > > > > +     msg.info.avd->msg_info.n2d_su_si_assign.su_name = su-
> >name;
> > > > > +     if (si) {
> > > > > +             msg.info.avd->msg_info.n2d_su_si_assign.si_name =
> si-
> > > > > >name;
> > > > > +             if (AVSV_SUSI_ACT_ASGN == si-
> >single_csi_add_rem_in_si) {
> > > > > +                     TRACE("si->curr_assign_state '%u'", curr_si-
> > > > > >curr_assign_state);
> > > > > +                             msg.info.avd-
> > > > > >msg_info.n2d_su_si_assign.msg_act =
> > > > > +
> > > > >       (m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_ASSIGNED(curr_si) ||
> > > > > +
> > > > >       m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_ASSIGNING(curr_si)) ?
> > > > > +                                     AVSV_SUSI_ACT_ASGN :
> > > > > AVSV_SUSI_ACT_DEL;
> > > > > +             }
> > > > > +     }
> > > > > +     msg.info.avd->msg_info.n2d_su_si_assign.ha_state =
> > > > > +                     (SA_AMF_HA_QUIESCING == curr_si-
> >curr_state) ?
> > > > > SA_AMF_HA_QUIESCED : curr_si->curr_state;
> > > > > +     msg.info.avd->msg_info.n2d_su_si_assign.error =
> > > > > +
> > > > >       (m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_ASSIGNED(curr_si) ||
> > > > > +
> > > > >       m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_REMOVED(curr_si)) ?
> > > > > +NCSCC_RC_SUCCESS : NCSCC_RC_FAILURE;
> > > > >
> > > > > -        if (msg.info.avd->msg_info.n2d_su_si_assign.msg_act ==
> > > > > AVSV_SUSI_ACT_ASGN)
> > > > > -                osafassert(si);
> > > > > +     if (msg.info.avd->msg_info.n2d_su_si_assign.msg_act ==
> > > > > AVSV_SUSI_ACT_ASGN)
> > > > > +             osafassert(si);
> > > > >
> > > > > -        /* send the msg to AvD */
> > > > > -        TRACE("Sending. msg_id'%u', node_id'%u', msg_act'%u', su'%s',
> > > > si'%s',
> > > > > ha_state'%u', error'%u', single_csi'%u'",
> > > > > -              msg.info.avd->msg_info.n2d_su_si_assign.msg_id,
> > > msg.info.avd-
> > > > > >msg_info.n2d_su_si_assign.node_id,
> > > > > -              msg.info.avd->msg_info.n2d_su_si_assign.msg_act,
> > > > msg.info.avd-
> > > > > >msg_info.n2d_su_si_assign.su_name.value,
> > > > > -              msg.info.avd->msg_info.n2d_su_si_assign.si_name.value,
> > > > > msg.info.avd->msg_info.n2d_su_si_assign.ha_state,
> > > > > -              msg.info.avd->msg_info.n2d_su_si_assign.error,
> > msg.info.avd-
> > > > > >msg_info.n2d_su_si_assign.single_csi);
> > > > > +     /* send the msg to AvD */
> > > > > +     TRACE("Sending. msg_id'%u', node_id'%u', msg_act'%u',
> su'%s',
> > > > > si'%s', ha_state'%u', error'%u', single_csi'%u'",
> > > > > +             msg.info.avd->msg_info.n2d_su_si_assign.msg_id,
> > > > > msg.info.avd->msg_info.n2d_su_si_assign.node_id,
> > > > > +             msg.info.avd->msg_info.n2d_su_si_assign.msg_act,
> > > > > msg.info.avd->msg_info.n2d_su_si_assign.su_name.value,
> > > > > +             msg.info.avd-
> >msg_info.n2d_su_si_assign.si_name.value,
> > > > > msg.info.avd->msg_info.n2d_su_si_assign.ha_state,
> > > > > +             msg.info.avd->msg_info.n2d_su_si_assign.error,
> > > > > +msg.info.avd->msg_info.n2d_su_si_assign.single_csi);
> > > > >
> > > > > -        if ((su->si_list.n_nodes > 1) && (si == nullptr)) {
> > > > > -                if (msg.info.avd->msg_info.n2d_su_si_assign.msg_act 
> > > > > ==
> > > > > AVSV_SUSI_ACT_DEL)
> > > > > -                        LOG_NO("Removed 'all SIs' from '%s'", su-
> >name.value);
> > > > > +     if ((su->si_list.n_nodes > 1) && (si == nullptr)) {
> > > > > +             if (msg.info.avd-
> >msg_info.n2d_su_si_assign.msg_act ==
> > > > > AVSV_SUSI_ACT_DEL)
> > > > > +                     LOG_NO("Removed 'all SIs' from '%s'", su-
> > > > > >name.value);
> > > > >
> > > > > -                if (msg.info.avd->msg_info.n2d_su_si_assign.msg_act 
> > > > > ==
> > > > > AVSV_SUSI_ACT_MOD)
> > > > > -                        LOG_NO("Assigned 'all SIs' %s of '%s'",
> > > > > -                               ha_state[msg.info.avd-
> > > > > >msg_info.n2d_su_si_assign.ha_state],
> > > > > -                               su->name.value);
> > > > > -        }
> > > > > +             if (msg.info.avd-
> >msg_info.n2d_su_si_assign.msg_act ==
> > > > > AVSV_SUSI_ACT_MOD)
> > > > > +                     LOG_NO("Assigned 'all SIs' %s of '%s'",
> > > > > +                                     ha_state[msg.info.avd-
> > > > > >msg_info.n2d_su_si_assign.ha_state],
> > > > > +                                     su->name.value);
> > > > > +     }
> > > > >
> > > > > -        rc = avnd_di_msg_send(cb, &msg);
> > > > > -        if (NCSCC_RC_SUCCESS == rc)
> > > > > -                msg.info.avd = 0;
> > > > > -
> > > > > -        /* we have completed the SU SI msg processing */
> > > > > -        if (su_assign_state_is_stable(su))
> > > > > -                m_AVND_SU_ASSIGN_PEND_RESET(su);
> > > > > -        m_AVND_SU_ALL_SI_RESET(su);
> > > > > +     if (cb->is_avd_down == true) {
> > > > > +             // We are in headless, buffer this msg
> > > > > +             msg.info.avd->msg_info.n2d_su_si_assign.msg_id =
> 0;
> > > > > +             if (avnd_diq_rec_add(cb, &msg) == nullptr) {
> > > > > +                     rc = NCSCC_RC_FAILURE;
> > > > > +             }
> > > > > +             m_AVND_SU_ALL_SI_RESET(su);
> > > > > +             LOG_NO("avnd_di_susi_resp_send() deferred as AMF
> > > > > director is offline");
> > > > > +     } else {
> > > > > +             // We are in normal cluster, send msg to director
> > > > > +             msg.info.avd->msg_info.n2d_su_si_assign.msg_id =
> ++(cb-
> > > > > >snd_msg_id);
> > > > > +             /* send the msg to AvD */
> > > > > +             rc = avnd_di_msg_send(cb, &msg);
> > > > > +             if (NCSCC_RC_SUCCESS == rc)
> > > > > +                     msg.info.avd = 0;
> > > > > +             /* we have completed the SU SI msg processing */
> > > > > +             if (su_assign_state_is_stable(su)) {
> > > > > +                     m_AVND_SU_ASSIGN_PEND_RESET(su);
> > > > > +             }
> > > > > +             m_AVND_SU_ALL_SI_RESET(su);
> > > > > +     }
> > > > >
> > > > >       /* free the contents of avnd message */
> > > > >       avnd_msg_content_free(cb, &msg); @@ -1255,14 +1262,7 @@ void
> > > > > avnd_diq_rec_del(AVND_CB *cb, AVND_
> > > > >       /* stop the AvD msg response timer */
> > > > >       if (m_AVND_TMR_IS_ACTIVE(rec->resp_tmr)) {
> > > > >               m_AVND_TMR_MSG_RESP_STOP(cb, *rec);
> > > > > -             // Resend msgs from queue because amfd dropped
> during
> > > > > sync
> > > > > -             if ((cb->dnd_list.head != nullptr)) {
> > > > > -                     TRACE("retransmit message to amfd");
> > > > > -                     AVND_DND_MSG_LIST *pending_rec = 0;
> > > > > -                     for (pending_rec = cb->dnd_list.head;
> pending_rec !=
> > > > > nullptr; pending_rec = pending_rec->next) {
> > > > > -                             avnd_diq_rec_send(cb, pending_rec);
> > > > > -                     }
> > > > > -             }
> > > > > +             avnd_diq_rec_send_buffered_msg(cb);
> > > > >               /* resend pg start track */
> > > > >               avnd_di_resend_pg_start_track(cb);
> > > > >       }
> > > > > @@ -1275,6 +1275,73 @@ void avnd_diq_rec_del(AVND_CB *cb,
> > AVND_
> > > > >       TRACE_LEAVE();
> > > > >       return;
> > > > >  }
> > > > >
> > > >
> > >
> >
> +/************************************************************
> > > > > ****************
> > > > > +  Name          : avnd_diq_rec_send_buffered_msg
> > > > > +
> > > > > +  Description   : Resend buffered msg
> > > > > +
> > > > > +  Arguments     : cb  - ptr to the AvND control block
> > > > > +
> > > > > +  Return Values : None.
> > > > > +
> > > > > +  Notes         : None.
> > > > >
> > > >
> > >
> >
> +*************************************************************
> > > > > **********
> > > > > +*******/ void avnd_diq_rec_send_buffered_msg(AVND_CB *cb) {
> > > > > +     TRACE_ENTER();
> > > > > +     // Resend msgs from queue because amfnd dropped during
> headless
> > > > > +     // or headless-synchronization
> > > > > +     if ((cb->dnd_list.head != nullptr)) {
> > > > > +             AVND_DND_MSG_LIST *pending_rec = 0;
> > > > > +             TRACE("Attach msg_id of buffered msg");
> > > > > +             bool found = true;
> > > > > +             while (found) {
> > > > > +                     found = false;
> > > > > +                     for (pending_rec = cb->dnd_list.head;
> pending_rec !=
> > > > > nullptr; pending_rec = pending_rec->next) {
> > > > > +                             if (pending_rec->msg.type ==
> > > > > AVND_MSG_AVD) {
> > > > > +                                     // At this moment, only
> oper_state
> > > > > msg needs to report to director
> > > > > +                                     if (pending_rec-
> >msg.info.avd-
> > > > > >msg_type == AVSV_N2D_INFO_SU_SI_ASSIGN_MSG &&
> > > > > +                                             pending_rec-
> >msg.info.avd-
> > > > > >msg_info.n2d_su_si_assign.msg_id == 0) {
> > > > > +
>       m_AVND_DIQ_REC_POP(cb,
> > > > > pending_rec); #if 0
> > > > > +                                             // only resend if this
> SUSI
> > > > > does exist
> > > > > +                                             AVND_SU *su =
> > > > > m_AVND_SUDB_REC_GET(cb->sudb,
> > > > > +
>       pending_rec-
> > > > > >msg.info.avd->msg_info.n2d_su_si_assign.su_name);
> > > > > +                                             if (su != nullptr &&
> su-
> > > > > >si_list.n_nodes > 0) { #endif
> > > > > +                                                     pending_rec-
> > > > > >msg.info.avd->msg_info.n2d_su_si_assign.msg_id =
> > > > > >++(cb->snd_msg_id);
> > > > > +
> > > > >       m_AVND_DIQ_REC_PUSH(cb, pending_rec);
> > > > > +
>       LOG_NO("Found and
> > > > > resend buffered su_si_assign msg for SU:'%s', "
> > > > > +
> > > > >       "SI:'%s', ha_state:'%u', msg_act:'%u', single_csi:'%u', "
> > > > > +
> > > > >       "error:'%u', msg_id:'%u'",
> > > > > +
> > > > >       pending_rec->msg.info.avd-
> > > > > >msg_info.n2d_su_si_assign.su_name.value,
> > > > > +
> > > > >       pending_rec->msg.info.avd-
> > > > > >msg_info.n2d_su_si_assign.si_name.value,
> > > > > +
> > > > >       pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.ha_state,
> > > > > +
> > > > >       pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_act,
> > > > > +
> > > > >
> > > > > pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.single_csi,
> > > > > +
> > > > >       pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.error,
> > > > > +
> > > > >       pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id);
> > > > > +
> > > > > +#if 0
> > > > > +                                             } else {
> > > > > +
> > > > >       avnd_msg_content_free(cb, &pending_rec->msg);
> > > > > +                                                     delete
> pending_rec;
> > > > > +                                                     pending_rec
> = cb-
> > > > > >dnd_list.head;
> > > > > +                                             }
> > > > > +#endif
> > > > > +                                             found = true;
> > > > > +                                     }
> > > > > +                             }
> > > > > +                     }
> > > > > +             }
> > > > > +             TRACE("retransmit message to amfd");
> > > > > +             for (pending_rec = cb->dnd_list.head; pending_rec !=
> > > > > +nullptr;
> > > > > pending_rec = pending_rec->next) {
> > > > > +                     avnd_diq_rec_send(cb, pending_rec);
> > > > > +             }
> > > > > +     }
> > > > > +     TRACE_LEAVE();
> > > > > +     return;
> > > > > +}
> > > > >
> > > > >
> > > > >
> > > >
> > >
> >
> /*************************************************************
> > > > > ***************
> > > > >    Name          : avnd_diq_rec_send
> > > > > diff --git a/osaf/services/saf/amf/amfnd/include/avnd_di.h
> > > > > b/osaf/services/saf/amf/amfnd/include/avnd_di.h
> > > > > --- a/osaf/services/saf/amf/amfnd/include/avnd_di.h
> > > > > +++ b/osaf/services/saf/amf/amfnd/include/avnd_di.h
> > > > > @@ -79,6 +79,7 @@ void avnd_di_msg_ack_process(struct avnd
> void
> > > > > avnd_diq_del(struct avnd_cb_tag *);  AVND_DND_MSG_LIST
> > > > > *avnd_diq_rec_add(struct avnd_cb_tag *cb, AVND_MSG *msg);  void
> > > > > avnd_diq_rec_del(struct avnd_cb_tag *cb, AVND_DND_MSG_LIST
> > *rec);
> > > > > +void avnd_diq_rec_send_buffered_msg(struct avnd_cb_tag *cb);
> > > > >  uint32_t avnd_diq_rec_send(struct avnd_cb_tag *cb,
> > > > AVND_DND_MSG_LIST
> > > > > *rec);  uint32_t avnd_di_reg_su_rsp_snd(struct avnd_cb_tag *cb,
> > > > > SaNameT *su_name, uint32_t ret_code);  uint32_t
> > > > avnd_di_ack_nack_msg_send(struct
> > > > > avnd_cb_tag *cb, uint32_t rcv_id, uint32_t view_num);
> > > >
> > > > ------------------------------------------------------------------
> > > > --
> > > > --
> > > > -------- _______________________________________________
> > > > Opensaf-devel mailing list
> > > > Opensaf-devel@lists.sourceforge.net
> > > > https://lists.sourceforge.net/lists/listinfo/opensaf-devel
> > >
> > > --------------------------------------------------------------------
> > > --
> > > -------- _______________________________________________
> > > Opensaf-devel mailing list
> > > Opensaf-devel@lists.sourceforge.net
> > > https://lists.sourceforge.net/lists/listinfo/opensaf-devel
> >
> > ----------------------------------------------------------------------
> > -------- _______________________________________________
> > Opensaf-devel mailing list
> > Opensaf-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/opensaf-devel
> 
> ------------------------------------------------------------------------------
> _______________________________________________
> Opensaf-devel mailing list
> Opensaf-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/opensaf-devel

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to