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