Hi Praveen,
I think we need to come back a bit to non-headless feature.
The cluster init timer expiry ensures all nodes having MW SUs assigned
and node state are PRESENT. It's the unique entry point to non-ncs SU
assignment phase.
We also need to keep this principle in headless for #1725.
...
else {
// this node is already up
avd_node_state_set(avnd, AVD_AVND_STATE_PRESENT);
avd_node_oper_state_set(avnd, SA_AMF_OPERATIONAL_ENABLED);
* avnd->veteran = true;*
// Update readiness state of all SUs which are waiting for node
// oper state
... *
** // At this point, one one has become PRESENT, its MW SUs
should be synced **
** // We can do:**
** m_AVD_CLINIT_TMR_START(cb);**
**** /* Check if all SUs are in 'in-service' cluster-wide, if so
start assignments */**
** if ((cb->amf_init_tmr.is_active == true) && **
** (cluster_su_instantiation_done(cb, nullptr) == true)) {**
** avd_stop_tmr(cb, &cb->amf_init_tmr);**
** cluster_startup_expiry_event_generate(cb);**
** }*
goto node_joined;
}
...
}
Also, we just need to send set led only if cluster timer init expires.
Do you think should it work?
Thanks,
Minh
On 25/08/16 17:03, praveen malviya wrote:
> Hi Minh,
>
> One minor correction is still needed.
> node_up event comes very early. In case atleast one node up event has
> come from all amfnds then AMFD stops Node sync timer very early even
> before cluster timer has started:
> if (rc_node_up == sync_nd_size) {
> if (cb->node_sync_tmr.is_active) {
> avd_stop_tmr(cb, &cb->node_sync_tmr);
> TRACE("stop NodeSync timer");
> }
> cb->all_nodes_synced = true;
>
> But AMFD does not process all these node up event because it is not in
> INIT state by this time: if ((n2d_msg->msg_info.n2d_node_up.node_id !=
> cb->node_id_avd) && (cb->init_state < AVD_INIT_DONE)) {
> TRACE("invalid init state (%u), node %x",
> cb->init_state,
> n2d_msg->msg_info.n2d_node_up.node_id);
> goto done;
> }
>
> When AMFD moves to INIT state it starts the cluster startup timer. If
> this is very low then it will expire and it will see node sync timer
> not running and it will send led messages. By this some nodes may be
> in syncing state. So already synced amfnds will be sending the
> assignment messages when some amfnds are still syncing and they may
> host some SUs.
>
> we need to bring two things at same level:
> 1)When led set message is sent to amfnds, all amfnds should be in
> PRESENT state. Means theere SUs are enabled and amfnd can process
> assignments.
> 2)All other amfnd which do not join till this time will be rebooted.
>
> Problem: How to hold amfnds from sending assignment events from buffer
> until all of them are in PRESENT state and non PRESENT will never join
> the cluster. Neither Node sync timer nor cluster startup timer ensures
> that all amfnds are synced and non synced will be rebooted.
>
> One idea: What if we do not stop the node sync timer when "if
> (rc_node_up == sync_nd_size)" is hit and mark node_sync_window_closed
> true as done when it really expires in avd_node_sync_tmr_evh()? What
> are the implications of it. But AMFD will still have to make sure
> fresh node_up_event() sending nodes will be rebooted. So if cluster
> timer expires early then it will see node sync timer running and will
> not send led set. But will all the payloads really move to PRESENT
> state in 10 seconds, I am relying on the chosen value of 10 seconds.
>
> Thanks,
> Praveen
>
>
>
>
> On 24-Aug-16 5:35 PM, praveen malviya wrote:
>> Hi Minh,
>>
>> Any assignment message should be processed after cluster timer expiry
>> and node sync timer expiry. The bug fix patch
>> 1725_02_V2_bugfix_resend_buffer_in_set_leds.diff honors cluster timer
>> expiry but not node sync timer.
>> After node sync timer expiry, delayed payloads will be rebooted and if
>> these payloads host any SU/SUSIs, they will be deleted. So admin op will
>> finish gracefully.
>> I think for loop can be added in both timers' expiry events with a check
>> on exipry of other timer:
>>
>> diff --git a/osaf/services/saf/amf/amfd/cluster.cc
>> b/osaf/services/saf/amf/amfd/cluster.cc
>> --- a/osaf/services/saf/amf/amfd/cluster.cc
>> +++ b/osaf/services/saf/amf/amfd/cluster.cc
>> @@ -74,12 +74,13 @@ void avd_cluster_tmr_init_evh(AVD_CL_CB
>> m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(cb, cb,
>> AVSV_CKPT_AVD_CB_CONFIG);
>>
>> // Resend set_leds to veteran node
>> -
>> - for (std::map<std::string, AVD_AVND *>::const_iterator it =
>> node_name_db->begin();
>> - it != node_name_db->end(); it++) {
>> - node = it->second;
>> - if (node->veteran)
>> - avd_snd_set_leds_msg(cb, node);
>> + if (cb->node_sync_tmr.is_active == false) {
>> + for (std::map<std::string, AVD_AVND *>::const_iterator
>> it = node_name_db->begin();
>> + it != node_name_db->end(); it++) {
>> + node = it->second;
>> + if (node->veteran)
>> + avd_snd_set_leds_msg(cb, node);
>> + }
>> }
>>
>> /* call the realignment routine for each of the SGs in the
>> @@ -143,6 +144,17 @@ void avd_node_sync_tmr_evh(AVD_CL_CB *cb
>> // Setting true here to indicate the node sync window has closed
>> // Further node up message will be treated specially
>> cb->node_sync_window_closed = true;
>> + // Resend set_leds to veteran node
>> + if (cb->amf_init_tmr.is_active == false) {
>> + AVD_AVND *node = nullptr;
>> + for (std::map<std::string, AVD_AVND *>::const_iterator
>> it = node_name_db->begin();
>> + it != node_name_db->end(); it++) {
>> + node = it->second;
>> + if (node->veteran)
>> + avd_snd_set_leds_msg(cb, node);
>> + }
>> + }
>> +
>>
>> TRACE_LEAVE();
>> }
>>
>>
>>
>> Thanks,
>> Praveen
>> On 24-Aug-16 4:58 PM, Nagendra Kumar wrote:
>>> 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=AmfDemo1,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; [email protected]; Praveen Malviya;
>>>> [email protected]; [email protected]
>>>> Cc: [email protected]
>>>> 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
>>
>
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel