Please ignore this patch. It has one compilation problem.
I will re float the correct one.

Thanks,
Praveen
On 29-May-14 3:48 PM, praveen.malv...@oracle.com wrote:
>   osaf/services/saf/amf/amfd/si_dep.cc |  9 ++++++++-
>   1 files changed, 8 insertions(+), 1 deletions(-)
>
>
> During failover of dependent, if fault occurs in the SU receiving the active
> assignment then AMF is assigning only some SIs and SG remains unstable.
>
> AMF performs failover of failed active SU1, first by sending active for 
> sponsor
> SI to the standby SU2 and it updates si_dep_state of dependents as
> FAIL_OVER_UNDER_PROGRESS. After successful fail-over of sponsor when AMF sends
> active for first level dependents to SU2 and iit updates second level 
> dependents
> to FAIL_OVER_UNDER_PROGRESS. Now if SU2 faults and then AMF deletes all the 
> SUSIs
> in both the SUs. When one the SUs is enabled, AMF screens SIs to update SI dep
> states of all the SIs before creating new SUSIs. Here 
> FAIL_OVER_UNDER_PROGRESS of
> some second level dependents is not updated which causes assignment of them 
> before
> their sposnors. This leads to assignment of few SIs only and leads to unstable
> SG.
>
> Patch updates si_dep_state from FAIL_OVER_UNDER_PROGRESS to READY_TO_UNASSIGN
> if one of the sponsors is unassigned.
>
> diff --git a/osaf/services/saf/amf/amfd/si_dep.cc 
> b/osaf/services/saf/amf/amfd/si_dep.cc
> --- a/osaf/services/saf/amf/amfd/si_dep.cc
> +++ b/osaf/services/saf/amf/amfd/si_dep.cc
> @@ -2536,13 +2536,20 @@ void sidep_update_dependents_states(AVD_
>   void sidep_update_si_self_dep_state(AVD_SI *si)
>   {
>       bool all_sponsors_assgnd = false;       
> +     AVD_SPONS_SI_NODE *spons;
>   
>       TRACE_ENTER2("sponsor si:'%s'", si->name.value);
>   
>       /*Any dependent SI is never expcted in this state when screening is 
> going on.
>       In such situation do not update si_dep_state. It will be taken care 
> during failover*/
>       if (si->si_dep_state == AVD_SI_FAILOVER_UNDER_PROGRESS) {
> -             TRACE("si:'%s', si_dep_state:%u", si->name.value, 
> si->si_dep_state);
> +             /*If atleast one sponsor is unassigned, unassign the dependent*/
> +             for (spons = si->spons_si_list; spons; spons = spons->next) {
> +                     if (spons_si->list_of_sisu == NULL) {
> +                             avd_sidep_si_dep_state_set(si, 
> AVD_SI_READY_TO_UNASSIGN);
> +                             goto done       
> +                     }
> +             }
>               goto done;
>       }
>   
>
> ------------------------------------------------------------------------------
> Time is money. Stop wasting it! Get your web API in 5 minutes.
> www.restlet.com/download
> http://p.sf.net/sfu/restlet
> _______________________________________________
> Opensaf-devel mailing list
> Opensaf-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/opensaf-devel


------------------------------------------------------------------------------
Time is money. Stop wasting it! Get your web API in 5 minutes.
www.restlet.com/download
http://p.sf.net/sfu/restlet
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to