osaf/libs/agents/saf/ntfa/ntfa_mds.c |  11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)


When running life cycle APIs from multiple handles in multiple threads, ntfd 
processes
the previous NCSMDS_DOWN event from last finalize after processes following 
initialze.
This will unexpectedly delete all clients which are running due to late 
processing
NCSMDS_DOWN.

The problem is seen by sometimes (1) there's a shortcoming NCSMDS_DOWN from last
finialize coming after next initialize req message at mds callback. Also, (2) 
another
problem in ntfd, which is sending NTFSV_NTFS_EVT_NTFA_DOWN with lower priority 
than
NTFSV_NTFS_NTFSV_MSG. This various prioriy will also cause ntfd process 
NCSMDS_DOWN
after next intialize even NCSMDS_DOWN coming before initialize req message at 
mds
callback.

At this stage, for the problem (1), it is not sure whether or not this is mds 
issue,
since all APIs have been sent with high priority. This patch lowers send 
priority of
initialize request msg, which gives a chance of all messages following last 
finalize
response message coming to ntfd. For the problem (2), given that NCSMDOWN and 
intialize
req message coming to ntfd in correct order at mds callback, now those events 
will be
sent to ntfd's mailbox with the same priority (MDS_SEND_PRIORITY_MEDIUM =
NCS_IPC_PRIORITY_NORMAL). The unexpected client deletion as described above 
should not
be seen. After this patch, if this problem is seen again, it most likely from 
mds
who does not ensure NCSMDS_DOWN and intialize req are respectively sent from 
Agent
and received at NTFD in right timing order.

diff --git a/osaf/libs/agents/saf/ntfa/ntfa_mds.c 
b/osaf/libs/agents/saf/ntfa/ntfa_mds.c
--- a/osaf/libs/agents/saf/ntfa/ntfa_mds.c
+++ b/osaf/libs/agents/saf/ntfa/ntfa_mds.c
@@ -1177,7 +1177,16 @@ uint32_t ntfa_mds_msg_sync_send(ntfa_cb_
        mds_info.info.svc_send.i_msg = (NCSCONTEXT)i_msg;
        mds_info.info.svc_send.i_to_svc = NCSMDS_SVC_ID_NTFS;
        mds_info.info.svc_send.i_sendtype = MDS_SENDTYPE_SNDRSP;
-       mds_info.info.svc_send.i_priority = MDS_SEND_PRIORITY_HIGH;     /* 
fixme? */
+
+       /* Lower priority of initialize_req msg so that the other existing
+        * life cycle msg can be completed, for multiple handles usage.
+        */
+       if (i_msg->info.api_info.type == NTFSV_INITIALIZE_REQ) {
+               mds_info.info.svc_send.i_priority = MDS_SEND_PRIORITY_MEDIUM;
+       } else {
+               mds_info.info.svc_send.i_priority = MDS_SEND_PRIORITY_HIGH;    
/* fixme? */
+       }
+
        /* fill the sub send rsp strcuture */
        mds_info.info.svc_send.info.sndrsp.i_time_to_wait = timeout;    /* 
timeto wait in 10ms FIX!!! */
        mds_info.info.svc_send.info.sndrsp.i_to_dest = cb->ntfs_mds_dest;

------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity 
planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to