diff options
-rw-r--r-- | doc/glusterd.vol | 1 | ||||
-rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 35 | ||||
-rw-r--r-- | rpc/rpc-transport/socket/src/socket.h | 1 |
3 files changed, 29 insertions, 8 deletions
diff --git a/doc/glusterd.vol b/doc/glusterd.vol index 4518e8d65c3..809042cbdd9 100644 --- a/doc/glusterd.vol +++ b/doc/glusterd.vol @@ -4,4 +4,5 @@ volume management option transport-type socket,rdma option transport.socket.keepalive-time 10 option transport.socket.keepalive-interval 2 + option transport.socket.read-fail-log off end-volume diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index 674259e5f18..9937dc4a6e6 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -43,7 +43,6 @@ #include <errno.h> #include <netinet/tcp.h> #include <rpc/xdr.h> - #define GF_LOG_ERRNO(errno) ((errno == ENOTCONN) ? GF_LOG_DEBUG : GF_LOG_ERROR) #define SA(ptr) ((struct sockaddr *)ptr) @@ -1486,12 +1485,14 @@ __socket_proto_state_machine (rpc_transport_t *this, &priv->incoming.pending_count, NULL); if (ret == -1) { - gf_log (this->name, - ((priv->connected == 1) ? - GF_LOG_WARNING : GF_LOG_DEBUG), - "reading from socket failed. Error (%s)" - ", peer (%s)", strerror (errno), - this->peerinfo.identifier); + if (priv->read_fail_log == 1) { + gf_log (this->name, + ((priv->connected == 1) ? + GF_LOG_WARNING : GF_LOG_DEBUG), + "reading from socket failed. Error (%s)" + ", peer (%s)", strerror (errno), + this->peerinfo.identifier); + } goto out; } @@ -2536,7 +2537,6 @@ socket_init (rpc_transport_t *this) priv->nodelay = 1; priv->bio = 0; priv->windowsize = GF_DEFAULT_SOCKET_WINDOW_SIZE; - INIT_LIST_HEAD (&priv->ioq); /* All the below section needs 'this->options' to be present */ @@ -2629,6 +2629,22 @@ socket_init (rpc_transport_t *this) priv->backlog = backlog; } + optstr = NULL; + + /* Check if socket read failures are to be logged */ + priv->read_fail_log = 1; + if (dict_get (this->options, "transport.socket.read-fail-log")) { + optstr = data_to_str (dict_get (this->options, "transport.socket.read-fail-log")); + if (gf_string2boolean (optstr, &tmp_bool) == -1) { + gf_log (this->name, GF_LOG_WARNING, + "'transport.socket.read-fail-log' takes only " + "boolean options; logging socket read fails"); + } + else if (tmp_bool == _gf_false) { + priv->read_fail_log = 0; + } + } + priv->windowsize = (int)windowsize; out: this->private = priv; @@ -2734,5 +2750,8 @@ struct volume_options options[] = { { .key = {"transport.socket.listen-backlog"}, .type = GF_OPTION_TYPE_INT }, + { .key = {"transport.socket.read-fail-log"}, + .type = GF_OPTION_TYPE_BOOL + }, { .key = {NULL} } }; diff --git a/rpc/rpc-transport/socket/src/socket.h b/rpc/rpc-transport/socket/src/socket.h index 4acecab2a61..c52026cc829 100644 --- a/rpc/rpc-transport/socket/src/socket.h +++ b/rpc/rpc-transport/socket/src/socket.h @@ -193,6 +193,7 @@ typedef struct { int keepaliveidle; int keepaliveintvl; uint32_t backlog; + gf_boolean_t read_fail_log; } socket_private_t; |