Ack, code review only/Regards HansN
On 07/31/14 15:45, [email protected] wrote:
>   osaf/services/saf/amf/amfd/sg_2n_fsm.cc |  14 +++++++-------
>   osaf/services/saf/amf/amfd/su.cc        |  18 ++++++++++++++----
>   2 files changed, 21 insertions(+), 11 deletions(-)
>
>
> Shutdown operation was rejected because shitdown operation
> was going on. Amf should respect lock operation as per Specs.
> Now, if lock is issued on su when shutdown is going on, then
> Amf will send response for shutdown first and then start lock operation.
> Once lock operation is completed, then Amf will respond to imm for
> lock operation.
>
> diff --git a/osaf/services/saf/amf/amfd/sg_2n_fsm.cc 
> b/osaf/services/saf/amf/amfd/sg_2n_fsm.cc
> --- a/osaf/services/saf/amf/amfd/sg_2n_fsm.cc
> +++ b/osaf/services/saf/amf/amfd/sg_2n_fsm.cc
> @@ -3609,17 +3609,17 @@ uint32_t SG_2N::su_admin_down(AVD_CL_CB
>                       /* If the SU is in the operation list and the SU admin 
> state is lock.
>                        * send D2N-INFO_SU_SI_ASSIGN modify quiesced message 
> to the SU.
>                        */
> -                     if (!avd_sidep_si_dependency_exists_within_su(su)) {
> +                     if (avd_sidep_si_dependency_exists_within_su(su)) {
> +                             if 
> (avd_sg_susi_mod_snd_honouring_si_dependency(su, SA_AMF_HA_QUIESCED) ==
> +                                             NCSCC_RC_FAILURE) {
> +                                     LOG_NO("%s:%u: %s (%u)", __FILE__, 
> __LINE__, su->name.value, su->name.length);
> +                                     goto done;
> +                             }
> +                     } else {
>                               /* change the state for all assignments to 
> quiesced. */
>                               if (avd_sg_su_si_mod_snd(cb, su, 
> SA_AMF_HA_QUIESCED) == NCSCC_RC_FAILURE) {
>                                       LOG_NO("%s:%u: %s (%u)", __FILE__, 
> __LINE__, su->name.value, su->name.length);
>                                       goto done;
> -                             } else {
> -                                     if 
> (avd_sg_susi_mod_snd_honouring_si_dependency(su, SA_AMF_HA_QUIESCED) ==
> -                                                     NCSCC_RC_FAILURE) {
> -                                             LOG_NO("%s:%u: %s (%u)", 
> __FILE__, __LINE__, su->name.value, su->name.length);
> -                                             goto done;
> -                                     }
>                               }
>                       }
>               }
> diff --git a/osaf/services/saf/amf/amfd/su.cc 
> b/osaf/services/saf/amf/amfd/su.cc
> --- a/osaf/services/saf/amf/amfd/su.cc
> +++ b/osaf/services/saf/amf/amfd/su.cc
> @@ -1119,7 +1119,8 @@ static void su_admin_op_cb(SaImmOiHandle
>   
>       /* Avoid multiple admin operations on other SUs belonging to the same 
> SG. */
>       for (su_ptr = su->sg_of_su->list_of_su; su_ptr != NULL; su_ptr = 
> su_ptr->sg_list_su_next) {
> -             if (su_ptr->pend_cbk.invocation != 0) {
> +             /* su's sg_fsm_state is checked below, just check other su. */
> +             if ((su != su_ptr) && (su_ptr->pend_cbk.invocation != 0)) {
>                       report_admin_op_error(immoi_handle, invocation, 
> SA_AIS_ERR_TRY_AGAIN, NULL,
>                                       "Admin operation is already going on 
> (su'%s')", su_ptr->name.value);
>                       goto done;
> @@ -1134,9 +1135,18 @@ static void su_admin_op_cb(SaImmOiHandle
>       }
>   
>       if (su->sg_of_su->sg_fsm_state != AVD_SG_FSM_STABLE) {
> -             report_admin_op_error(immoi_handle, invocation, 
> SA_AIS_ERR_TRY_AGAIN, NULL,
> -                             "SG state is not stable"); /* whatever that 
> means... */
> -             goto done;
> +             if((su->sg_of_su->sg_fsm_state != AVD_SG_FSM_SU_OPER) ||
> +                             (su->saAmfSUAdminState != 
> SA_AMF_ADMIN_SHUTTING_DOWN) ||
> +                             (op_id != SA_AMF_ADMIN_LOCK)) {
> +                     report_admin_op_error(immoi_handle, invocation, 
> SA_AIS_ERR_TRY_AGAIN, NULL,
> +                                     "SG state is not stable"); /* whatever 
> that means... */
> +                     goto done;
> +             } else {
> +                     /* This means that shutdown was going on and lock has
> +                        been issued.  In this case, response to shutdown
> +                        and then allow lock operation to proceed. */
> +                     su->complete_admin_op(SA_AIS_OK);
> +             }
>       }
>       /* if Tolerance timer is running for any SI's withing this SG, then 
> return SA_AIS_ERR_TRY_AGAIN */
>       if (sg_is_tolerance_timer_running_for_any_si(su->sg_of_su)) {

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to