Hi Hung,
Reviewed and tested the patch.
Ack.
/Neel.
On 2016/08/29 09:47 AM, Hung Nguyen wrote:
> osaf/services/saf/immsv/immd/immd_evt.c | 90
> ++++++++++++++------------------
> osaf/services/saf/immsv/immd/immd_mds.c | 3 +
> 2 files changed, 43 insertions(+), 50 deletions(-)
>
>
> There's no guarantee in order of service event and intro message from IMMND.
>
> When processing intro message, if fail to get the IMMND node, we will add the
> IMMND node to the immnd_tree list.
> Later when the service event comes, it will do nothing as the IMMND node has
> already been added.
>
> Prior to this patch, any intro message comes before service event will be
> droppped,
> and the IMMND will have to resend the intro message (after 5 seconds for new
> IMMND, after 1 second for veteran IMMND).
>
> diff --git a/osaf/services/saf/immsv/immd/immd_evt.c
> b/osaf/services/saf/immsv/immd/immd_evt.c
> --- a/osaf/services/saf/immsv/immd/immd_evt.c
> +++ b/osaf/services/saf/immsv/immd/immd_evt.c
> @@ -855,6 +855,35 @@ static void immd_accept_node(IMMD_CB *cb
> TRACE_LEAVE();
> }
>
> +static IMMD_IMMND_INFO_NODE* immd_add_immnd_node(IMMD_CB *cb, MDS_DEST dest)
> {
> + bool add_flag = true;
> + IMMD_IMMND_INFO_NODE* node_info;
> +
> + immd_immnd_info_node_find_add(&cb->immnd_tree, &dest, &node_info,
> &add_flag);
> + if (!node_info) {
> + LOG_ER("Failed to add IMMND node dest %" PRIu64, dest);
> + return NULL;
> + }
> +
> + if (add_flag) {
> + TRACE("IMMND node has already been added, dest %" PRIu64, dest);
> + }
> +
> + if (m_IMMND_IS_ON_SCXB(cb->immd_self_id,
> immd_get_slot_and_subslot_id_from_mds_dest(dest))) {
> + TRACE_5("Added local IMMND");
> + cb->is_loc_immnd_up = true;
> + cb->loc_immnd_dest = dest;
> + } else if (m_IMMND_IS_ON_SCXB(cb->immd_remote_id,
> immd_get_slot_and_subslot_id_from_mds_dest(dest))) {
> + TRACE_5("Added remote IMMND - node_id:%x",
> m_NCS_NODE_ID_FROM_MDS_DEST(dest));
> + cb->is_rem_immnd_up = true;
> + cb->rem_immnd_dest = dest;
> + }
> +
> + LOG_IN("Added IMMND node with dest %" PRIu64, dest);
> +
> + return node_info;
> +}
> +
>
> /****************************************************************************
> * Name : immd_evt_proc_immnd_announce_dump
> *
> @@ -1358,9 +1387,12 @@ static uint32_t immd_evt_proc_immnd_intr
>
> immd_immnd_info_node_get(&cb->immnd_tree, &sinfo->dest, &node_info);
> if (!node_info) {
> - LOG_WA("Node not found %" PRIu64, sinfo->dest);
> - proc_rc = NCSCC_RC_FAILURE;
> - goto done;
> + LOG_WA("Node not found dest %" PRIu64 ", add the missing IMMND
> node", sinfo->dest);
> + node_info = immd_add_immnd_node(cb, sinfo->dest);
> + if (!node_info) {
> + proc_rc = NCSCC_RC_FAILURE;
> + goto done;
> + }
> }
>
> oldPid = node_info->immnd_execPid;
> @@ -2605,14 +2637,10 @@ static uint32_t immd_evt_proc_mds_evt(IM
> {
> IMMSV_MDS_INFO *mds_info;
> IMMD_IMMND_INFO_NODE *node_info = NULL;
> - bool add_flag = true;
> - uint32_t phy_slot_sub_slot;
> TRACE_ENTER();
>
> mds_info = &evt->info.mds_info;
>
> - memset(&phy_slot_sub_slot, 0, sizeof(uint32_t));
> -
> if (mds_info->svc_id == NCSMDS_SVC_ID_IMMND)
> TRACE_5("Received IMMND service event");
> else if (mds_info->svc_id == NCSMDS_SVC_ID_IMMD)
> @@ -2705,51 +2733,13 @@ static uint32_t immd_evt_proc_mds_evt(IM
> }
>
> if (mds_info->svc_id == NCSMDS_SVC_ID_IMMND) {
> - phy_slot_sub_slot =
> immd_get_slot_and_subslot_id_from_mds_dest(mds_info->dest);
> - immd_immnd_info_node_find_add(&cb->immnd_tree,
> &mds_info->dest, &node_info, &add_flag);
> - LOG_IN("node with dest ADDED %" PRIu64, mds_info->dest);
> -
> - if (m_IMMND_IS_ON_SCXB(cb->immd_self_id,
> -
> immd_get_slot_and_subslot_id_from_mds_dest(mds_info->dest))) {
> - TRACE_5("NCSMDS_UP for IMMND local");
> - cb->is_loc_immnd_up = true;
> - cb->loc_immnd_dest = mds_info->dest;
> - if (cb->ha_state == SA_AMF_HA_ACTIVE) {
> - TRACE_5("NCSMDS_UP IMMND THIS IMMD is
> ACTIVE");
> - }
> + if (cb->ha_state == SA_AMF_HA_ACTIVE) {
> + TRACE_5("NCSMDS_UP and this IMMD is ACTIVE");
> + } else if (cb->ha_state == SA_AMF_HA_STANDBY) {
> + TRACE_5("NCSMDS_UP and this IMMD is STANDBY");
> }
>
> - /* When IMMND ON STANDBY COMES UP */
> - if (m_IMMND_IS_ON_SCXB(cb->immd_remote_id,
> -
> immd_get_slot_and_subslot_id_from_mds_dest(mds_info->dest))) {
> - TRACE_5("REMOTE IMMND UP - node:%x",
> mds_info->node_id);
> - cb->is_rem_immnd_up = true; //ABT BUGFIX
> 080811
> - cb->rem_immnd_dest = mds_info->dest;
> - if (cb->ha_state == SA_AMF_HA_ACTIVE) {
> - TRACE_5("NCSMDS_UP for REMOTE IMMND,
> THIS IMMD is ACTIVE");
> - }
> - }
> -
> - if (cb->ha_state == SA_AMF_HA_ACTIVE) {
> - immd_immnd_info_node_get(&cb->immnd_tree,
> &mds_info->dest, &node_info);
> - if (!node_info) {
> - TRACE_5("ABT WE SHOULD NEVER GET HERE");
> - /*ABT NOT SURE WHAT THIS BRANCH MEANS,
> CHECK Ckpt code */
> - goto done;
> - } else {
> - TRACE_5("NCSMDS_UP and THIS IMMD is
> ACTIVE: up_proc");
> - }
> - }
> -
> - if (cb->ha_state == SA_AMF_HA_STANDBY) {
> - immd_immnd_info_node_get(&cb->immnd_tree,
> &mds_info->dest, &node_info);
> - if (!node_info) {
> - TRACE_5("ABT WE SHOULD NEVER GET HERE.
> NCSMDS_UP and THIS IMMD is SBY");
> - goto done;
> - } else {
> - TRACE_5("NCSMDS_UP and THIS IMMD is
> SBY");
> - }
> - }
> + immd_add_immnd_node(cb, mds_info->dest);
> }
>
> break;
> diff --git a/osaf/services/saf/immsv/immd/immd_mds.c
> b/osaf/services/saf/immsv/immd/immd_mds.c
> --- a/osaf/services/saf/immsv/immd/immd_mds.c
> +++ b/osaf/services/saf/immsv/immd/immd_mds.c
> @@ -541,6 +541,9 @@ static uint32_t immd_mds_svc_evt(IMMD_CB
> IMMSV_EVT *evt = NULL;
> uint32_t rc;
>
> + LOG_NO("MDS event from svc_id %u (change:%d, dest:%" PRIu64 ")",
> + svc_evt->i_svc_id, svc_evt->i_change, svc_evt->i_dest);
> +
> evt = calloc(1, sizeof(IMMSV_EVT));
>
> if (!evt) {
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel