But would we not get the same result with more understandable logic?
/Hans

On 26 March 2014 08:10, praveen malviya <[email protected]> wrote:
>
> On 26-Mar-14 11:51 AM, Hans Feldt wrote:
>>
>> Agree with the analysis but maybe not the solution. I think it would
>> make more sense to check presence state UNINSTANTIATED for the
>> components in the service unit. That is aligned with the spec
>> description and is more understandable.
>>
>> What do you say?
>
> In case of NPI SU a component receives only one CSI and only one SI will be
> assigned to the whole SU.
> Because of this one to one correspondence, both SU and componet FSMs are
> triggered by picking CSIs from SI and not
> by picking component from SUs (which is common in PI SU case).
> So the fix have been kept aligned the same way.
>
>
> Thanks,
> Praveen
>
>> Thanks,
>> Hans
>>
>> On 26 March 2014 06:13,  <[email protected]> wrote:
>>>
>>>   osaf/services/saf/amf/amfnd/comp.cc           |   2 +-
>>>   osaf/services/saf/amf/amfnd/include/avnd_su.h |   1 +
>>>   osaf/services/saf/amf/amfnd/susm.cc           |  34
>>> ++++++++++++++++++++++++--
>>>   3 files changed, 33 insertions(+), 4 deletions(-)
>>>
>>>
>>> Problem: During lock of NPI SU, AMF does not failover assignments
>>> if a healthy component faults.
>>>
>>> Reason: During SU lock AMF sends quiesced assignment to NPI SU.
>>> During quiesced assignment, when termination of one component is in
>>> progress,
>>> one of the healthy components faults. AMF performs cleanup of this failed
>>> component and it moves the SU from TERMINATING to UNINSTANTIATED state
>>> without waiting for the terminate command response of the first
>>> component.
>>> Thus SU moves to UNINSTANTIATED state when one of the components is still
>>> in TERMINATING state.  Now when first component responds for the
>>> terminate
>>> command, AMF sees SU in UNINSTANTIATED state and it does not take any
>>> action.
>>>
>>> Fix: AMF should move NPI SU in UNINSTANTIATED state only when all the
>>> CSIs
>>> are moved to Removed/Assigned state.
>>>
>>> diff --git a/osaf/services/saf/amf/amfnd/comp.cc
>>> b/osaf/services/saf/amf/amfnd/comp.cc
>>> --- a/osaf/services/saf/amf/amfnd/comp.cc
>>> +++ b/osaf/services/saf/amf/amfnd/comp.cc
>>> @@ -1633,7 +1633,7 @@ done:
>>>    *
>>>    * @returns     true/false
>>>    **/
>>> -static bool all_csis_in_removed_state(const AVND_SU *su)
>>> +bool all_csis_in_removed_state(const AVND_SU *su)
>>>   {
>>>          AVND_COMP_CSI_REC *curr_csi;
>>>          AVND_SU_SI_REC *curr_si;
>>> diff --git a/osaf/services/saf/amf/amfnd/include/avnd_su.h
>>> b/osaf/services/saf/amf/amfnd/include/avnd_su.h
>>> --- a/osaf/services/saf/amf/amfnd/include/avnd_su.h
>>> +++ b/osaf/services/saf/amf/amfnd/include/avnd_su.h
>>> @@ -406,5 +406,6 @@ extern struct avnd_su_si_rec *avnd_silis
>>>   extern void su_get_config_attributes(AVND_SU *su);
>>>   extern bool sufailover_in_progress(const AVND_SU *su);
>>>   extern bool sufailover_during_nodeswitchover(const AVND_SU *su);
>>> +extern bool all_csis_in_removed_state(const AVND_SU *su);
>>>
>>>   #endif
>>> 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
>>> @@ -2358,6 +2358,34 @@ uint32_t avnd_su_pres_terming_comptermfa
>>>          return rc;
>>>   }
>>>
>>> +/**
>>> + * @brief       Checks if all csis of all the sis in this su are in
>>> removed state
>>> + *
>>> + * @param [in]  cmp
>>> + *
>>> + * @returns     true/false
>>> + **/
>>> +static bool all_csis_in_assigned_state(const AVND_SU *su)
>>> +{
>>> +        AVND_COMP_CSI_REC *curr_csi;
>>> +        AVND_SU_SI_REC *curr_si;
>>> +        bool all_csi_removed = true;
>>> +
>>> +        for (curr_si = (AVND_SU_SI_REC
>>> *)m_NCS_DBLIST_FIND_FIRST(&su->si_list);
>>> +                        curr_si && all_csi_removed;
>>> +                        curr_si = (AVND_SU_SI_REC
>>> *)m_NCS_DBLIST_FIND_NEXT(&curr_si->su_dll_node)) {
>>> +                for (curr_csi = (AVND_COMP_CSI_REC
>>> *)m_NCS_DBLIST_FIND_FIRST(&curr_si->csi_list);
>>> +                                curr_csi; curr_csi = (AVND_COMP_CSI_REC
>>> *)m_NCS_DBLIST_FIND_NEXT(&curr_csi->si_dll_node)) {
>>> +                        if
>>> (!m_AVND_COMP_CSI_CURR_ASSIGN_STATE_IS_ASSIGNED(curr_csi)) {
>>> +                                all_csi_removed= false;
>>> +                                break;
>>> +                        }
>>> +                }
>>> +        }
>>> +
>>> +        return all_csi_removed;
>>> +}
>>> +
>>>
>>> /****************************************************************************
>>>     Name          : avnd_su_pres_terming_compuninst_hdler
>>>
>>> @@ -2468,10 +2496,10 @@ uint32_t avnd_su_pres_terming_compuninst
>>>
>>> AVND_COMP_CLC_PRES_FSM_EV_TERM);
>>>                          if (NCSCC_RC_SUCCESS != rc)
>>>                                  goto done;
>>> -               } else {
>>> -                       TRACE("SI Assignment done");
>>> +               }
>>> +
>>> +               if (all_csis_in_assigned_state(su) ||
>>> all_csis_in_removed_state(su))
>>>                          avnd_su_pres_state_set(su,
>>> SA_AMF_PRESENCE_UNINSTANTIATED);
>>> -               }
>>>          }
>>>
>>>    done:
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Learn Graph Databases - Download FREE O'Reilly Book
>>> "Graph Databases" is the definitive new guide to graph databases and
>>> their
>>> applications. Written by three acclaimed leaders in the field,
>>> this first edition is now available. Download your free book today!
>>> http://p.sf.net/sfu/13534_NeoTech
>>> _______________________________________________
>>> Opensaf-devel mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/opensaf-devel
>
>

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

Reply via email to