Hi Minh,

Thanks for your comment. I added the checkpoint in my solution.
Please help me to review next one.

-----Original Message-----
From: Minh Hon Chau <minh.c...@dektech.com.au> 
Sent: Monday, November 25, 2019 6:31 PM
To: thang.d.nguyen <thang.d.ngu...@dektech.com.au>; gary....@dektech.com.au; 
thuan.t...@dektech.com.au
Cc: opensaf-devel@lists.sourceforge.net
Subject: Re: [PATCH 1/1] amfd: not accept lock-in admin op if presence msg not 
processed [#3121]

Hi Thang,

Instead of adding is_presence_msg_processed, which requires a checkpoint to 
standby, can we make it as a function (or might be *if* statement) that 
utilizes the pres_state and term_state to (dis)allow the lock-in op?

Thanks

Minh

On 25/11/19 5:50 pm, thang.d.nguyen wrote:
> AMFD should not accept lock-in admin op on SU if the presence msg has 
> already sent to that SU.
> ---
>   src/amf/amfd/sgproc.cc |  1 +
>   src/amf/amfd/su.cc     | 13 +++++++++++++
>   src/amf/amfd/su.h      |  2 ++
>   3 files changed, 16 insertions(+)
>
> diff --git a/src/amf/amfd/sgproc.cc b/src/amf/amfd/sgproc.cc index 
> ddd825d44..8aeb9ec3c 100644
> --- a/src/amf/amfd/sgproc.cc
> +++ b/src/amf/amfd/sgproc.cc
> @@ -2126,6 +2126,7 @@ uint32_t avd_sg_app_su_inst_func(AVD_CL_CB *cb, AVD_SG 
> *sg) {
>               }
>             } else {
>               if (avd_snd_presence_msg(cb, i_su, false) == 
> NCSCC_RC_SUCCESS) {
> +              i_su->is_presence_msg_processed = true;
>                 num_try_insvc_su++;
>               }
>             }
> diff --git a/src/amf/amfd/su.cc b/src/amf/amfd/su.cc index 
> 8c8ef9d4f..494022893 100644
> --- a/src/amf/amfd/su.cc
> +++ b/src/amf/amfd/su.cc
> @@ -51,6 +51,7 @@ void AVD_SU::initialize() {
>     term_state = false;
>     su_switch = AVSV_SI_TOGGLE_STABLE;
>     su_is_external = false;
> +  is_presence_msg_processed = false;
>     su_act_state = 0;
>     sg_of_su = nullptr;
>     su_on_node = nullptr;
> @@ -810,6 +811,12 @@ void AVD_SU::set_pres_state(SaAmfPresenceStateT 
> pres_state) {
>        */
>       return;
>   
> +  if ((pres_state == SA_AMF_PRESENCE_INSTANTIATED) ||
> +      (pres_state == SA_AMF_PRESENCE_INSTANTIATION_FAILED) ||
> +      (pres_state == SA_AMF_PRESENCE_TERMINATION_FAILED)) {
> +    this->is_presence_msg_processed = false;  }
> +
>     osafassert(pres_state <= SA_AMF_PRESENCE_TERMINATION_FAILED);
>     TRACE_ENTER2("'%s' %s => %s", name.c_str(),
>                  avd_pres_state_name[saAmfSUPresenceState],
> @@ -1085,6 +1092,12 @@ void AVD_SU::lock_instantiation(SaImmOiHandleT 
> immoi_handle,
>       goto done;
>     }
>   
> +  if (is_presence_msg_processed == true) {
> +    report_admin_op_error(immoi_handle, invocation, SA_AIS_ERR_TRY_AGAIN,
> +                          nullptr, "'%s' instantiate not done", 
> name.c_str());
> +    goto done;
> +  }
> +
>     if (list_of_susi != nullptr) {
>       report_admin_op_error(immoi_handle, invocation, SA_AIS_ERR_TRY_AGAIN,
>                             nullptr, "SIs still assigned to this SU 
> '%s'", diff --git a/src/amf/amfd/su.h b/src/amf/amfd/su.h index 
> 7afc5abee..722c68b9c 100644
> --- a/src/amf/amfd/su.h
> +++ b/src/amf/amfd/su.h
> @@ -87,6 +87,8 @@ class AVD_SU {
>   
>     bool su_is_external; /* indicates if this SU is external */
>   
> +  bool is_presence_msg_processed; /* indicate inst msg sent to nd */
> +
>     int su_act_state;  // not used, kept for EDU, remove later
>   
>     bool wait_for_contained_to_quiesce;



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

Reply via email to