From: Mohan Kanakam <[email protected]>
---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel