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
