osaf/services/saf/amf/amfd/csiattr.cc           |   2 +
 osaf/services/saf/amf/amfd/include/evt.h        |   6 +++++
 osaf/services/saf/amf/amfd/include/proc.h       |   1 +
 osaf/services/saf/amf/amfd/main.cc              |  13 ++++++++--
 osaf/services/saf/amf/amfd/mds.cc               |  30 +++++++++++++++---------
 osaf/services/saf/amf/amfd/ndfsm.cc             |  15 ++++++++++++
 osaf/services/saf/amf/amfnd/comp.cc             |  16 +++++++++++++
 osaf/services/saf/amf/amfnd/evt.cc              |   4 +++
 osaf/services/saf/amf/amfnd/include/avnd_evt.h  |   8 ++++++
 osaf/services/saf/amf/amfnd/include/avnd_proc.h |   1 +
 osaf/services/saf/amf/amfnd/main.cc             |   3 +-
 osaf/services/saf/amf/amfnd/mds.cc              |   8 ++++--
 12 files changed, 89 insertions(+), 18 deletions(-)


Patch fixes the problem by posting local events to main process
-In AMFD for nd version
-In AMFND for amfa version.

diff --git a/osaf/services/saf/amf/amfd/csiattr.cc 
b/osaf/services/saf/amf/amfd/csiattr.cc
--- a/osaf/services/saf/amf/amfd/csiattr.cc
+++ b/osaf/services/saf/amf/amfd/csiattr.cc
@@ -509,6 +509,8 @@ static void csiattr_change_send_msg(AVD_
     compcsi = compcsi->csi_csicomp_next) {
     auto it = 
nds_mds_ver_db.find(compcsi->comp->su->su_on_node->node_info.nodeId);
 
+    if (it == nds_mds_ver_db.end()) 
+      continue; 
     //Check if this amfnd is capable of this functionality.
     if (it->second < AVSV_AVD_AVND_MSG_FMT_VER_7) {
       TRACE_3("not sending to '%s' on :%x with mds version:'%u'",
diff --git a/osaf/services/saf/amf/amfd/include/evt.h 
b/osaf/services/saf/amf/amfd/include/evt.h
--- a/osaf/services/saf/amf/amfd/include/evt.h
+++ b/osaf/services/saf/amf/amfd/include/evt.h
@@ -70,14 +70,20 @@ typedef enum avd_evt_type {
        AVD_EVT_ASSIGN_SI_DEP_STATE,
        AVD_IMM_REINITIALIZED,
        AVD_EVT_UNASSIGN_SI_DEP_STATE,
+       AVD_EVT_ND_MDS_VER_INFO,
        AVD_EVT_MAX
 } AVD_EVT_TYPE;
 
+struct AVD_EVT_ND_MDS_INFO {
+       SaClmNodeIdT node_id;
+       MDS_SVC_PVT_SUB_PART_VER mds_version;
+};
 union AVD_EVT_INFO {
        AVD_DND_MSG *avnd_msg;
        AVD_D2D_MSG *avd_msg;
        SaClmNodeIdT node_id;
        AVD_TMR tmr;
+       AVD_EVT_ND_MDS_INFO nd_mds_info;
        AVD_EVT_INFO() {new(&tmr) AVD_TMR();}
        ~AVD_EVT_INFO() {tmr.~AVD_TMR();}
 };
diff --git a/osaf/services/saf/amf/amfd/include/proc.h 
b/osaf/services/saf/amf/amfd/include/proc.h
--- a/osaf/services/saf/amf/amfd/include/proc.h
+++ b/osaf/services/saf/amf/amfd/include/proc.h
@@ -79,6 +79,7 @@ void avd_node_down_mw_susi_failover(AVD_
 void avd_node_down_func(AVD_CL_CB *cb, AVD_AVND *avnd);
 void avd_nd_sisu_state_info_evh(AVD_CL_CB *cb, struct AVD_EVT *evt);
 void avd_nd_compcsi_state_info_evh(AVD_CL_CB *cb, struct AVD_EVT *evt);
+void avd_avnd_mds_info_evh(AVD_CL_CB *cb, AVD_EVT *evt);
 uint32_t avd_node_down(AVD_CL_CB *cb, SaClmNodeIdT node_id);
 AVD_AVND *avd_msg_sanity_chk(AVD_EVT *evt, SaClmNodeIdT node_id,
        AVSV_DND_MSG_TYPE msg_typ, uint32_t msg_id);
diff --git a/osaf/services/saf/amf/amfd/main.cc 
b/osaf/services/saf/amf/amfd/main.cc
--- a/osaf/services/saf/amf/amfd/main.cc
+++ b/osaf/services/saf/amf/amfd/main.cc
@@ -123,7 +123,8 @@ static const AVD_EVT_HDLR g_actv_list[AV
        avd_role_switch_ncs_su_evh,  /* AVD_EVT_SWITCH_NCS_SU */
        avd_sidep_assign_evh, /* AVD_EVT_ASSIGN_SI_DEP_STATE */
        invalid_evh,            /* AVD_EVT_INVALID */
-       avd_sidep_unassign_evh /* AVD_EVT_UNASSIGN_SI_DEP_STATE */
+       avd_sidep_unassign_evh, /* AVD_EVT_UNASSIGN_SI_DEP_STATE */
+       avd_avnd_mds_info_evh, /* AVD_EVT_ND_MDS_VER_INFO*/
 };
 
 /* list of all the function pointers related to handling the events
@@ -164,7 +165,10 @@ static const AVD_EVT_HDLR g_stndby_list[
        /* Role change Event processing */
        avd_role_change_evh,    /* AVD_EVT_ROLE_CHANGE */
        standby_invalid_evh,    /* AVD_EVT_SWITCH_NCS_SU */
-       standby_invalid_evh     /* AVD_EVT_SI_DEP_STATE */
+       standby_invalid_evh,    /* AVD_EVT_ASSIGN_SI_DEP_STATE*/
+       standby_invalid_evh,    /* AVD_EVT_INVALID */
+       standby_invalid_evh,    /* AVD_EVT_UNASSIGN_SI_DEP_STATE*/
+       avd_avnd_mds_info_evh /* AVD_EVT_ND_MDS_VER_INFO*/
 };
 
 /* list of all the function pointers related to handling the events
@@ -205,7 +209,10 @@ static const AVD_EVT_HDLR g_quiesc_list[
        /* Role change Event processing */
        avd_role_change_evh,    /* AVD_EVT_ROLE_CHANGE */
        qsd_invalid_evh,        /* AVD_EVT_SWITCH_NCS_SU */
-       qsd_invalid_evh /* AVD_EVT_TMR_SI_DEP_TOL */
+       qsd_invalid_evh,               /* AVD_EVT_TMR_SI_DEP_TOL */
+       qsd_invalid_evh,        /* AVD_EVT_INVALID */
+       qsd_invalid_evh,        /* AVD_EVT_UNASSIGN_SI_DEP_STATE*/
+       avd_avnd_mds_info_evh /* AVD_EVT_ND_MDS_VER_INFO*/
 };
 
 /*****************************************************************************
diff --git a/osaf/services/saf/amf/amfd/mds.cc 
b/osaf/services/saf/amf/amfd/mds.cc
--- a/osaf/services/saf/amf/amfd/mds.cc
+++ b/osaf/services/saf/amf/amfd/mds.cc
@@ -419,18 +419,27 @@ static uint32_t avd_mds_svc_evt(MDS_CALL
                        break;
 
                case NCSMDS_SVC_ID_AVND:
-                       if (evt_info->i_node_id == cb->node_id_avd) {
-                               AVD_EVT *evt = new AVD_EVT();
-                                
-                               evt->rcv_evt = AVD_EVT_MDS_AVND_UP;
-                               cb->local_avnd_adest = evt_info->i_dest;
-                               if (m_NCS_IPC_SEND(&cb->avd_mbx, evt, 
NCS_IPC_PRIORITY_HIGH) != NCSCC_RC_SUCCESS) {
+                       {       
+                               if (evt_info->i_node_id == cb->node_id_avd) {
+                                       AVD_EVT *evt = new AVD_EVT();
+
+                                       evt->rcv_evt = AVD_EVT_MDS_AVND_UP;
+                                       cb->local_avnd_adest = evt_info->i_dest;
+                                       if (m_NCS_IPC_SEND(&cb->avd_mbx, evt, 
NCS_IPC_PRIORITY_HIGH) != NCSCC_RC_SUCCESS) {
+                                               LOG_ER("%s: ncs_ipc_send 
failed", __FUNCTION__);
+                                               delete evt;
+                                       }
+                               }
+                               //Post MDS version info to mailbox. 
+                               AVD_EVT *evt1 = new AVD_EVT();
+                               evt1->rcv_evt = AVD_EVT_ND_MDS_VER_INFO;
+                               evt1->info.nd_mds_info.mds_version = 
evt_info->i_rem_svc_pvt_ver;
+                               evt1->info.nd_mds_info.node_id = 
m_NCS_NODE_ID_FROM_MDS_DEST(evt_info->i_dest);
+                               if (m_NCS_IPC_SEND(&cb->avd_mbx, evt1, 
NCS_IPC_PRIORITY_HIGH) != NCSCC_RC_SUCCESS) {
                                        LOG_ER("%s: ncs_ipc_send failed", 
__FUNCTION__);
-                                       delete evt;
+                                       delete evt1;
                                }
-                       } 
-                       nds_mds_ver_db[evt_info->i_node_id] = 
evt_info->i_rem_svc_pvt_ver;
-
+                       }
                        break;
 
                default:
@@ -451,7 +460,6 @@ static uint32_t avd_mds_svc_evt(MDS_CALL
                case NCSMDS_SVC_ID_AVND:
                        {
                                AVD_EVT *evt = new AVD_EVT();
-                               nds_mds_ver_db.erase(evt_info->i_node_id);
                                evt->rcv_evt = AVD_EVT_MDS_AVND_DOWN;
                                evt->info.node_id = 
m_NCS_NODE_ID_FROM_MDS_DEST(evt_info->i_dest);
                                TRACE("avnd %" PRIx64 " down", 
evt_info->i_dest);
diff --git a/osaf/services/saf/amf/amfd/ndfsm.cc 
b/osaf/services/saf/amf/amfd/ndfsm.cc
--- a/osaf/services/saf/amf/amfd/ndfsm.cc
+++ b/osaf/services/saf/amf/amfd/ndfsm.cc
@@ -650,6 +650,9 @@ void avd_mds_avnd_down_evh(AVD_CL_CB *cb
        AVD_AVND *node = avd_node_find_nodeid(evt->info.node_id);
 
        TRACE_ENTER2("%x, %p", evt->info.node_id, node);
+       
+       //update MDS version db.
+       nds_mds_ver_db.erase(evt->info.node_id);
 
        if (node != nullptr) {
                // Do nothing if the local node goes down. Most likely due to 
system shutdown.
@@ -1021,3 +1024,15 @@ void avd_tmr_snd_hb_evh(AVD_CL_CB *cb, A
        TRACE_LEAVE();
 }
 
+/**
+ * @brief  This event is for remembering MDS version for AMFND.
+ * @param  ptr to AVD_CL_CB 
+ * @param  ptr to AVD_EVT
+ */
+void avd_avnd_mds_info_evh(AVD_CL_CB *cb, AVD_EVT *evt) {
+  TRACE_ENTER2("MDS version:%d, nodeid:%x",
+    evt->info.nd_mds_info.mds_version, evt->info.nd_mds_info.node_id);
+  nds_mds_ver_db[evt->info.nd_mds_info.node_id] = 
evt->info.nd_mds_info.mds_version;
+  TRACE_LEAVE();
+}
+
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
@@ -395,6 +395,8 @@ uint32_t avnd_evt_mds_ava_dn_evh(AVND_CB
 
        TRACE_ENTER();
 
+       //update MDS version db.
+       agent_mds_ver_db.erase(mds_evt->mds_dest);
        /* get the matching registered comp (if any) */
        for (comp = avnd_compdb_rec_get_next(cb->compdb, "");
                 comp != nullptr;
@@ -3001,3 +3003,17 @@ void avnd_amf_pxied_comp_clean_cbk_fill(
        osaf_extended_name_alloc(cn.c_str(), &cbk->param.comp_term.comp_name);
 }
 
+/**
+ * @brief  This event is for remembering MDS dest and version of agent. 
+ * @param  ptr to AVND_CB 
+ * @param  ptr to AVND_EVT 
+ * @return uint32_t
+ */
+uint32_t avnd_amfa_mds_info_evh(AVND_CB *cb, AVND_EVT *evt) {
+  TRACE_ENTER2("mds_dest :%lu, MDS version:%d",
+    evt->info.amfa_mds_info.mds_dest, evt->info.amfa_mds_info.mds_version);
+  agent_mds_ver_db[evt->info.amfa_mds_info.mds_dest] =  
evt->info.amfa_mds_info.mds_version;
+  TRACE_LEAVE();
+  return NCSCC_RC_SUCCESS;
+}
+
diff --git a/osaf/services/saf/amf/amfnd/evt.cc 
b/osaf/services/saf/amf/amfnd/evt.cc
--- a/osaf/services/saf/amf/amfnd/evt.cc
+++ b/osaf/services/saf/amf/amfnd/evt.cc
@@ -183,6 +183,8 @@ AVND_EVT *avnd_evt_create(AVND_CB *cb,
                evt->info.pm_evt.pm_rec = (AVND_COMP_PM_REC *)info;
                break;
 
+       case AVND_EVT_AMFA_MDS_VER_INFO:
+               break;
        default:
                delete evt;
                evt = nullptr;
@@ -312,6 +314,8 @@ void avnd_evt_destroy(AVND_EVT *evt)
        case AVND_EVT_IR:
                osaf_extended_name_free(&evt->info.ir_evt.su_name);
                break;
+       case AVND_EVT_AMFA_MDS_VER_INFO:
+               break;
 
        default:
                LOG_NO("%s: unknown event type %u", __FUNCTION__, type);
diff --git a/osaf/services/saf/amf/amfnd/include/avnd_evt.h 
b/osaf/services/saf/amf/amfnd/include/avnd_evt.h
--- a/osaf/services/saf/amf/amfnd/include/avnd_evt.h
+++ b/osaf/services/saf/amf/amfnd/include/avnd_evt.h
@@ -112,6 +112,7 @@ typedef enum avnd_evt_type {
        AVND_EVT_PID_EXIT,
        AVND_EVT_TMR_QSCING_CMPL,
        AVND_EVT_IR,
+       AVND_EVT_AMFA_MDS_VER_INFO,
 
        AVND_EVT_MAX
 } AVND_EVT_TYPE;
@@ -164,6 +165,12 @@ typedef struct avnd_ir_evt {
        bool status;    /* Result of Imm read, true is succ. */
 } AVND_IR_EVT;
 
+struct AVND_EVT_AMFA_MDS_INFO {
+       MDS_DEST mds_dest;
+       MDS_SVC_PVT_SUB_PART_VER mds_version;
+};
+
+
 /* AVND top-level event structure */
 typedef struct avnd_evt_tag {
        struct avnd_evt_tag *next;
@@ -183,6 +190,7 @@ typedef struct avnd_evt_tag {
                AVND_COMP_FSM_EVT comp_fsm;
                AVND_PM_MON_EVT pm_evt;
                AVND_IR_EVT ir_evt;
+               AVND_EVT_AMFA_MDS_INFO amfa_mds_info;
        } info;
 
 } AVND_EVT;
diff --git a/osaf/services/saf/amf/amfnd/include/avnd_proc.h 
b/osaf/services/saf/amf/amfnd/include/avnd_proc.h
--- a/osaf/services/saf/amf/amfnd/include/avnd_proc.h
+++ b/osaf/services/saf/amf/amfnd/include/avnd_proc.h
@@ -117,5 +117,6 @@ uint32_t avnd_evt_avd_hb_evh(struct avnd
 uint32_t avnd_evt_tmr_avd_hb_duration_evh(struct avnd_cb_tag *, struct 
avnd_evt_tag *);
 uint32_t avnd_evt_tmr_sc_absence_evh(struct avnd_cb_tag *, struct avnd_evt_tag 
*);
 uint32_t avnd_evt_avd_reboot_evh(struct avnd_cb_tag *, struct avnd_evt_tag *);
+uint32_t avnd_amfa_mds_info_evh(struct avnd_cb_tag *, struct avnd_evt_tag *);
 
 #endif
diff --git a/osaf/services/saf/amf/amfnd/main.cc 
b/osaf/services/saf/amf/amfnd/main.cc
--- a/osaf/services/saf/amf/amfnd/main.cc
+++ b/osaf/services/saf/amf/amfnd/main.cc
@@ -120,7 +120,8 @@ extern const AVND_EVT_HDLR g_avnd_func_l
        avnd_evt_last_step_term_evh,    /* AVND_EVT_LAST_STEP_TERM */
        avnd_evt_pid_exit_evh,  /* AVND_EVT_PID_EXIT */
        avnd_evt_tmr_qscing_cmpl_evh,   /* AVND_EVT_TMR_QSCING_CMPL */
-       avnd_evt_ir_evh /* AVND_EVT_IR */
+       avnd_evt_ir_evh,        /* AVND_EVT_IR */
+       avnd_amfa_mds_info_evh /* AVND_EVT_AMFA_MDS_VER_INFO*/
 };
 
 extern struct ImmutilWrapperProfile immutilWrapperProfile;
diff --git a/osaf/services/saf/amf/amfnd/mds.cc 
b/osaf/services/saf/amf/amfnd/mds.cc
--- a/osaf/services/saf/amf/amfnd/mds.cc
+++ b/osaf/services/saf/amf/amfnd/mds.cc
@@ -557,8 +557,11 @@ uint32_t avnd_mds_svc_evt(AVND_CB *cb, M
                        break;
 
                case NCSMDS_SVC_ID_AVA:
-                       /*  New AvA has come up. Dont do anything now */
-                       agent_mds_ver_db[evt_info->i_dest] = 
(MDS_SVC_PVT_SUB_PART_VER)evt_info->i_rem_svc_pvt_ver;
+                       //Post MDS info of the agent.
+                       evt = avnd_evt_create(cb, AVND_EVT_AMFA_MDS_VER_INFO, 
0, &evt_info->i_dest, 0, 0, 0);
+                       evt->info.amfa_mds_info.mds_dest = evt_info->i_dest;
+                       evt->info.amfa_mds_info.mds_version= 
evt_info->i_rem_svc_pvt_ver;
+                       
                        break;
 
                case NCSMDS_SVC_ID_AVND:
@@ -605,7 +608,6 @@ uint32_t avnd_mds_svc_evt(AVND_CB *cb, M
                        break;
 
                case NCSMDS_SVC_ID_AVA:
-                       agent_mds_ver_db.erase(evt_info->i_dest);
                        evt = avnd_evt_create(cb, AVND_EVT_MDS_AVA_DN, 0, 
&evt_info->i_dest, 0, 0, 0);
                        break;
 

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

Reply via email to