Ok I need some time to re-check the TIPC code , will back to you soon.
-AVM On 8/19/2016 1:46 PM, Hans Nordebäck wrote: > Hi Mahesh, > > there is a problem that TIPC may silently drop messages at overload > situations, as MDS uses the SOCK_RDM option. > > At least it has to be logged when messages are dropped. It is allowed > in TIPC to set TIPC_DROPPABLE=false and also > > use multicast. The concern may be that the send buffer size may also > be overloaded at receive buffer full, > > as the ancillary message has to be sent, this case is though very > unlikely. > > I'll update the patch with the logging of the returned message > removed, and only log that a message has been dropped, which > > should be enough for debugging purposes. > > /Thanks HansN > > > > On 08/18/2016 11:27 AM, A V Mahesh wrote: >> Hi HansN, >> >> It seem you missed to see below : >> >> On 8/12/2016 9:11 AM, A V Mahesh wrote: >>> Hi HansN, >>> >>> We were having ticket for this raised by Hans Feldt >>> `https://sourceforge.net/p/opensaf/tickets/634/` >>> >>> at that time i have give my analysis base the MDS code at that time >>> as below please check. >>> >>> ================================================================================================ >>> >>> >>> >>> The Linux TIPC 2.0 Programmer's Guide in section 1.5.7. Multicast >>> Message Delivery mention that. >>> >>> The TIPC currently does not permit an application to send a >>> multicast message with the "destination droppable" setting disabled. >>> Consequently, TIPC will never try to return an undeliverable >>> multicast message to its sender. >>> >>> so if we set destination droppable disabled , multicast is not >>> permitted >>> I experimented setting TIPC_DEST_DROPPABLE=off in multicast_demo and >>> observed that multicast is working >>> >>> As if The Opensaf using multicast , it is not allowed to set >>> TIPC_DEST_DROPPABLE=off >>> >>> ========================================================================================== >>> >> >> >> >> So the TIPC_DEST_DROPPABLE should be enabled only if >> MDS_TIPC_MCAST_ENABLED is disabled, >> currently by default TIPC Multicast Messaging Setting enabled >> (MDS_TIPC_MCAST_ENABLED =1 ) >> in /etc/opensaf/nid.conf , if TIPC Multicast Messagingis disabled we >> can set TIPC_DEST_DROPPABLE >> dynamically. >> >> ========================================================================== >> >> >> # This is valid when above MDS_TRANSPORT is set to TIPC. >> # Setting MDS_TIPC_MCAST_ENABLED to 1 or 0, allows OpenSAF >> # to enable or disable TIPC Multicast Messaging. >> # By Default TIPC Multicast Messaging is Enabled. >> # Note: In case of TIPC Multicast Messaging disabled (0), the >> performance >> # of OpenSAF will be considerably lower as compared to Enabled (1). >> export MDS_TIPC_MCAST_ENABLED=1 >> >> ========================================================================== >> >> >> -AVM >> >> >> On 8/18/2016 2:43 PM, Hans Nordeback wrote: >>> osaf/libs/core/mds/mds_dt_tipc.c | 32 >>> +++++++++++++++++++++++++------- >>> 1 files changed, 25 insertions(+), 7 deletions(-) >>> >>> >>> diff --git a/osaf/libs/core/mds/mds_dt_tipc.c >>> b/osaf/libs/core/mds/mds_dt_tipc.c >>> --- a/osaf/libs/core/mds/mds_dt_tipc.c >>> +++ b/osaf/libs/core/mds/mds_dt_tipc.c >>> @@ -320,6 +320,15 @@ uint32_t mdtm_tipc_init(NODE_ID nodeid, >>> m_MDS_LOG_INFO("MDTM: Successfully set default >>> socket option TIPC_IMP = %d", TIPCIMPORTANCE); >>> } >>> + int droppable = 0; >>> + if (setsockopt(tipc_cb.BSRsock, SOL_TIPC, >>> TIPC_DEST_DROPPABLE, &droppable, sizeof(droppable)) != 0) { >>> + LOG_ER("MDTM: Can't set TIPC_DEST_DROPPABLE to zero >>> err :%s\n", strerror(errno)); >>> + m_MDS_LOG_ERR("MDTM: Can't set TIPC_DEST_DROPPABLE >>> to zero err :%s\n", strerror(errno)); >>> + osafassert(0); >>> + } else { >>> + m_MDS_LOG_NOTIFY("MDTM: Successfully set >>> TIPC_DEST_DROPPABLE to zero"); >>> + } >>> + >>> return NCSCC_RC_SUCCESS; >>> } >>> @@ -563,6 +572,8 @@ ssize_t recvfrom_connectionless (int sd, >>> unsigned char *cptr; >>> int i; >>> int has_addr; >>> + int anc_data[2]; >>> + >>> ssize_t sz; >>> has_addr = (from != NULL) && (addrlen != NULL); >>> @@ -591,19 +602,26 @@ ssize_t recvfrom_connectionless (int sd, >>> if the message was sent using a TIPC name or name >>> sequence as the >>> destination rather than a TIPC port ID So abort for >>> TIPC_ERRINFO and TIPC_RETDATA*/ >>> if (anc->cmsg_type == TIPC_ERRINFO) { >>> - /* TIPC_ERRINFO - TIPC error code associated with a >>> returned data message or a connection termination message so abort */ >>> - m_MDS_LOG_CRITICAL("MDTM: undelivered message >>> condition ancillary data: TIPC_ERRINFO abort err :%s", >>> strerror(errno) ); >>> - abort(); >>> + anc_data[0] = *((unsigned int*)(CMSG_DATA(anc) + 0)); >>> + if (anc_data[0] == TIPC_ERR_OVERLOAD) { >>> + LOG_CR("MDTM: undelivered message condition >>> ancillary data: TIPC_ERR_OVERLOAD"); >>> + m_MDS_LOG_CRITICAL("MDTM: undelivered message >>> condition ancillary data: TIPC_ERR_OVERLOAD"); >>> + } else { >>> + /* TIPC_ERRINFO - TIPC error code associated >>> with a returned data message or a connection termination message so >>> abort */ >>> + LOG_CR("MDTM: undelivered message condition >>> ancillary data: TIPC_ERRINFO abort err : %d", anc_data[0]); >>> + m_MDS_LOG_CRITICAL("MDTM: undelivered message >>> condition ancillary data: TIPC_ERRINFO abort err : %d", anc_data[0]); >>> + } >>> } else if (anc->cmsg_type == TIPC_RETDATA) { >>> - /* If we set TIPC_DEST_DROPPABLE off messge >>> (configure TIPC to return rejected messages to the sender ) >>> + /* If we set TIPC_DEST_DROPPABLE off message >>> (configure TIPC to return rejected messages to the sender ) >>> we will hit this when we implement MDS >>> retransmit lost messages abort can be replaced with flow control >>> logic*/ >>> for (i = anc->cmsg_len - sizeof(*anc); i > 0; i--) { >>> - m_MDS_LOG_DBG("MDTM: returned byte 0x%02x\n", >>> *cptr); >>> + LOG_CR("MDTM: returned byte 0x%02x\n", *cptr); >>> + m_MDS_LOG_CRITICAL("MDTM: returned byte >>> 0x%02x\n", *cptr); >>> cptr++; >>> } >>> /* TIPC_RETDATA -The contents of a returned data >>> message so abort */ >>> - m_MDS_LOG_CRITICAL("MDTM: undelivered message >>> condition ancillary data: TIPC_RETDATA abort err :%s", >>> strerror(errno) ); >>> - abort(); >>> + LOG_CR("MDTM: undelivered message condition >>> ancillary data: TIPC_RETDATA"); >>> + m_MDS_LOG_CRITICAL("MDTM: undelivered message >>> condition ancillary data: TIPC_RETDATA"); >>> } else if (anc->cmsg_type == TIPC_DESTNAME) { >>> if (sz == 0) { >>> m_MDS_LOG_DBG("MDTM: recd bytes=0 on received >>> on sock, abnormal/unknown condition. Ignoring"); >> > ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel