Su-si assigment flag only is set when amfnd receives request from amfd.
In SU restart escalation, the re-assignment is handled by amfnd internally.
And this flag is not set in this situation. When SU is in assigning after
SU restart due to escalation. The component failed and amfnd escalate it
to component failover. The Amfnd will try to mark su-si as assigned
temporaryly to remove assignment later. But amfnd crashes due to fail to
check su-si assignment flag.

The su-si need updating in assign_si_to_su() and avnd_su_si_oper_done()
SU restart escalation too.
---
 src/amf/amfnd/susm.cc | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/amf/amfnd/susm.cc b/src/amf/amfnd/susm.cc
index 86811f1e4..0d2896e31 100644
--- a/src/amf/amfnd/susm.cc
+++ b/src/amf/amfnd/susm.cc
@@ -489,6 +489,12 @@ static uint32_t assign_si_to_su(const AVND_CB *cb, 
AVND_SU_SI_REC *si,
   LOG_NO("Assigning '%s' %s to '%s'", si->name.c_str(),
          ha_state[si->curr_state], su->name.c_str());
 
+  // In case SU is re-assign after SU restarts
+  if (!m_AVND_SU_IS_ASSIGN_PEND(su) &&
+      m_AVND_SU_IS_RESTART(su) &&
+      (su_all_comps_restartable(*su) == true))
+    m_AVND_SU_ASSIGN_PEND_SET(su);
+
   /* initiate the si assignment for pi su */
   if (m_AVND_SU_IS_PREINSTANTIABLE(su)) {
     uint32_t rank;
@@ -1148,6 +1154,11 @@ uint32_t avnd_su_si_oper_done(AVND_CB *cb, AVND_SU *su, 
AVND_SU_SI_REC *si) {
       if (m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_ASSIGNING(curr_si)) {
         m_AVND_SU_SI_CURR_ASSIGN_STATE_SET(curr_si,
                                            AVND_SU_SI_ASSIGN_STATE_ASSIGNED);
+        // In case SU is re-assign after SU restarts
+        if (m_AVND_SU_IS_ASSIGN_PEND(su) &&
+            m_AVND_SU_IS_RESTART(su) &&
+            (su_all_comps_restartable(*su) == true))
+          m_AVND_SU_ASSIGN_PEND_RESET(su);
         LOG_NO("Assigned '%s' %s to '%s'", curr_si->name.c_str(),
                ha_state[curr_si->curr_state], su->name.c_str());
       } else if (m_AVND_SU_SI_CURR_ASSIGN_STATE_IS_REMOVING(curr_si)) {
-- 
2.17.1



_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to