It is consistent with other places NPI handling and functions(susi_operation_in_progress(), etc) and it forced me to do so.
Thanks Praveen On 27-Mar-14 2:05 PM, Hans Feldt wrote: > 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
