- When component is instantiated with SU in terminating presence state,
need trigger SU fsm with instantiate event.
- Need informing error recovery when amfnd fails to send callback
parameters to component when component already exited.
---
 src/amf/amfnd/comp.cc | 23 ++++++++++++++++++++++-
 src/amf/amfnd/susm.cc |  9 ++++-----
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/src/amf/amfnd/comp.cc b/src/amf/amfnd/comp.cc
index 8a11d75fb..cef94a0d4 100644
--- a/src/amf/amfnd/comp.cc
+++ b/src/amf/amfnd/comp.cc
@@ -2031,6 +2031,7 @@ uint32_t avnd_comp_cbk_send(AVND_CB *cb, AVND_COMP *comp,
                             AVND_COMP_CSI_REC *csi_rec) {
   SaAmfCSIDescriptorT csi_desc;
   SaAmfCSIFlagsT csi_flag;
+  AVND_ERR_INFO err_info;
   std::string csi_name;
   AVSV_AMF_CBK_INFO *cbk_info = 0;
   AVND_COMP_CSI_REC *curr_csi = 0;
@@ -2039,6 +2040,7 @@ uint32_t avnd_comp_cbk_send(AVND_CB *cb, AVND_COMP *comp,
   SaAmfHandleT hdl = 0;
   SaTimeT per = 0;
   uint32_t rc = NCSCC_RC_SUCCESS;
+  uint32_t ret = NCSCC_RC_SUCCESS;
 
   TRACE_ENTER2("'%s' %u", comp->name.c_str(), type);
   /*
@@ -2201,7 +2203,26 @@ uint32_t avnd_comp_cbk_send(AVND_CB *cb, AVND_COMP *comp,
   rc = avnd_comp_cbq_send(cb, comp, dest, hdl, cbk_info, per);
 
 done:
-  if ((NCSCC_RC_SUCCESS != rc) && cbk_info) avsv_amf_cbk_free(cbk_info);
+  if ((NCSCC_RC_SUCCESS != rc) && cbk_info) {
+    avsv_amf_cbk_free(cbk_info);
+    LOG_ER("avnd_comp_cbk_send failed for comp: %s, type: %d",
+          comp->name.c_str(), type);
+    if (type == AVSV_AMF_CSI_SET) {
+      err_info.src = AVND_ERR_SRC_CBK_CSI_SET_FAILED;
+    } else if (type == AVSV_AMF_COMP_TERM) {
+      err_info.src = AVND_ERR_SRC_CMD_FAILED;
+    } else {
+      // For another callback types
+      err_info.src = AVND_ERR_SRC_MAX;
+    }
+    err_info.rec_rcvr.avsv_ext =
+        static_cast<AVSV_ERR_RCVR>(comp->err_info.def_rec);
+    ret = avnd_err_process(cb, comp, &err_info);
+    if (NCSCC_RC_SUCCESS != ret) {
+      LOG_ER("process error failed for comp: %s",
+      comp->name.c_str());
+    }
+  }
 
   TRACE_LEAVE2("%u", rc);
   return rc;
diff --git a/src/amf/amfnd/susm.cc b/src/amf/amfnd/susm.cc
index 86811f1e4..5b40bdce6 100644
--- a/src/amf/amfnd/susm.cc
+++ b/src/amf/amfnd/susm.cc
@@ -2909,14 +2909,13 @@ uint32_t avnd_su_pres_terming_compinst_hdler(AVND_CB 
*cb, AVND_SU *su,
       avnd_su_pres_state_set(cb, su, SA_AMF_PRESENCE_INSTANTIATED);
     }
     if (m_AVND_SU_IS_RESTART(su)) {
-      if (su->admin_op_Id == SA_AMF_ADMIN_RESTART)
-        /*This can happen when SU has both restartable and non restartable
-           comps.Go for further instantiation.*/
-        rc = avnd_su_pres_fsm_run(cb, su, 0, AVND_SU_PRES_FSM_EV_INST);
-      else if (m_AVND_SU_IS_FAILED(su)) {
+      if (m_AVND_SU_IS_FAILED(su)) {
         /*Before going for surestart recovery from comp restart recovery, a
           comp was in instantiating state, cleanup it now.*/
         rc = avnd_comp_clc_fsm_run(cb, comp, 
AVND_COMP_CLC_PRES_FSM_EV_CLEANUP);
+      } else {
+        //Go for further instantiation.
+        rc = avnd_su_pres_fsm_run(cb, su, 0, AVND_SU_PRES_FSM_EV_INST);
       }
     }
   }
-- 
2.17.1



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

Reply via email to