Hi Nagu,

Please let me know what particular thing that concerns you with (1), or 
do you agree if I do like (2)?

Thanks,
Minh

On 23/09/16 16:27, minh chau wrote:
> Hi Nagu,
>
> The macro m_AVD_CLINIT_TMR_START has the setting *is_active = false*, 
> so if this macro is called again without checking timer status, then 
> amf_init_tmr will be started again while the same instance of this 
> timer could be running.
> In the fix of #1988, I could not reuse this macro and had to manually 
> start/stop this timer. But #1988 is in context of headless feature 
> only, so it would not cause any problem because m_AVD_CLINIT_TMR_START 
> is always called first.
> Now in #2063 which has roaming feature enabled, m_AVD_CLINIT_TMR_START 
> is not always called first. The first instance of amf_init_tmr is 
> started in avd_node_up_evh(), because leds state of amfnd in active 
> promoted SC is green (true). Then, m_AVD_CLINIT_TMR_START get hit 
> after 2N Opensaf SU (in promoted SC) is assigned ACTIVE.
> So, to fix the problem in #2063, I do either (1) or (2):
> (1). As in this patch, remove *is_active = false* in 
> m_AVD_CLINIT_TMR_START
> (2). Before call m_AVD_CLINIT_TMR_START, need to stop this timer if 
> it's running, likely:
> diff --git a/osaf/services/saf/amf/amfd/ndfsm.cc 
> b/osaf/services/saf/amf/amfd/ndfsm.cc
> --- a/osaf/services/saf/amf/amfd/ndfsm.cc
> +++ b/osaf/services/saf/amf/amfd/ndfsm.cc
> @@ -570,6 +570,8 @@ void avd_nd_ncs_su_assigned(AVD_CL_CB *c
>                         cb->init_state = AVD_INIT_DONE;
>
>                         /* start the cluster init timer. */
> +                       if (cb->amf_init_tmr.is_active == true)
> +                               avd_stop_tmr(cb, &cb->amf_init_tmr);
>                         m_AVD_CLINIT_TMR_START(cb);
>                 }
>
> I think (1) is reasonable, the is_active could not be forced to be 
> false before starting timer regardless actual status of timer. The 
> current *is_active = false* in macro, I think it was meant as an 
> initial setting, so it'd better be done somewhere in initialize(void), 
> similarly as
>     cb->heartbeat_tmr.is_active = false;
>
> Do you agree if I also add *cb->amf_init_tmr.is_active = false* in 
> initialize(void)?
>
> Thanks,
> Minh
>
> On 23/09/16 15:46, Nagendra Kumar wrote:
>> Please don't change anything in this function. Please stop and start 
>> the timer or write a function if needed.
>>
>> Thanks
>> -Nagu
>>> -----Original Message-----
>>> From: Minh Hon Chau [mailto:minh.c...@dektech.com.au]
>>> Sent: 23 September 2016 05:33
>>> 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] AMFD: Fix double start timer of AVD_TMR_CL_INIT
>>> [#2036]
>>>
>>>   osaf/services/saf/amf/amfd/include/timer.h |  1 -
>>>   1 files changed, 0 insertions(+), 1 deletions(-)
>>>
>>>
>>> Since the AVD_TMR_CL_INIT can be started/restarted to wait for all SU
>>> presence state
>>> synchronization, so m_AVD_CLINIT_TMR_START could not always be called
>>> as the first start. As
>>> a result, due to @is_active is set to false before start timer, 
>>> therefore the
>>> timer can be
>>> restarted without stop in advance. It appears a warning as below
>>>
>>> Sep 22 22:08:22.640710 osafamfd [477:timer.cc:0066] TEST >>
>>> avd_start_tmr: 1
>>> Sep 22 22:08:22.640717 osafamfd [477:sysf_tmr.c:0690] TR IN
>>> LEAP_DBG_SINK
>>> Sep 22 22:08:22.640758 osafamfd [477:timer.cc:0096] << avd_start_tmr
>>>
>>> Patch removes setting @is_active to false in m_AVD_CLINIT_TMR_START
>>>
>>> diff --git a/osaf/services/saf/amf/amfd/include/timer.h
>>> b/osaf/services/saf/amf/amfd/include/timer.h
>>> --- a/osaf/services/saf/amf/amfd/include/timer.h
>>> +++ b/osaf/services/saf/amf/amfd/include/timer.h
>>> @@ -65,7 +65,6 @@ typedef struct avd_tmr_tag {
>>>   #define m_AVD_CLINIT_TMR_START(cb) \
>>>   {\
>>>       saflog(LOG_NOTICE, amfSvcUsrName, "Starting cluster startup
>>> timer"); \
>>> -    cb->amf_init_tmr.is_active = false; \
>>>       cb->amf_init_tmr.type = AVD_TMR_CL_INIT; \
>>>       avd_start_tmr(cb,&(cb->amf_init_tmr), avd_cluster-
>>>> saAmfClusterStartupTimeout); \
>>>   }
>


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

Reply via email to