From: Mohan Kanakam <mo...@hasolutions.in> --- src/ntf/ntfd/NtfSubscription.cc | 38 +++++++++++++++++++++++++++++++++++++- src/ntf/ntfd/ntfs_evt.c | 12 ++++++++++++ src/ntf/ntfd/ntfs_mbcsv.c | 18 ++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-)
diff --git a/src/ntf/ntfd/NtfSubscription.cc b/src/ntf/ntfd/NtfSubscription.cc index 9bf47c0..1e1d2c7 100644 --- a/src/ntf/ntfd/NtfSubscription.cc +++ b/src/ntf/ntfd/NtfSubscription.cc @@ -23,6 +23,7 @@ #include "base/logtrace.h" #include "ntf/common/ntfsv_mem.h" #include "ntf/ntfd/NtfClient.h" +#include "ntfs.h" #if DISCARDED_TEST /* TODO REMOVE TEST */ @@ -280,9 +281,44 @@ void NtfSubscription::sendNotification(NtfSmartPtr& notification, * list.*/ notificationSentConfirmed(client->getClientId(), getSubscriptionId(), notification->getNotificationId(), 1); - } + { //Start + // Generate Discarded Ntf Clean up as + //we are not able to send second time. + ntfsv_ntfs_evt_t *evt = NULL; + if (NULL == + (evt = (ntfsv_ntfs_evt_t *)calloc(1, sizeof(ntfsv_ntfs_evt_t)))) { + LOG_WA("mem alloc FAILURE"); + goto done; + } + evt->evt_type = NTFSV_NTFS_EVT_NTFA_DOWN; + /** Initialize the Event Header **/ + evt->cb_hdl = 1; //Filling non-zero to determine an internal event + evt->fr_node_id = + m_NTFS_GET_NODE_ID_FROM_ADEST(client->getMdsDest()); + evt->fr_dest = client->getMdsDest(); + + /** Initialize the MDS portion of the header **/ + evt->info.mds_info.node_id = + m_NTFS_GET_NODE_ID_FROM_ADEST(client->getMdsDest()); + evt->info.mds_info.mds_dest_id = client->getMdsDest(); + TRACE("Nodeid: %u, MdsDest: %lu", evt->info.mds_info.node_id, + evt->info.mds_info.mds_dest_id); + TRACE("mdsDest: %" PRIu64, evt->info.mds_info.mds_dest_id); + + /* Push the event and we are done */ + if (m_NCS_IPC_SEND(&ntfs_cb->mbx, evt, NCS_IPC_PRIORITY_HIGH) != + NCSCC_RC_SUCCESS) { + LOG_WA("ipc send failed"); + free(evt); + goto done; + } + LOG_ER("Down event missed for app with mdsdest: %lu on node: %u", + evt->info.mds_info.mds_dest_id, evt->info.mds_info.node_id); + } // End + } free(d_info.discardedNotificationIdentifiers); } +done: TRACE_LEAVE(); } diff --git a/src/ntf/ntfd/ntfs_evt.c b/src/ntf/ntfd/ntfs_evt.c index 19b2f60..40cd083 100644 --- a/src/ntf/ntfd/ntfs_evt.c +++ b/src/ntf/ntfd/ntfs_evt.c @@ -110,6 +110,18 @@ static uint32_t proc_ntfa_updn_mds_msg(ntfsv_ntfs_evt_t *evt) } else { clientRemoveMDS(evt->fr_dest); } + if (evt->cb_hdl == 1) { + // Internal down generated event in case of discarded ntf + TRACE("Sending async update to standby"); + ntfsv_ckpt_msg_t ckpt; + memset(&ckpt, 0, sizeof(ckpt)); + ckpt.header.ckpt_rec_type = NTFS_CKPT_AGENT_DOWN; + ckpt.header.num_ckpt_records = 1; + ckpt.header.data_len = 0; + ckpt.ckpt_rec.agent_dest = evt->fr_dest; + update_standby(&ckpt, NCS_MBCSV_ACT_RMV); + } + break; default: TRACE("Unknown evt type!!!"); diff --git a/src/ntf/ntfd/ntfs_mbcsv.c b/src/ntf/ntfd/ntfs_mbcsv.c index 713615a..83162a5 100644 --- a/src/ntf/ntfd/ntfs_mbcsv.c +++ b/src/ntf/ntfd/ntfs_mbcsv.c @@ -602,6 +602,24 @@ static uint32_t ckpt_encode_async_update(ntfs_cb_t *ntfs_cb, EDU_HDL edu_hdl, TRACE_2("eduerr: %x", ederror); } break; + case NTFS_CKPT_AGENT_DOWN: + /* Encode RegHeader */ + ckpt_hdr.ckpt_rec_type = NTFS_CKPT_AGENT_DOWN; + ckpt_hdr.num_ckpt_records = 1; + ckpt_hdr.data_len = 0; + enc_ckpt_header(pheader, ckpt_hdr); + + TRACE_2("NTFS_CKPT_AGENT_DOWN REC: ENCODE"); + rc = m_NCS_EDU_EXEC(&ntfs_cb->edu_hdl, + ncs_edp_mds_dest, + &cbk_arg->info.encode.io_uba, + EDP_OP_TYPE_ENC, &data->ckpt_rec.agent_dest, &ederror); + if (rc != NCSCC_RC_SUCCESS) { + m_NCS_EDU_PRINT_ERROR_STRING(ederror); + /* free(data); FIX ??? */ + TRACE_2("eduerr: %x", ederror); + } + break; case NTFS_CKPT_SUBSCRIBE: TRACE("Async update NTFS_CKPT_SUBSCRIBE"); ckpt_hdr.ckpt_rec_type = NTFS_CKPT_SUBSCRIBE; -- 2.7.4 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel