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

Reply via email to