Not sure I understand the use case for setting NODELAY to false. In the code you have a comment about setting it to true which anyway is the default. So what is the benefit of setting it to false? Since dtm is a system wide messaging service it will affect all services for example AMFs healtchecks can be delayed sitting in a queue somewhere...
Thanks, Hans > -----Original Message----- > From: [email protected] [mailto:[email protected]] > Sent: den 19 maj 2014 06:41 > To: [email protected]; Hans Feldt > Cc: [email protected] > Subject: [PATCH 3 of 3] dtm: make TCP_NODELAY set socket option configurable > [#654] > > osaf/services/infrastructure/dtms/config/dtmd.conf | 11 ++++ > osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c | 36 > ++++++++-------- > osaf/services/infrastructure/dtms/dtm/dtm_read_config.c | 15 ++++++ > osaf/services/infrastructure/dtms/include/dtm_cb.h | 1 + > 4 files changed, 45 insertions(+), 18 deletions(-) > > > Made TCP_NODELAY configurable to specifi whether MDS TCP > transport should follow the Nagle algorithm for deciding when to send data.By > default, TCP will follow the Nagle algorithm is disable this behavior , can be > configured to TRUE(1) or FALSE(0) > > Note :This path is on top of Hans Feldt published on 4-29-2014 10:58 AM. > > diff --git a/osaf/services/infrastructure/dtms/config/dtmd.conf > b/osaf/services/infrastructure/dtms/config/dtmd.conf > --- a/osaf/services/infrastructure/dtms/config/dtmd.conf > +++ b/osaf/services/infrastructure/dtms/config/dtmd.conf > @@ -85,3 +85,14 @@ DTM_TCP_KEEPALIVE_PROBES=2 > #export MDS_SOCK_SND_RCV_BUF_SIZE=16777216 > DTM_SOCK_SND_RCV_BUF_SIZE=126976 > > +# > +#Specifies whether MDS TCP transport should follow the Nagle algorithm for > +#deciding when to send data.By default, TCP will follow the Nagle algorithm > is disable > +#this behavior,MDS TCP transport can enable TCP_NODELAY to force > +#TCP to always send data immediately.For example,TCP_NODELAY should be used > +#when there is an application using TCP for a request/response. > +#This option is only supported for sockets with an address family > +#of AF_INET or AF_INET6 (internode )and type of SOCK_STREAM > +# TRUE(1) or FALSE(0) > +DTM_TCP_NODELAY_FLAG=1 > + > diff --git a/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c > b/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c > --- a/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c > +++ b/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c > @@ -577,12 +577,12 @@ int comm_socket_setup_new(DTM_INTERNODE_ > goto done; > } > > - int flag = 1; > - if (setsockopt(sock_desc, IPPROTO_TCP, TCP_NODELAY, (void *)&flag, > sizeof(flag)) != 0) { > - LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", > strerror(errno)); > - dtm_comm_socket_close(&sock_desc); > - goto done; > - } > + int flag = dtms_cb->tcp_nodelay_flag; > + if (setsockopt(sock_desc, IPPROTO_TCP, TCP_NODELAY, (void *)&flag, > sizeof(flag)) != 0) { > + LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", > strerror(errno)); > + dtm_comm_socket_close(&sock_desc); > + goto done; > + } > > if (NCSCC_RC_SUCCESS != set_keepalive(dtms_cb, sock_desc)) { > LOG_ER("DTM :set_keepalive failed "); > @@ -727,12 +727,12 @@ uint32_t dtm_stream_nonblocking_listener > LOG_ER("DTM:Socket snd buf size set failed err :%s", > strerror(errno)); > } > > - int flag = 1; > - if (setsockopt(dtms_cb->stream_sock, IPPROTO_TCP, TCP_NODELAY, (void > *)&flag, sizeof(flag)) != 0) { > - LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", > strerror(errno)); > - dtm_sockdesc_close(dtms_cb->stream_sock); > - return NCSCC_RC_FAILURE; > - } > + int flag = dtms_cb->tcp_nodelay_flag; > + if (setsockopt(dtms_cb->stream_sock, IPPROTO_TCP, TCP_NODELAY, (void > *)&flag, sizeof(flag)) != 0) { > + LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", > strerror(errno)); > + dtm_sockdesc_close(dtms_cb->stream_sock); > + return NCSCC_RC_FAILURE; > + } > > if (set_keepalive(dtms_cb, dtms_cb->stream_sock) != NCSCC_RC_SUCCESS) { > LOG_ER("DTM : set_keepalive() failed"); > @@ -1296,12 +1296,12 @@ int dtm_process_accept(DTM_INTERNODE_CB > goto done; > } > > - int flag = 1; > - if (setsockopt(new_conn_sd, IPPROTO_TCP, TCP_NODELAY, (void *)&flag, > sizeof(flag)) != 0) { > - LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", > strerror(errno)); > - dtm_comm_socket_close(&new_conn_sd); > - goto done; > - } > + int flag = dtms_cb->tcp_nodelay_flag; > + if (setsockopt(new_conn_sd, IPPROTO_TCP, TCP_NODELAY, (void *)&flag, > sizeof(flag)) != 0) { > + LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", > strerror(errno)); > + dtm_comm_socket_close(&new_conn_sd); > + goto done; > + } > > if (NCSCC_RC_SUCCESS != set_keepalive(dtms_cb, new_conn_sd)) { > LOG_ER("DTM:set_keepalive failed "); > diff --git a/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c > b/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c > --- a/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c > +++ b/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c > @@ -96,6 +96,8 @@ void dtm_print_config(DTM_INTERNODE_CB * > TRACE(" %d", config->bcast_msg_freq); > TRACE(" DTM_SOCK_SND_RCV_BUF_SIZE: "); > TRACE(" %d", config->sock_snd_rcv_buf_size); > + TRACE(" DTM_TCP_NODELAY_FLAG: "); > + TRACE(" %d", config->tcp_nodelay_flag); > TRACE("DTM : "); > } > > @@ -223,6 +225,7 @@ int dtm_read_config(DTM_INTERNODE_CB * c > config->bcast_msg_freq = BCAST_FRE; > config->initial_dis_timeout = DIS_TIME_OUT; > config->sock_snd_rcv_buf_size = DTM_SOCK_SND_RCV_BUF_SIZE; > + config->tcp_nodelay_flag = true; > config->mcast_flag = false; > config->scope_link = false; > config->node_id = m_NCS_GET_NODE_ID; > @@ -439,6 +442,18 @@ int dtm_read_config(DTM_INTERNODE_CB * c > tag_len = 0; > > } > + > + if (strncmp(line, "DTM_TCP_NODELAY_FLAG=", > strlen("DTM_TCP_NODELAY_FLAG=")) == 0) { > + tag_len = strlen("DTM_TCP_NODELAY_FLAG="); > + config->tcp_nodelay_flag = atoi(&line[tag_len]); > + if (config->tcp_nodelay_flag < 0 || > config->tcp_nodelay_flag > 1) { > + LOG_ER("DTM: DTM_TCP_NODELAY_FLAG > needs to be 0 or 1 of dtmd.conf "); > + return -1; > + } > + tag = 0; > + tag_len = 0; > + > + } > } > > memset(line, 0, DTM_MAX_TAG_LEN); > diff --git a/osaf/services/infrastructure/dtms/include/dtm_cb.h > b/osaf/services/infrastructure/dtms/include/dtm_cb.h > --- a/osaf/services/infrastructure/dtms/include/dtm_cb.h > +++ b/osaf/services/infrastructure/dtms/include/dtm_cb.h > @@ -91,6 +91,7 @@ typedef struct dtm_internode_cb { > int comm_keepalive_intvl; > int comm_keepalive_probes; > int32_t sock_snd_rcv_buf_size; /* The value of SO_RCVBUF & SO_SNDBUF */ > + uint32_t tcp_nodelay_flag; /* The value of TCP_NODELAY Flag */ > SYSF_MBX mbx; > int mbx_fd; > } DTM_INTERNODE_CB; ------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
