Hi Minh, @2.a.) and @2.b.) are working except "Component Failover" as recovery. Other recovery like SU Failover, etc are working fine with 1725_pending_review.tgz and 07_no_recovery_if_no_pending_susi.diff.
Please confirm. Thanks -Nagu > -----Original Message----- > From: Nagendra Kumar > Sent: 15 September 2016 12:13 > To: minh 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 4] AMFND: Admin operation continuation if > csi completes during headless [#1725 part 1] V1 > > Hi Minh, > >>If there's no any major problem, can we make SI Dep as last phase? > Yes, absolutely. There is no problem. > >>If I am right, I think you are testing @2.a) - and *fault* has just been as > node reboot/powered-off by user during headless. > Yes, you are right. > > Thanks > -Nagu > > > -----Original Message----- > > From: minh chau [mailto:minh.c...@dektech.com.au] > > Sent: 14 September 2016 17:54 > > To: Nagendra Kumar; 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 4] AMFND: Admin operation > > continuation if csi completes during headless [#1725 part 1] V1 > > > > Hi Nagu, > > > > I have proposed to change the order on 28 Jul: > > > > ============== > > > > I would like to change the above orders of implementation: > > @0. We are here now: No admin op continuation, no recovery on faults > > during headless. > > Since componentRestart/suRestart has no impact on recovery after > > headless, faults during headless here mean: failover escalation, node > > reboot/powered-off by user during headless. Faults are different > > phenomenons but they all result in loss of SUSI. Having #1902 will > > remove the major impact of a node reboot due to immediate escalation > > and AMF also has to deal with the loss of SUSI the same as without > > #1902 plus failover escalation > > > > @1. Admin op continuation without required recovery on faults during > > headless > > @1.a) All CSI(s) callback completes during headless, but SUSI states > > are still QUIESCED/QUIESCING > > @1.b) One of CSI(s) callback is still ongoing after headless (AMFD > > would have to wait for it?) > > > > @2. Recovery on faults. (Doing fault recovery needs to consider admin > > op continuation which would have been implemented in step @1) Need > > #1902 > > @2.a.) Faults in normal flow: No admin op continuation is required > > after headless, but fault did happen during headless > > @2.b.) Faults happen during admin operation while headless, after > > headless AMFD needs to consider a recovery on fault together with > > admin op continuation. > > > > @3. @1 + @2 + With SI Dep. > > > > =============== > > I thought we have followed the above order so far? Because part 1 was > > acked, which is "@1. Admin op continuation without required recovery > > on faults during headless" > > If there's no any major problem, can we make SI Dep as last phase? > > If I am right, I think you are testing @2.a) - and *fault* has just > > been as node reboot/powered-off by user during headless. > > > > Thanks, > > Minh > > > > On 14/09/16 21:48, Nagendra Kumar wrote: > > > Hi Minh, > > > If it is not tested, then it is fine. But, we had added (#1) the > > following in the ticket #1725 on 27 Jul : > > > > > > =========================================== > > > Nagendra Kumar - 2016-07-27 > > > > > > For 2N red model, implementation can be done in the following phased > > manner. > > > It has advantages of being logically segregated and it continues > > > from > > where we left in 5.0. > > > (Phases #1, #2 and #3 is more related to ticket #1725 and phases #4 > > > and #5 are related to #1902) > > > > > > 1. Node restart escalation (with and without SI Dep). > > > 2. Without Si Dep : Admin op (no faults/escalations). > > > 3. Without Si Dep : Admin Op + node restart faults/escalations during > > headless. > > > 4. Without Si Dep : > > > a.) All faults in normal flows. > > > b.) All faults during admin operation(minus node reboot during > > > headless > > as covered in #3). > > > 5. With Si Dep : #2, #3 and #4. > > > > > > Since 5.0 already has immediate escalation model (component and node > > restart/reboot), so #1, #2 and #3 completes left over portion of > > headless contribution in 5.0 with that model. > > > ====================================== > > > > > > Thanks > > > -Nagu > > > > > >> -----Original Message----- > > >> From: minh chau [mailto:minh.c...@dektech.com.au] > > >> Sent: 14 September 2016 17:05 > > >> To: Nagendra Kumar; 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 4] AMFND: Admin operation > > >> continuation if csi completes during headless [#1725 part 1] V1 > > >> > > >> Hi Nagu, > > >> > > >> SI Dep is the last phase of implementation of headless recovery, > > >> its support is not included in all patches attached in ticket #1725. > > >> > > >> Thanks, > > >> Minh > > >> > > >> On 14/09/16 21:21, Nagendra Kumar wrote: > > >>> Hi Minh, > > >>> Have you tested Si Dep (2N Red model) for "node restart > > >>> test > > >> cases" ? I can't see it in the test case doc. > > >>> Thanks > > >>> -Nagu > > >>> > > >>>> -----Original Message----- > > >>>> From: Nagendra Kumar > > >>>> Sent: 13 September 2016 11:20 > > >>>> To: minh 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 4] AMFND: Admin operation > > >>>> continuation if csi completes during headless [#1725 part 1] V1 > > >>>> > > >>>> Hi Minh, > > >>>> I have tested these scenarios again and it works well. > > >>>> > > >>>> Thanks > > >>>> -Nagu > > >>>> > > >>>>> -----Original Message----- > > >>>>> From: minh chau [mailto:minh.c...@dektech.com.au] > > >>>>> Sent: 12 September 2016 11:53 > > >>>>> To: Nagendra Kumar; hans.nordeb...@ericsson.com; Praveen > > Malviya; > > >>>>> gary....@dektech.com.au; long.hb.ngu...@dektech.com.au > > >>>>> Cc: opensaf-devel@lists.sourceforge.net > > >>>>> Subject: Re: [PATCH 2 of 4] AMFND: Admin operation continuation > > >>>>> if csi completes during headless [#1725 part 1] V1 > > >>>>> > > >>>>> Hi Nagu, > > >>>>> > > >>>>> One bug get hit by your configuration, where the absent SUSIs > > >>>>> are found after headless but no real SUSIs are available also. > > >>>>> In this case I think that AMFD can do like a fresh assignment. > > >>>>> I attach the patch to ticket #1725, please help to test again. > > >>>>> > > >>>>> Thanks, > > >>>>> Minh > > >>>>> > > >>>>> On 12/09/16 11:09, minh chau wrote: > > >>>>>> Hi Nagu, > > >>>>>> > > >>>>>> I'm running the tests with this configuration and will get back to > you. > > >>>>>> > > >>>>>> Thanks, > > >>>>>> Minh > > >>>>>> > > >>>>>> On 09/09/16 22:26, Nagendra Kumar wrote: > > >>>>>>> Hi Minh, > > >>>>>>> I am using 1725_pending_review.tgz > > >>>>>>> (1725_02_V2_bugfix_01_resend_buffer_in_set_leds.diff, > > >>>>>>> 1725_02_V2_bugfix_02_honor_clusterinit_nodesync_timer.diff, > > >>>>>>> 1725_02_V2_bugfix_03_restore_ng_admin.diff, > > >>>>>>> 1725_03_V4_failover_absent_susi_longDn.diff, > > >>>>>>> 1725_04_V2_headless_validation.diff, > > >>>>>>> 1725_05_V2_resend_oper_state.diff, > > >>>>>>> 1725_06a_fullscope_escalation_headless.diff). > > >>>>>>> > > >>>>>>> I am doing basic node reboot validation testing with no faults. > > >>>>>>> > > >>>>>>> Configuration: SU1(act) and SU2(stanby) both on PL-3. > > >>>>>>> > > >>>>>>> TC #1: Start SC-1, PL-3 and PL-5: Unlock SU1 and SU2. Stop > > >>>>>>> SC-1 and stop PL-3, start PL-3 and start SC-1. > > >>>>>>> After SC-1 and PL-3 comes back, ideally SU1 and SU2 should get > > >>>>>>> assignments as Act and Std, but no assignment are being given > > >>>>>>> to SUs on PL-3 and it shows following in status: > > >>>>>>> > > >>>>>>> Only Su2 has Std assignment. > > >>>>>>> > > >>>>>>> safSISU=safSu=SC- > > >>>>> 1\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed1,safApp=O > > >>>>>>> penSAF > > >>>>>>> > > >>>>>>> saAmfSISUHAState=ACTIVE(1) > > >>>>>>> safSISU=safSu=PL- > > >>>>> 5\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed2,safApp=O > > >>>>>>> penSAF > > >>>>>>> > > >>>>>>> saAmfSISUHAState=ACTIVE(1) > > >>>>>>> > > >> > > > safSISU=safSu=SU2\,safSg=AmfDemo_2N\,safApp=AmfDemo1,safSi=AmfDe > > >>>>> mo1,s > > >>>>>>> afApp=AmfDemo1 > > >>>>>>> > > >>>>>>> saAmfSISUHAState=STANDBY(2) > > >>>>>>> safSISU=safSu=SC-1\,safSg=2N\,safApp=OpenSAF,safSi=SC- > > >>>>> 2N,safApp=OpenSAF > > >>>>>>> saAmfSISUHAState=ACTIVE(1) > > >>>>>>> safSISU=safSu=PL- > > >>>>> 3\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed3,safApp=O > > >>>>>>> penSAF > > >>>>>>> > > >>>>>>> saAmfSISUHAState=ACTIVE(1) > > >>>>>>> > > >>>>>>> TC #2: Configuration same as TC#1. Stop PL-3 and don't start. > > >>>>>>> The same issue: > > >>>>>>> safSISU=safSu=PL- > > >>>>> 5\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed3,safApp=O > > >>>>>>> penSAF > > >>>>>>> > > >>>>>>> saAmfSISUHAState=ACTIVE(1) > > >>>>>>> > > >> > > > safSISU=safSu=SU2\,safSg=AmfDemo_2N\,safApp=AmfDemo1,safSi=AmfDe > > >>>>> mo1,s > > >>>>>>> afApp=AmfDemo1 > > >>>>>>> > > >>>>>>> saAmfSISUHAState=STANDBY(2) > > >>>>>>> safSISU=safSu=SC- > > >>>>> 1\,safSg=NoRed\,safApp=OpenSAF,safSi=NoRed2,safApp=O > > >>>>>>> penSAF > > >>>>>>> > > >>>>>>> saAmfSISUHAState=ACTIVE(1) > > >>>>>>> safSISU=safSu=SC-1\,safSg=2N\,safApp=OpenSAF,safSi=SC- > > >>>>> 2N,safApp=OpenSAF > > >>>>>>> saAmfSISUHAState=ACTIVE(1) > > >>>>>>> > > >>>>>>> TC #3: Configured SU1(Act) on PL-3 and SU2(Std) on PL-4. > > >>>>>>> Stop SC-1, stop PL-3 and PL-4, but PL-5 is running. start > > >>>>>>> SC-1, the same issue. > > >>>>>>> > > >>>>>>> TC #4: Same as TC #3, but SU3 configured on PL-5 as spare. SU3 > > >>>>>>> doesn't get any assignment and Sg is unstable. > > >>>>>>> > > >>>>>>> Thanks > > >>>>>>> -Nagu > > >>>>>>> > > >>>>>>>> -----Original Message----- > > >>>>>>>> From: Minh Hon Chau [mailto:minh.c...@dektech.com.au] > > >>>>>>>> Sent: 18 August 2016 05:46 > > >>>>>>>> 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 4] AMFND: Admin operation continuation > > >>>>>>>> if csi 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(-) > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> There're two options basically that AMFD can continue admin > > >>>>>>>> operation wih completed csi(s) > > >>>>>>>> > > >>>>>>>> First: AMFD can use the sync SUSI fsm state as latest, AMFD > > >>>>>>>> then has to explore its SUSI assignments with adminStates of > > >>>>>>>> relevant entities to determine which SU should be on call of > > susi_success(). > > >>>>>>>> Deeper level of exploration for csi addition. It also depends > > >>>>>>>> on SG Fsm state which is being used variously in different SG > types. > > >>>>>>>> > > >>>>>>>> Second: AMFD uses the SUSI fsm state read from IMM as latest, > > >>>>>>>> and AMFND needs to resend susi_resp messages which were > > >>>>>>>> deferred during headless so that AMFD can continue the admin > > >>>>>>>> operation > > >>>> sequence. > > >>>>>>>> Both cases of csi completion [during or after] headless can > > >>>>>>>> run in the same code flow. > > >>>>>>>> > > >>>>>>>> The patch buffers susi_resp_msg during headless stage and > > >>>>>>>> resend it to AMFD after headless. There could be a chance > > >>>>>>>> that AMFND sent out susi response message but AMFD could not > > receive > > >>>>>>>> or process it. This case could be seen as a defect, which can > > >>>>>>>> be fixed by securing the result of sending susi_resp message > > >>>>>>>> from AMFND toward > > >>>> AMFD. > > >>>>>>>> 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 > > >>>>>>>> @@ -805,11 +805,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)); > > >>>>>>>> > > >>>>>>>> @@ -820,64 +815,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); @@ -1256,14 +1263,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); > > >>>>>>>> } > > >>>>>>>> @@ -1276,6 +1276,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