osaf/services/saf/amf/amfnd/clc.cc | 26 ++++++++++++++++++++------
1 files changed, 20 insertions(+), 6 deletions(-)
During opensaf shutdown AMFND removes the SIs from the SUs in the reverse order
of their ranks. At component level this gets translated as
giving csi removal callback to the components with TARGET_ONE.
Reported problem occurs when an assigned component faults while removal is
going on other components.
When AMFND gets cleanup success event, it sees it as if the component was
faulted while handling removal
callback and thus it tries to move CSIs and SIs assigned to this component to
removed state. Since CSIs and SIs were already in assigned state AMFND
asserts for assigning state check.
This patch ensures that during shutdown phase if an assigned component faults
then AMFND should mark CSIs and SIs assigned if they were in assigning state.
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
@@ -2038,12 +2038,26 @@ uint32_t avnd_comp_clc_terming_cleansucc
*/
if (!comp->su->is_ncs && comp->csi_list.n_nodes > 0) {
AVND_COMP_CSI_REC *csi;
- int csis_removed = 0; // for sanity checking number of
loops
-
- while ((csi =
m_AVND_CSI_REC_FROM_COMP_DLL_NODE_GET(m_NCS_DBLIST_FIND_FIRST(&comp->csi_list)))
!= NULL) {
- m_AVND_COMP_CSI_CURR_ASSIGN_STATE_SET(csi,
AVND_COMP_CSI_ASSIGN_STATE_REMOVED);
- rc = avnd_comp_csi_remove_done(cb, comp, csi);
- osafassert(++csis_removed < 1000);
+
+ for (csi =
m_AVND_CSI_REC_FROM_COMP_DLL_NODE_GET(m_NCS_DBLIST_FIND_FIRST(&comp->csi_list));
+ csi;
+ csi =
m_AVND_CSI_REC_FROM_COMP_DLL_NODE_GET(m_NCS_DBLIST_FIND_NEXT(&csi->comp_dll_node)))
{
+ /* In shutdown phase SIs are removed honoring
saAmfSIRank in reverse
+ order. A component which is having a CSI
from a higher rank assigned
+ SI can fault while removal of lower rank SIs
is going on. In such
+ case CSIs of this component will be in
assigned state only, so remove
+ done indication cannot be generated for
assigned CSIs.
+ */
+ if
(m_AVND_COMP_CSI_CURR_ASSIGN_STATE_IS_REMOVING(csi))
+ rc = avnd_comp_csi_remove_done(cb,
comp, csi);
+
+ /* Removal of last CSI from this component may
lead to SUSI assign/remove
+ done indication, which eventually deletes
all COMP-CSI record.
+ In such a case there will not be any CSI in
comp->csi_list, so come
+ out of the loop.
+ */
+ if (!comp->csi_list.n_nodes)
+ break;
}
}
------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel