Hi HansN

On 11/9/2016 8:50 PM, Anders Widell wrote:
> When looking more closely at this patch I notice that there is a risk 
> for starvation here. We ought to have a message counter and break out 
> of the receive loop after we have received, say, 1024 messages - even 
> if there are still more messages on the socket. This applies to both 
> the topology socket and the data socket. 

I though you will change the patch with `break out of the receive loop 
after we have received, say, 1024 messages`  logic  .

-AVM

On 11/22/2016 1:19 PM, Hans Nordebäck wrote:
> Hi Mahesh,
>
> I didn't find any review comments on V2, only from AndersW. I did find some 
> questions on MSG_DONTWAIT flag only. /Regards HansN
>
> -----Original Message-----
> From: A V Mahesh [mailto:mahesh.va...@oracle.com]
> Sent: den 22 november 2016 04:10
> To: Hans Nordebäck <hans.nordeb...@ericsson.com>
> Cc: opensaf-devel@lists.sourceforge.net; Anders Widell 
> <anders.wid...@ericsson.com>
> Subject: Re: [devel] [PATCH 1 of 1] mds: Remove use of mutex at TIPC receive 
> (part 1) V2 [#2132]
>
> Hi HansN,
>
> Is this V3 patch after Anders & My review comments  ?
>
> -AVM
>
>
> On 11/21/2016 7:30 PM, Hans Nordebäck wrote:
>> Hi Mahesh,
>> Have you had time to review this patch?
>> /Regards HansN
>>
>> -----Original Message-----
>> From: Hans Nordeback [mailto:hans.nordeb...@ericsson.com]
>> Sent: den 27 oktober 2016 17:29
>> To: Anders Widell <anders.wid...@ericsson.com>;
>> mahesh.va...@oracle.com
>> Cc: opensaf-devel@lists.sourceforge.net
>> Subject: [devel] [PATCH 1 of 1] mds: Remove use of mutex at TIPC
>> receive (part 1) V2 [#2132]
>>
>>    osaf/libs/core/mds/mds_dt_tipc.c |  374 
>> +++++++++++++++++++++-----------------
>>    1 files changed, 203 insertions(+), 171 deletions(-)
>>
>>
>> This first part changes the socket descriptors to non blocking at receive.
>> This to read all incoming messages before returning to the next poll call.
>>
>> 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
>> @@ -565,15 +565,13 @@ static uint32_t mdtm_destroy_rcv_task(vo  ssize_t 
>> recvfrom_connectionless (int sd, void *buf, size_t nbytes, int flags,
>>              struct sockaddr *from, socklen_t *addrlen)  {
>> -    struct msghdr msg;
>> -    struct iovec iov;
>> +    struct msghdr msg = {0};
>> +    struct iovec iov = {0};
>>      char anc_buf[CMSG_SPACE(8) + CMSG_SPACE(1024) + CMSG_SPACE(12)];
>>      struct cmsghdr *anc;
>>      int has_addr;
>>      int anc_data[2];
>>    
>> -    ssize_t sz;
>> -
>>      has_addr = (from != NULL) && (addrlen != NULL);
>>    
>>      iov.iov_base = buf;
>> @@ -586,55 +584,63 @@ ssize_t recvfrom_connectionless (int sd,
>>      msg.msg_control = anc_buf;
>>      msg.msg_controllen = sizeof(anc_buf);
>>    
>> -    sz = recvmsg(sd, &msg, flags);
>> -    if (sz >= 0) {
>> -            anc = CMSG_FIRSTHDR(&msg);
>> -            if (anc == NULL) {
>> -                    m_MDS_LOG_DBG("MDTM: size: %d  anc is NULL", (int)sz);
>> +    while (true) {
>> +            ssize_t sz = recvmsg(sd, &msg, flags);
>> +            if (sz == -1) {
>> +                    if (errno == EAGAIN || errno == EWOULDBLOCK) {
>> +                            return sz;
>> +                    } else if (errno == EINTR) {
>> +                            continue;
>> +                    } else {
>> +                            /* -1 indicates connection termination 
>> connectionless this not possible */
>> +                            abort();
>> +                    }
>>              }
>> -            while (anc != NULL) {
>> -
>> -                    /* Receipt of a normal data message never creates the 
>> TIPC_ERRINFO
>> -                       and TIPC_RETDATA objects, and only creates the 
>> TIPC_DESTNAME object
>> -                       if the message was sent using a TIPC name or name 
>> sequence as the
>> -                       destination rather than a TIPC port ID*/
>> -                    if (anc->cmsg_type == TIPC_ERRINFO) {
>> -                            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");
>> +            if (sz >= 0) {
>> +                    anc = CMSG_FIRSTHDR(&msg);
>> +                    if (anc == NULL) {
>> +                            m_MDS_LOG_DBG("MDTM: size: %d  anc is NULL", 
>> (int)sz);
>> +                    }
>> +                    while (anc != NULL) {
>> +
>> +                            /* Receipt of a normal data message never 
>> creates the TIPC_ERRINFO
>> +                               and TIPC_RETDATA objects, and only creates 
>> the TIPC_DESTNAME object
>> +                               if the message was sent using a TIPC name or 
>> name sequence as the
>> +                               destination rather than a TIPC port ID*/
>> +                            if (anc->cmsg_type == TIPC_ERRINFO) {
>> +                                    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 */
>> +                                            m_MDS_LOG_DBG("MDTM: 
>> undelivered message condition ancillary data: TIPC_ERRINFO err : %d", 
>> anc_data[0]);
>> +                                    }
>> +                            } else if (anc->cmsg_type == TIPC_RETDATA) {
>> +                                    /* 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, can be replaced with flow control logic */
>> +                                    /* TIPC_RETDATA -The contents of a 
>> returned data message */
>> +                                    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");
>> +                                    }
>>                              } else {
>> -                                    /* TIPC_ERRINFO - TIPC error code 
>> associated with a returned data message or a connection termination message 
>> */
>> -                                    m_MDS_LOG_DBG("MDTM: undelivered 
>> message condition ancillary data: TIPC_ERRINFO err : %d", anc_data[0]);
>> +                                    m_MDS_LOG_INFO("MDTM: unrecognized 
>> ancillary data type %u\n",   anc->cmsg_type);
>> +                                    if (sz == 0) {
>> +                                            m_MDS_LOG_DBG("MDTM: recd 
>> bytes=0 on received on sock, abnormal/unkown  condition. Ignoring");
>> +                                    }
>>                              }
>> -                    } else if (anc->cmsg_type == TIPC_RETDATA) {
>> -                            /* 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, can be replaced with flow control logic */
>> -                            /* TIPC_RETDATA -The contents of a returned 
>> data message */
>> -                            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");
>> -                            }
>> -                    } else {
>> -                            m_MDS_LOG_INFO("MDTM: unrecognized ancillary 
>> data type %u\n",   anc->cmsg_type);
>> -                            if (sz == 0) {
>> -                                    m_MDS_LOG_DBG("MDTM: recd bytes=0 on 
>> received on sock, abnormal/unkown  condition. Ignoring");
>> -                            }
>> +
>> +                            anc = CMSG_NXTHDR(&msg, anc);
>>                      }
>>    
>> -                    anc = CMSG_NXTHDR(&msg, anc);
>> +                    if (has_addr)
>> +                            *addrlen = msg.msg_namelen;
>>              }
>> -
>> -            if (has_addr)
>> -                    *addrlen = msg.msg_namelen;
>> -    } else {
>> -            /* -1 indicates connection termination connectionless this not 
>> possible */
>> -            abort();
>> +            return sz;
>>      }
>> -
>> -    return sz;
>>    }
>>    
>>    /*********************************************************
>> @@ -651,91 +657,112 @@ ssize_t recvfrom_connectionless (int sd,
>>     *********************************************************/
>>    static uint32_t mdtm_process_recv_events(void)  {
>> +    enum {
>> +            FD_DSOCK = 0,
>> +            FD_BSRSOCK,
>> +            FD_TMRFD,
>> +            NUM_FDS
>> +    };
>> +
>>      /*
>>         STEP 1: Poll on the BSRsock and Dsock to get the events
>>         if data is received process the received data
>>         if discovery events are received , process the discovery events
>>       */
>>    
>> -    while (1) {
>> +    while (true) {
>>              unsigned int pollres;
>> -            struct pollfd pfd[3];
>> +            struct pollfd pfd[NUM_FDS] = {{0}};
>>              struct tipc_event event;
>>    
>> -            pfd[0].fd = tipc_cb.Dsock;
>> -            pfd[0].events = POLLIN;
>> -            pfd[1].fd = tipc_cb.BSRsock;
>> -            pfd[1].events = POLLIN;
>> -            pfd[2].fd = tipc_cb.tmr_fd;
>> -            pfd[2].events = POLLIN;
>> -
>> -            pfd[0].revents = pfd[1].revents = pfd[2].revents = 0;
>> -
>> -            pollres = poll(pfd, 3, MDTM_TIPC_POLL_TIMEOUT);
>> +            pfd[FD_DSOCK].fd = tipc_cb.Dsock;
>> +            pfd[FD_DSOCK].events = POLLIN;
>> +            pfd[FD_BSRSOCK].fd = tipc_cb.BSRsock;
>> +            pfd[FD_BSRSOCK].events = POLLIN;
>> +            pfd[FD_TMRFD].fd = tipc_cb.tmr_fd;
>> +            pfd[FD_TMRFD].events = POLLIN;
>> +
>> +            pfd[FD_DSOCK].revents = pfd[FD_BSRSOCK].revents =
>> +pfd[FD_TMRFD].revents = 0;
>> +
>> +            pollres = poll(pfd, NUM_FDS, MDTM_TIPC_POLL_TIMEOUT);
>>    
>>              if (pollres > 0) {      /* Check for EINTR and discard */
>>                      memset(&event, 0, sizeof(event));
>>                      osaf_mutex_lock_ordie(&gl_mds_library_mutex);
>> -                    if (pfd[0].revents == POLLIN) {
>> -                            if (recv(tipc_cb.Dsock, &event, sizeof(event), 
>> 0) != sizeof(event)) {
>> -                                    m_MDS_LOG_ERR("Unable to capture the 
>> recd event .. Continuing  err :%s", strerror(errno));
>> -                                    
>> osaf_mutex_unlock_ordie(&gl_mds_library_mutex);
>> -                                    continue;
>> -                            } else {
>> -                                    if (NTOHL(event.event) == 
>> TIPC_PUBLISHED) {
>> -
>> -                                            m_MDS_LOG_INFO("MDTM: 
>> Published: ");
>> -                                            m_MDS_LOG_INFO("MDTM:  
>> <%u,%u,%u> port id <0x%08x:%u>\n",
>> -                                                           
>> NTOHL(event.s.seq.type), NTOHL(event.found_lower),
>> -                                                           
>> NTOHL(event.found_upper), NTOHL(event.port.node),
>> -                                                           
>> NTOHL(event.port.ref));
>> -
>> -                                            if ( NCSCC_RC_SUCCESS != 
>> mdtm_process_discovery_events(TIPC_PUBLISHED,
>> -                                                            event)) {
>> -                                                    m_MDS_LOG_INFO("MDTM: 
>> Published Event processing status: F");
>> +                    if (pfd[FD_DSOCK].revents == POLLIN) {
>> +                            while(true) {
>> +                                    ssize_t rc = recv(tipc_cb.Dsock, 
>> &event, sizeof(event), MSG_DONTWAIT);
>> +                                    if (rc == -1) {
>> +                                            if (errno == EAGAIN || errno == 
>> EWOULDBLOCK) {
>> +                                                    break;
>> +                                            } else if (errno == EINTR) {
>> +                                                    continue;
>> +                                            } else {
>> +                                                    m_MDS_LOG_ERR("Unable 
>> to capture the recd event .. Continuing  err :%s", strerror(errno));
>> +                                                    break;
>>                                              }
>> -                                    } else if (NTOHL(event.event) == 
>> TIPC_WITHDRAWN) {
>> -                                            m_MDS_LOG_INFO("MDTM: 
>> Withdrawn: ");
>> -                                            m_MDS_LOG_INFO("MDTM:  
>> <%u,%u,%u> port id <0x%08x:%u>\n",
>> -                                                           
>> NTOHL(event.s.seq.type), NTOHL(event.found_lower),
>> -                                                           
>> NTOHL(event.found_upper), NTOHL(event.port.node),
>> -                                                           
>> NTOHL(event.port.ref));
>> -
>> -                                            if ( NCSCC_RC_SUCCESS != 
>> mdtm_process_discovery_events(TIPC_WITHDRAWN,
>> -                                                            event)) {
>> -                                                    m_MDS_LOG_INFO("MDTM: 
>> Withdrawn event processing status: F");
>> +                                    } else {
>> +                                            if (rc != sizeof(event)) {
>> +                                                    m_MDS_LOG_ERR("Unable 
>> to capture the recd event .. Continuing  err :%s", strerror(errno));
>> +                                                    break;
>> +                                            } else {
>> +                                                    if (NTOHL(event.event) 
>> == TIPC_PUBLISHED) {
>> +
>> +                                                            
>> m_MDS_LOG_INFO("MDTM: Published: ");
>> +                                                            
>> m_MDS_LOG_INFO("MDTM:  <%u,%u,%u> port id <0x%08x:%u>\n",
>> +                                                                           
>> NTOHL(event.s.seq.type), NTOHL(event.found_lower),
>> +                                                                           
>> NTOHL(event.found_upper), NTOHL(event.port.node),
>> +                                                                           
>> NTOHL(event.port.ref));
>> +
>> +                                                            if ( 
>> NCSCC_RC_SUCCESS != mdtm_process_discovery_events(TIPC_PUBLISHED,
>> +                                                                            
>>                                        event)) {
>> +                                                                    
>> m_MDS_LOG_INFO("MDTM: Published Event processing status: F");
>> +                                                            }
>> +                                                    } else if 
>> (NTOHL(event.event) == TIPC_WITHDRAWN) {
>> +                                                            
>> m_MDS_LOG_INFO("MDTM: Withdrawn: ");
>> +                                                            
>> m_MDS_LOG_INFO("MDTM:  <%u,%u,%u> port id <0x%08x:%u>\n",
>> +                                                                           
>> NTOHL(event.s.seq.type), NTOHL(event.found_lower),
>> +                                                                           
>> NTOHL(event.found_upper), NTOHL(event.port.node),
>> +                                                                           
>> NTOHL(event.port.ref));
>> +
>> +                                                            if ( 
>> NCSCC_RC_SUCCESS != mdtm_process_discovery_events(TIPC_WITHDRAWN,
>> +                                                                            
>>                                        event)) {
>> +                                                                    
>> m_MDS_LOG_INFO("MDTM: Withdrawn event processing status: F");
>> +                                                            }
>> +                                                    } else if 
>> (NTOHL(event.event) == TIPC_SUBSCR_TIMEOUT) {
>> +                                                            /* As the 
>> timeout passed in infinite, No need to check for the Timeout */
>> +                                                            
>> m_MDS_LOG_ERR("MDTM: Timeou Event");
>> +                                                            
>> m_MDS_LOG_INFO("MDTM: Timeou Event");
>> +                                                            
>> m_MDS_LOG_INFO("MDTM:  <%u,%u,%u> port id <0x%08x:%u>\n",
>> +                                                                           
>> NTOHL(event.s.seq.type), NTOHL(event.found_lower),
>> +                                                                           
>> NTOHL(event.found_upper), NTOHL(event.port.node),
>> +                                                                           
>> NTOHL(event.port.ref));
>> +                                                    } else {
>> +                                                            
>> m_MDS_LOG_ERR("MDTM: Unknown Event");
>> +                                                            /* This should 
>> never come */
>> +                                                            assert(0);
>> +                                                    }
>>                                              }
>> -                                    } else if (NTOHL(event.event) == 
>> TIPC_SUBSCR_TIMEOUT) {
>> -                                            /* As the timeout passed in 
>> infinite, No need to check for the Timeout */
>> -                                            m_MDS_LOG_ERR("MDTM: Timeou 
>> Event");
>> -                                            m_MDS_LOG_INFO("MDTM: Timeou 
>> Event");
>> -                                            m_MDS_LOG_INFO("MDTM:  
>> <%u,%u,%u> port id <0x%08x:%u>\n",
>> -                                                           
>> NTOHL(event.s.seq.type), NTOHL(event.found_lower),
>> -                                                           
>> NTOHL(event.found_upper), NTOHL(event.port.node),
>> -                                                           
>> NTOHL(event.port.ref));
>> -                                    } else {
>> -                                            m_MDS_LOG_ERR("MDTM: Unknown 
>> Event");
>> -                                            /* This should never come */
>> -                                            assert(0);
>>                                      }
>>                              }
>> -                    } else if (pfd[0].revents & POLLHUP) {
>> +                    }
>> +                    if (pfd[FD_DSOCK].revents & POLLHUP) {
>>                              /* This value is returned when the number of 
>> subscriptions made cross the tipc max_subscr limit,
>>                                 so no more connection to the tipc topserver 
>> is present(viz no more up/down events),
>>                                 so abort and exit the process */
>> -                               m_MDS_LOG_CRITICAL("MDTM: POLLHUP returned 
>> on Discovery Socket, No. of subscriptions=%d",
>> -                                 num_subscriptions);
>> +                            m_MDS_LOG_CRITICAL("MDTM: POLLHUP returned on 
>> Discovery Socket, No. of subscriptions=%d",
>> +                                               num_subscriptions);
>>                              abort();        /* This means, the process is 
>> use less as
>>                                                 it has lost the connectivity 
>> with the topology server
>>                                                 and will not be able to 
>> receive any UP/DOWN events */
>>    
>> -                    } else if (pfd[1].revents & POLLIN) {
>> +                    }
>> +                    if (pfd[FD_BSRSOCK].revents & POLLIN) {
>>    
>>                              /* Data Received */
>>    
>>                              uint8_t *inbuf = tipc_cb.recvbuf;
>>                              uint8_t *data;  /* Used for decoding */
>> -                            uint16_t recd_bytes = 0;
>>    #ifdef MDS_CHECKSUM_ENABLE_FLAG
>>                              uint16_t old_checksum = 0;
>>                              uint16_t new_checksum = 0;
>> @@ -743,78 +770,83 @@ static uint32_t mdtm_process_recv_events
>>                              struct sockaddr_tipc client_addr;
>>                              socklen_t alen = sizeof(client_addr);
>>    
>> -                            uint16_t recd_buf_len = 0;
>>                              m_MDS_LOG_INFO("MDTM: Data received: Processing 
>> data ");
>>    
>> -                            recd_bytes = 
>> recvfrom_connectionless(tipc_cb.BSRsock, inbuf, TIPC_MAX_USER_MSG_SIZE, 0,
>> -                                            (struct sockaddr 
>> *)&client_addr, &alen);
>> -                            if (recd_bytes == 0) {
>> -                                    m_MDS_LOG_DBG("MDTM: recd bytes=0 on 
>> received on sock, abnormal/unknown/hack  condition. Ignoring");
>> -                                    
>> osaf_mutex_unlock_ordie(&gl_mds_library_mutex);
>> -                                    continue;
>> +                            while (true) {
>> +                                    uint16_t recd_buf_len = 0;
>> +                                    ssize_t recd_bytes = 
>> recvfrom_connectionless(tipc_cb.BSRsock, inbuf, TIPC_MAX_USER_MSG_SIZE, 
>> MSG_DONTWAIT,
>> +                                                                         
>> (struct sockaddr *)&client_addr, &alen);
>> +                                    if (recd_bytes == -1) {
>> +                                            m_MDS_LOG_DBG("MDTM: no more 
>> data to read");
>> +                                            break;
>> +                                    }
>> +                                    if (recd_bytes == 0) {
>> +                                            m_MDS_LOG_DBG("MDTM: recd 
>> bytes=0 on received on sock, abnormal/unknown/hack  condition. Ignoring");
>> +                                            break;
>> +                                    }
>> +                                    data = inbuf;
>> +
>> +                                    recd_buf_len = ncs_decode_16bit(&data);
>> +
>> +                                    if (pfd[FD_BSRSOCK].revents & POLLERR) {
>> +                                            m_MDS_LOG_ERR("MDTM: Error 
>> Recd:tipc_id=<0x%08x:%u>:errno=0x%08x",
>> +                                                          
>> client_addr.addr.id.node, client_addr.addr.id.ref, errno);
>> +                                    } else if (recd_buf_len == recd_bytes) {
>> +                                            uint64_t tipc_id = 0;
>> +                                            uint32_t buff_dump = 0;
>> +                                            tipc_id = 
>> ((uint64_t)client_addr.addr.id.node) << 32;   /* TIPC_ID=<NODE,REF> */
>> +                                            tipc_id |= 
>> client_addr.addr.id.ref;
>> +
>> +#ifdef MDS_CHECKSUM_ENABLE_FLAG
>> +                                            if (inbuf[2] == 1) {
>> +                                                    old_checksum = 
>> ((uint16_t)inbuf[3] << 8 | inbuf[4]);
>> +                                                    inbuf[3] = 0;
>> +                                                    inbuf[4] = 0;
>> +                                                    new_checksum = 
>> mds_checksum(recd_bytes, inbuf);
>> +
>> +                                                    if (old_checksum != 
>> new_checksum) {
>> +                                                            m_MDS_LOG_ERR
>> +                                                                    
>> ("CHECKSUM-MISMATCH:recvd_on_sock=%zd, Tipc_id=0x%llu, Adest = <%08x,%u>",
>> +                                                                     
>> recd_bytes, tipc_id,
>> +                                                                     
>> m_MDS_GET_NCS_NODE_ID_FROM_TIPC_NODE_ID(client_addr.addr.
>> +                                                                            
>>                                  id.node),
>> +                                                                     
>> client_addr.addr.id.ref);
>> +                                                            
>> mds_buff_dump(inbuf, recd_bytes, 100);
>> +                                                            abort();
>> +                                                            break;
>> +                                                    }
>> +                                                    
>> mdtm_process_recv_data(&inbuf[5], recd_bytes - 5, tipc_id, &buff_dump);
>> +                                                    if (buff_dump) {
>> +                                                            m_MDS_LOG_ERR
>> +                                                                    
>> ("RECV_DATA_PROCESS:recvd_on_sock=%zd, Tipc_id=0x%llu, Adest = <%08x,%u>",
>> +                                                                     
>> recd_bytes, tipc_id,
>> +                                                                     
>> m_MDS_GET_NCS_NODE_ID_FROM_TIPC_NODE_ID(client_addr.addr.
>> +                                                                            
>>                                  id.node),
>> +                                                                     
>> client_addr.addr.id.ref);
>> +                                                            
>> mds_buff_dump(inbuf, recd_bytes, 100);
>> +                                                    }
>> +                                            } else {
>> +                                                    
>> mdtm_process_recv_data(&inbuf[5], recd_bytes - 5, tipc_id, &buff_dump);
>> +                                            }
>> +#else
>> +                                            
>> mdtm_process_recv_data(&inbuf[2], recd_bytes - 2, tipc_id,
>> +&buff_dump); #endif
>> +                                    } else {
>> +                                            uint64_t tipc_id;
>> +                                            tipc_id = 
>> ((uint64_t)client_addr.addr.id.node) << 32;   /* TIPC_ID=<NODE,REF> */
>> +                                            tipc_id |= 
>> client_addr.addr.id.ref;
>> +
>> +                                            /* Log message that we are 
>> dropping the data */
>> +                                            m_MDS_LOG_ERR
>> +                                                    
>> ("LEN-MISMATCH:recvd_on_sock=%zd, size_in_mds_hdr=%d,  Tipc_id= %"PRIu64", 
>> Adest = <%08x,%u>",
>> +                                                     recd_bytes, 
>> recd_buf_len, tipc_id,
>> +                                                     
>> m_MDS_GET_NCS_NODE_ID_FROM_TIPC_NODE_ID(client_addr.addr.id.node),
>> +                                                     
>> client_addr.addr.id.ref);
>> +                                            mds_buff_dump(inbuf, 
>> recd_bytes, 100);
>> +                                    }
>>                              }
>> -                            data = inbuf;
>> -
>> -                            recd_buf_len = ncs_decode_16bit(&data);
>> -
>> -                            if (pfd[1].revents & POLLERR) {
>> -                                    m_MDS_LOG_ERR("MDTM: Error 
>> Recd:tipc_id=<0x%08x:%u>:errno=0x%08x",
>> -                                                  client_addr.addr.id.node, 
>> client_addr.addr.id.ref, errno);
>> -                            } else if (recd_buf_len == recd_bytes) {
>> -                                    uint64_t tipc_id = 0;
>> -                                    uint32_t buff_dump = 0;
>> -                                    tipc_id = 
>> ((uint64_t)client_addr.addr.id.node) << 32;   /* TIPC_ID=<NODE,REF> */
>> -                                    tipc_id |= client_addr.addr.id.ref;
>> -
>> -#ifdef MDS_CHECKSUM_ENABLE_FLAG
>> -                                    if (inbuf[2] == 1) {
>> -                                            old_checksum = 
>> ((uint16_t)inbuf[3] << 8 | inbuf[4]);
>> -                                            inbuf[3] = 0;
>> -                                            inbuf[4] = 0;
>> -                                            new_checksum = 
>> mds_checksum(recd_bytes, inbuf);
>> -
>> -                                            if (old_checksum != 
>> new_checksum) {
>> -                                                    m_MDS_LOG_ERR
>> -                                                        
>> ("CHECKSUM-MISMATCH:recvd_on_sock=%d, Tipc_id=0x%llu, Adest = <%08x,%u>",
>> -                                                         recd_bytes, 
>> tipc_id,
>> -                                                         
>> m_MDS_GET_NCS_NODE_ID_FROM_TIPC_NODE_ID(client_addr.addr.
>> -                                                                            
>>                      id.node),
>> -                                                         
>> client_addr.addr.id.ref);
>> -                                                    mds_buff_dump(inbuf, 
>> recd_bytes, 100);
>> -                                                    abort();
>> -                                                    
>> osaf_mutex_unlock_ordie(&gl_mds_library_mutex);
>> -                                                    continue;
>> -                                            }
>> -                                            
>> mdtm_process_recv_data(&inbuf[5], recd_bytes - 5, tipc_id, &buff_dump);
>> -                                            if (buff_dump) {
>> -                                                    m_MDS_LOG_ERR
>> -                                                        
>> ("RECV_DATA_PROCESS:recvd_on_sock=%d, Tipc_id=0x%llu, Adest = <%08x,%u>",
>> -                                                         recd_bytes, 
>> tipc_id,
>> -                                                         
>> m_MDS_GET_NCS_NODE_ID_FROM_TIPC_NODE_ID(client_addr.addr.
>> -                                                                            
>>                      id.node),
>> -                                                         
>> client_addr.addr.id.ref);
>> -                                                    mds_buff_dump(inbuf, 
>> recd_bytes, 100);
>> -                                            }
>> -                                    } else {
>> -                                            
>> mdtm_process_recv_data(&inbuf[5], recd_bytes - 5, tipc_id, &buff_dump);
>> -                                    }
>> -#else
>> -                                    mdtm_process_recv_data(&inbuf[2], 
>> recd_bytes - 2, tipc_id, &buff_dump);
>> -#endif
>> -                            } else {
>> -                                    uint64_t tipc_id;
>> -                                    tipc_id = 
>> ((uint64_t)client_addr.addr.id.node) << 32;   /* TIPC_ID=<NODE,REF> */
>> -                                    tipc_id |= client_addr.addr.id.ref;
>> -
>> -                                    /* Log message that we are dropping the 
>> data */
>> -                                    m_MDS_LOG_ERR
>> -                                        ("LEN-MISMATCH:recvd_on_sock=%d, 
>> size_in_mds_hdr=%d,  Tipc_id= %"PRIu64", Adest = <%08x,%u>",
>> -                                         recd_bytes, recd_buf_len, tipc_id,
>> -                                         
>> m_MDS_GET_NCS_NODE_ID_FROM_TIPC_NODE_ID(client_addr.addr.id.node),
>> -                                         client_addr.addr.id.ref);
>> -                                    mds_buff_dump(inbuf, recd_bytes, 100);
>> -                            }
>> -                    } else if (pfd[2].revents == POLLIN) {
>> +                    }
>> +                    if (pfd[FD_TMRFD].revents == POLLIN) {
>>                              m_MDS_LOG_INFO("MDTM: Processing Timer mailbox 
>> events\n");
>>    
>>                              /* Check if destroy-event has been processed */
>>
>> ----------------------------------------------------------------------
>> -------- The Command Line: Reinvented for Modern Developers Did the
>> resurgence of CLI tooling catch you by surprise?
>> Reconnect with the command line and become more productive.
>> Learn the new .NET and ASP.NET CLI. Get your free copy!
>> http://sdm.link/telerik
>> _______________________________________________
>> Opensaf-devel mailing list
>> Opensaf-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/opensaf-devel


------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to