I agree/HansN

-----Original Message-----
From: Hans Feldt 
Sent: den 22 september 2014 09:16
To: Hans Nordebäck; praveen.malv...@oracle.com; nagendr...@oracle.com
Cc: opensaf-devel@lists.sourceforge.net
Subject: RE: [devel] [PATCH 1 of 1] amf : disable oper state of faulty comp if 
SU is disabled [#1035]



> -----Original Message-----
> From: Hans Nordebäck
> Sent: den 22 september 2014 08:58
> To: praveen.malv...@oracle.com; Hans Feldt; nagendr...@oracle.com
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: RE: [devel] [PATCH 1 of 1] amf : disable oper state of faulty 
> comp if SU is disabled [#1035]
> 
> Ack, code review only, (one minor comment below) /Regards HansN
> 
> -----Original Message-----
> From: praveen.malv...@oracle.com [mailto:praveen.malv...@oracle.com]
> Sent: den 5 september 2014 07:00
> To: Hans Feldt; nagendr...@oracle.com
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: [devel] [PATCH 1 of 1] amf : disable oper state of faulty 
> comp if SU is disabled [#1035]
> 
>  osaf/services/saf/amf/amfd/ndproc.cc |  10 ++++++++++
>  osaf/services/saf/amf/amfnd/clc.cc   |  12 ++++++++----
>  osaf/services/saf/amf/amfnd/susm.cc  |  14 ++++++++++++++
>  3 files changed, 32 insertions(+), 4 deletions(-)
> 
> 
> Operational state of faulty component is not disabled when SU gets disabled 
> after termination failure.
> 
> AMFND is not disabling the oper state of component when its 
> instantiation and clean up fails. AMFND marks both compoent and its SU 
> TERM_FAILED but disables only SU.
> 
> Patch updates the component oper state at AMFND and same update is 
> sent to AMFD. Also it replies for the pending operation
> 
> diff --git a/osaf/services/saf/amf/amfd/ndproc.cc 
> b/osaf/services/saf/amf/amfd/ndproc.cc
> --- a/osaf/services/saf/amf/amfd/ndproc.cc
> +++ b/osaf/services/saf/amf/amfd/ndproc.cc
> @@ -347,6 +347,16 @@ static void su_admin_op_report_to_imm(AV
>                                       su->name.value);
>               }
>               break;
> +     case SA_AMF_ADMIN_UNLOCK:
> +             if ((su->saAmfSUPreInstantiable == false) && (pres == 
> SA_AMF_PRESENCE_TERMINATION_FAILED)) {
> +                     report_admin_op_error(cb->immOiHandle,
> +                                     su->pend_cbk.invocation,
> +                                     SA_AIS_ERR_REPAIR_PENDING,
> +                                     &su->pend_cbk,
> +                                     "SU '%s' moved to 'termination failed' 
> state",
> +                                     su->name.value);
> +             }
> +             break;
>       case SA_AMF_ADMIN_REPAIRED:
>               if (pres == SA_AMF_PRESENCE_UNINSTANTIATED) {
>                       avd_saImmOiAdminOperationResult(cb->immOiHandle,
> diff --git a/osaf/services/saf/amf/amfnd/clc.cc 
> b/osaf/services/saf/amf/amfnd/clc.cc
> --- a/osaf/services/saf/amf/amfnd/clc.cc
> +++ b/osaf/services/saf/amf/amfnd/clc.cc
> @@ -963,8 +963,10 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_
>                       clear_error_report_alarm(comp);
>               }
> 
> -             /* instantiating -> inst-failed */
> -             if ((SA_AMF_PRESENCE_INSTANTIATING == prv_st) && 
> (SA_AMF_PRESENCE_INSTANTIATION_FAILED == final_st)) {
> +             /* instantiating -> inst-failed/term-failed */
> +             if ((SA_AMF_PRESENCE_INSTANTIATING == prv_st) &&
> +                             ((final_st == 
> SA_AMF_PRESENCE_INSTANTIATION_FAILED) ||
> +                              (final_st == 
> SA_AMF_PRESENCE_TERMINATION_FAILED))) {
>                       /* instantiation failed.. log it */
>                       m_AVND_COMP_OPER_STATE_SET(comp, 
> SA_AMF_OPERATIONAL_DISABLED);
>                       m_AVND_COMP_OPER_STATE_AVD_SYNC(cb, comp, rc); @@ 
> -1181,8 +1183,10 
> @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_
>                       }
>               }
> 
> -             /* Instantiating -> Instantiationfailed */
> -             if ((SA_AMF_PRESENCE_INSTANTIATING == prv_st) && 
> (SA_AMF_PRESENCE_INSTANTIATION_FAILED == final_st)) {
> +             /* Instantiating -> Instantiationfailed/Terminationfailed */
> +             if ((SA_AMF_PRESENCE_INSTANTIATING == prv_st) &&
> +                             ((final_st == 
> SA_AMF_PRESENCE_INSTANTIATION_FAILED) ||
> +                              (final_st == 
> SA_AMF_PRESENCE_TERMINATION_FAILED))) {
>                       m_AVND_COMP_FAILED_SET(comp);
>                       m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, comp, 
> AVND_CKPT_COMP_FLAG_CHANGE);
>                       m_AVND_COMP_OPER_STATE_SET(comp, 
> SA_AMF_OPERATIONAL_DISABLED); 
> diff --git a/osaf/services/saf/amf/amfnd/susm.cc 
> b/osaf/services/saf/amf/amfnd/susm.cc
> --- a/osaf/services/saf/amf/amfnd/susm.cc
> +++ b/osaf/services/saf/amf/amfnd/susm.cc
> @@ -1759,6 +1759,20 @@ uint32_t avnd_su_pres_st_chng_prc(AVND_C
>                       /* si assignment/removal failed.. inform AvD */
>                       rc = avnd_di_susi_resp_send(cb, su, 
> m_AVND_SU_IS_ALL_SI(su) ? 0 : si);
>               }
> +
> +             /* instantiating -> term-failed */
> [HansN] the if expression "reversed" compared to previous if stmts.
> +             if ((prv_st == SA_AMF_PRESENCE_INSTANTIATING) &&
> +                             (final_st == 
> SA_AMF_PRESENCE_TERMINATION_FAILED)) {
[HansF] This is the preferred way (to me) to write. The other way around is not 
readable. I know it's some old recommendation to catch assignments instead of 
comparison but now we have good tools to catch this instead. So let's write 
readable and understandable code instead.

> +
> +                     m_AVND_SU_OPER_STATE_SET(su, 
> SA_AMF_OPERATIONAL_DISABLED);
> +                     m_AVND_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su, 
> AVND_CKPT_SU_OPER_STATE);
> +
> +                     /* Don't send su-oper state msg, just update su oper 
> state
> +                      * AMF has lost control over this component and the 
> operator needs
> +                      * to repair this node. Failover is not possible in 
> this state.
> +                      */
> +                     avnd_di_uns32_upd_send(AVSV_SA_AMF_SU, 
> saAmfSUOperState_ID, &su->name, su->oper);
> +             }
>       }
> 
>   done:
> 
> ----------------------------------------------------------------------
> --------
> Slashdot TV.
> Video for Nerds.  Stuff that matters.
> http://tv.slashdot.org/
> _______________________________________________
> Opensaf-devel mailing list
> Opensaf-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/opensaf-devel

------------------------------------------------------------------------------
Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer
Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports
Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper
Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer
http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to